Files | |
file | cc2538_gpio.h |
Driver for the cc2538 GPIO controller. | |
Data Structures | |
struct | cc2538_gpio_t |
GPIO port component registers. More... | |
struct | cc2538_ioc_t |
IOC port component registers. More... | |
Macros | |
#define | GPIO_PORT_SHIFT 3 |
Right-shift amount to obtain the port number from a GPIO number. | |
#define | GPIO_BITS_PER_PORT ( 1 << GPIO_PORT_SHIFT ) |
Number of bits per GPIO port (8) | |
#define | GPIO_BIT_MASK ( GPIO_BITS_PER_PORT - 1 ) |
Mask to obtain the bit number from a GPIO number. | |
#define | PIN_MASK(n) ( 1 << (n) ) |
Generate a bit mask in which only the specified bit is high. More... | |
#define | GPIO_NUM_TO_PORT_NUM(gpio_num) ( (gpio_num) >> GPIO_PORT_SHIFT ) |
Extract the GPIO port number (0-3) from a GPIO number (0-31) More... | |
#define | GPIO_BIT_NUM(gpio_num) ( (gpio_num) & GPIO_BIT_MASK ) |
Extract the GPIO port bit number (0-7) from a GPIO number (0-31) More... | |
#define | GPIO_PXX_TO_NUM(port_num, bit_num) ( ((port_num) << GPIO_PORT_SHIFT) | (bit_num) ) |
Generate a GPIO number given a port and bit number. More... | |
#define | GPIO_NUM_TO_DEV(gpio_num) ( GPIO_A + GPIO_NUM_TO_PORT_NUM(gpio_num) ) |
Obtain the GPIO port instance given a GPIO number (0-31) More... | |
#define | gpio_hardware_control(gpio_num) ( GPIO_NUM_TO_DEV(gpio_num)->AFSEL |= PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Enable hardware (peripheral) control for a given GPIO pin number. More... | |
#define | gpio_software_control(gpio_num) ( GPIO_NUM_TO_DEV(gpio_num)->AFSEL &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Enable software control for a given GPIO pin number. More... | |
#define | gpio_dir_output(gpio_num) ( GPIO_NUM_TO_DEV(gpio_num)->DIR |= PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Configure the given GPIO as an output. More... | |
#define | gpio_dir_input(gpio_num) ( GPIO_NUM_TO_DEV(gpio_num)->DIR &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Configure the given GPIO as an input. More... | |
#define | cc2538_gpio_read(gpio_num) ( (GPIO_NUM_TO_DEV(gpio_num)->DATA >> GPIO_BIT_NUM(gpio_num)) & 1 ) |
Read the value of the given pin. More... | |
#define | cc2538_gpio_clear(gpio_num) ( GPIO_NUM_TO_DEV(gpio_num)->DATA &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Set a specific GPIO output pin low. More... | |
#define | GPIO_BASE (0x400d9000) |
GPIO port instance base address. | |
#define | IOC ((cc2538_ioc_t *)0x400d4000) |
IOC instance definition. | |
Enumerations | |
enum | cc2538_ioc_over_t { OVERRIDE_DISABLE = 0x0, OVERRIDE_ANALOG = 0x1, OVERRIDE_PULLDOWN = 0x2, OVERRIDE_PULLUP = 0x4, OVERRIDE_ENABLE = 0x8 } |
Values to override pin configuration. | |
Numeric representation of the four GPIO ports | |
enum | { PORT_A = 0, PORT_B = 1, PORT_C = 2, PORT_D = 3 } |
Unique names for each GPIO port/pin combination | |
| |
enum | { GPIO_PA0 = GPIO_PXX_TO_NUM(PORT_A, 0), GPIO_PA1 = GPIO_PXX_TO_NUM(PORT_A, 1), GPIO_PA2 = GPIO_PXX_TO_NUM(PORT_A, 2), GPIO_PA3 = GPIO_PXX_TO_NUM(PORT_A, 3), GPIO_PA4 = GPIO_PXX_TO_NUM(PORT_A, 4), GPIO_PA5 = GPIO_PXX_TO_NUM(PORT_A, 5), GPIO_PA6 = GPIO_PXX_TO_NUM(PORT_A, 6), GPIO_PA7 = GPIO_PXX_TO_NUM(PORT_A, 7), GPIO_PB0 = GPIO_PXX_TO_NUM(PORT_B, 0), GPIO_PB1 = GPIO_PXX_TO_NUM(PORT_B, 1), GPIO_PB2 = GPIO_PXX_TO_NUM(PORT_B, 2), GPIO_PB3 = GPIO_PXX_TO_NUM(PORT_B, 3), GPIO_PB4 = GPIO_PXX_TO_NUM(PORT_B, 4), GPIO_PB5 = GPIO_PXX_TO_NUM(PORT_B, 5), GPIO_PB6 = GPIO_PXX_TO_NUM(PORT_B, 6), GPIO_PB7 = GPIO_PXX_TO_NUM(PORT_B, 7), GPIO_PC0 = GPIO_PXX_TO_NUM(PORT_C, 0), GPIO_PC1 = GPIO_PXX_TO_NUM(PORT_C, 1), GPIO_PC2 = GPIO_PXX_TO_NUM(PORT_C, 2), GPIO_PC3 = GPIO_PXX_TO_NUM(PORT_C, 3), GPIO_PC4 = GPIO_PXX_TO_NUM(PORT_C, 4), GPIO_PC5 = GPIO_PXX_TO_NUM(PORT_C, 5), GPIO_PC6 = GPIO_PXX_TO_NUM(PORT_C, 6), GPIO_PC7 = GPIO_PXX_TO_NUM(PORT_C, 7), GPIO_PD0 = GPIO_PXX_TO_NUM(PORT_D, 0), GPIO_PD1 = GPIO_PXX_TO_NUM(PORT_D, 1), GPIO_PD2 = GPIO_PXX_TO_NUM(PORT_D, 2), GPIO_PD3 = GPIO_PXX_TO_NUM(PORT_D, 3), GPIO_PD4 = GPIO_PXX_TO_NUM(PORT_D, 4), GPIO_PD5 = GPIO_PXX_TO_NUM(PORT_D, 5), GPIO_PD6 = GPIO_PXX_TO_NUM(PORT_D, 6), GPIO_PD7 = GPIO_PXX_TO_NUM(PORT_D, 7) } |
GPIO shift and masking | |
#define | GPIO_PORTNUM_SHIFT (12U) |
bit shift for GPIO port | |
#define | GPIO_PORTNUM_MASK (0x00007000) |
bit mask for GPIO port [0-3] | |
#define | GPIO_PIN_MASK (0x00000007) |
bit mask for GPIO pin [0-7] | |
#define | GPIO_PORT_MASK (0xfffff000) |
bit mask for GPIO port addr | |
GPIO instance definitions | |
| |
#define | GPIO_A ((cc2538_gpio_t *)0x400d9000) |
GPIO Port A instance. | |
#define | GPIO_B ((cc2538_gpio_t *)0x400da000) |
GPIO Port B instance. | |
#define | GPIO_C ((cc2538_gpio_t *)0x400db000) |
GPIO Port C instance. | |
#define | GPIO_D ((cc2538_gpio_t *)0x400dc000) |
GPIO Port D instance. | |
Peripheral Signal Select Values (for IOC_Pxx_SEL registers) | |
enum | cc2538_ioc_sel_t { UART0_TXD = 0, UART1_RTS, UART1_TXD, SSI0_TXD, SSI0_CLK_OUT, SSI0_FSS_OUT, SSI0_TX_SER, SSI1_TXD, SSI1_CLK_OUT, SSI1_FSS_OUT, SSI1_TX_SER, I2C_SDA_OUT, I2C_SCL_OUT, GPT0_ICP1, GPT0_ICP2, GPT1_ICP1, GPT1_ICP2, GPT2_ICP1, GPT2_ICP2, GPT3_ICP1, GPT3_ICP2 } |
Pin select for periphical functions | |
enum | cc2538_ioc_pin_t { UART0_RXD = 0, UART1_CTS, UART1_RXD, SSI0_CLK, SSI0_RXD, SSI0_FSS_IN, SSI0_CLK_IN, SSI1_CLK, SSI1_RXD, SSI1_FSS_IN, SSI1_CLK_IN, I2C_SDA_IN, I2C_SCL_IN, GPT0_OCP1, GPT0_OCP2, GPT1_OCP1, GPT1_OCP2, GPT2_OCP1, GPT2_OCP2, GPT3_OCP1, GPT3_OCP2 } |
Values for IOC_PXX_OVER | |
| |
#define | IOC_OVERRIDE_OE 0x00000008 |
Output Enable. | |
#define | IOC_OVERRIDE_PUE 0x00000004 |
Pull Up Enable. | |
#define | IOC_OVERRIDE_PDE 0x00000002 |
Pull Down Enable. | |
#define | IOC_OVERRIDE_ANA 0x00000001 |
Analog Enable. | |
#define | IOC_OVERRIDE_DIS 0x00000000 |
Override Disabled. | |
Port control register addresses | |
| |
#define | IOC_PXX_OVER (IOC->OVER) |
#define | IOC_PXX_SEL (IOC->SEL) |
#define cc2538_gpio_clear | ( | gpio_num | ) | ( GPIO_NUM_TO_DEV(gpio_num)->DATA &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Set a specific GPIO output pin low.
[in] | gpio_num | GPIO number (0-31) |
Definition at line 137 of file cc2538_gpio.h.
#define cc2538_gpio_read | ( | gpio_num | ) | ( (GPIO_NUM_TO_DEV(gpio_num)->DATA >> GPIO_BIT_NUM(gpio_num)) & 1 ) |
Read the value of the given pin.
[in] | gpio_num | GPIO number (0-31) |
Definition at line 130 of file cc2538_gpio.h.
#define GPIO_BIT_NUM | ( | gpio_num | ) | ( (gpio_num) & GPIO_BIT_MASK ) |
Extract the GPIO port bit number (0-7) from a GPIO number (0-31)
[in] | gpio_num | GPIO number (0-31) |
Definition at line 76 of file cc2538_gpio.h.
#define gpio_dir_input | ( | gpio_num | ) | ( GPIO_NUM_TO_DEV(gpio_num)->DIR &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Configure the given GPIO as an input.
[in] | gpio_num | GPIO number (0-31) |
Definition at line 123 of file cc2538_gpio.h.
#define gpio_dir_output | ( | gpio_num | ) | ( GPIO_NUM_TO_DEV(gpio_num)->DIR |= PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Configure the given GPIO as an output.
[in] | gpio_num | GPIO number (0-31) |
Definition at line 116 of file cc2538_gpio.h.
#define gpio_hardware_control | ( | gpio_num | ) | ( GPIO_NUM_TO_DEV(gpio_num)->AFSEL |= PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Enable hardware (peripheral) control for a given GPIO pin number.
[in] | gpio_num | GPIO number (0-31) |
Definition at line 102 of file cc2538_gpio.h.
#define GPIO_NUM_TO_DEV | ( | gpio_num | ) | ( GPIO_A + GPIO_NUM_TO_PORT_NUM(gpio_num) ) |
Obtain the GPIO port instance given a GPIO number (0-31)
[in] | gpio_num | GPIO number (0-31) |
Definition at line 95 of file cc2538_gpio.h.
#define GPIO_NUM_TO_PORT_NUM | ( | gpio_num | ) | ( (gpio_num) >> GPIO_PORT_SHIFT ) |
Extract the GPIO port number (0-3) from a GPIO number (0-31)
[in] | gpio_num | GPIO number (0-31) |
Definition at line 67 of file cc2538_gpio.h.
#define GPIO_PXX_TO_NUM | ( | port_num, | |
bit_num | |||
) | ( ((port_num) << GPIO_PORT_SHIFT) | (bit_num) ) |
Generate a GPIO number given a port and bit number.
[in] | port_num | GPIO port (PORT_A, PORT_B, PORT_C, or PORT_D) |
[in] | bit_num | GPIO bit number (0-7) |
Definition at line 86 of file cc2538_gpio.h.
#define gpio_software_control | ( | gpio_num | ) | ( GPIO_NUM_TO_DEV(gpio_num)->AFSEL &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) ) |
Enable software control for a given GPIO pin number.
[in] | gpio_num | GPIO number (0-31) |
Definition at line 109 of file cc2538_gpio.h.
#define PIN_MASK | ( | n | ) | ( 1 << (n) ) |
Generate a bit mask in which only the specified bit is high.
[in] | n | Number of the bit to set high in the mask. |
Definition at line 58 of file cc2538_gpio.h.
anonymous enum |
Definition at line 145 of file cc2538_gpio.h.
enum cc2538_ioc_pin_t |
Definition at line 279 of file cc2538_gpio.h.
enum cc2538_ioc_sel_t |
Definition at line 250 of file cc2538_gpio.h.