The friendly Operating System for the Internet of Things
CC2538 General-Purpose I/O

Detailed Description

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 GPIO_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 |= GPIO_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 &= ~GPIO_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 |= GPIO_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 &= ~GPIO_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_set(gpio_num)   ( GPIO_NUM_TO_DEV(gpio_num)->DATA |= GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
 Set a specific GPIO output pin high. More...
 
#define cc2538_gpio_clear(gpio_num)   ( GPIO_NUM_TO_DEV(gpio_num)->DATA &= ~GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
 Set a specific GPIO output pin low. More...
 
#define cc2538_gpio_toggle(gpio_num)   ( GPIO_NUM_TO_DEV(gpio_num)->DATA ^= GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
 Toggle the output state of a specific GPIO pin. More...
 

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)
}
 

Values for IOC_PXX_SEL

#define IOC_SEL_UART0_TXD   (0)
 UART0 TXD.
 
#define IOC_SEL_UART1_RTS   (1)
 UART1 RTS.
 
#define IOC_SEL_UART1_TXD   (2)
 UART1 TXD.
 
#define IOC_SEL_SSI0_TXD   (3)
 SSI0 TXD.
 
#define IOC_SEL_SSI0_CLKOUT   (4)
 SSI0 CLKOUT.
 
#define IOC_SEL_SSI0_FSSOUT   (5)
 SSI0 FSSOUT.
 
#define IOC_SEL_SSI0_STXSER_EN   (6)
 SSI0 STXSER EN.
 
#define IOC_SEL_SSI1_TXD   (7)
 SSI1 TXD.
 
#define IOC_SEL_SSI1_CLKOUT   (8)
 SSI1 CLKOUT.
 
#define IOC_SEL_SSI1_FSSOUT   (9)
 SSI1 FSSOUT.
 
#define IOC_SEL_SSI1_STXSER_EN   (10)
 SSI1 STXSER EN.
 
#define IOC_SEL_I2C_CMSSDA   (11)
 I2C CMSSDA.
 
#define IOC_SEL_I2C_CMSSCL   (12)
 I2C CMSSCL.
 
#define IOC_SEL_GPT0_ICP1   (13)
 GPT0 ICP1.
 
#define IOC_SEL_GPT0_ICP2   (14)
 GPT0 ICP2.
 
#define IOC_SEL_GPT1_ICP1   (15)
 GPT1 ICP1.
 
#define IOC_SEL_GPT1_ICP2   (16)
 GPT1 ICP2.
 
#define IOC_SEL_GPT2_ICP1   (17)
 GPT2 ICP1.
 
#define IOC_SEL_GPT2_ICP2   (18)
 GPT2 ICP2.
 
#define IOC_SEL_GPT3_ICP1   (19)
 GPT3 ICP1.
 
#define IOC_SEL_GPT3_ICP2   (20)
 GPT3 ICP2.
 

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.
 

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.
 

IOC instance definition

#define IOC   ((cc2538_ioc_t *)0x400d4000)
 IOC instance.
 

Macro Definition Documentation

#define cc2538_gpio_clear (   gpio_num)    ( GPIO_NUM_TO_DEV(gpio_num)->DATA &= ~GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
Parameters
[in]gpio_numGPIO number (0-31)

Definition at line 144 of file cc2538_gpio.h.

#define cc2538_gpio_read (   gpio_num)    ( (GPIO_NUM_TO_DEV(gpio_num)->DATA >> GPIO_BIT_NUM(gpio_num)) & 1 )
Parameters
[in]gpio_numGPIO number (0-31)

Definition at line 130 of file cc2538_gpio.h.

#define cc2538_gpio_set (   gpio_num)    ( GPIO_NUM_TO_DEV(gpio_num)->DATA |= GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
Parameters
[in]gpio_numGPIO number (0-31)

Definition at line 137 of file cc2538_gpio.h.

#define cc2538_gpio_toggle (   gpio_num)    ( GPIO_NUM_TO_DEV(gpio_num)->DATA ^= GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
Parameters
[in]gpio_numGPIO number (0-31)

Definition at line 151 of file cc2538_gpio.h.

#define GPIO_BIT_NUM (   gpio_num)    ( (gpio_num) & GPIO_BIT_MASK )
Parameters
[in]gpio_numGPIO number (0-31)
Returns
Corresponding GPIO port bit number (0-7)

Definition at line 76 of file cc2538_gpio.h.

#define gpio_dir_input (   gpio_num)    ( GPIO_NUM_TO_DEV(gpio_num)->DIR &= ~GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
Parameters
[in]gpio_numGPIO 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 |= GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
Parameters
[in]gpio_numGPIO 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 |= GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
Parameters
[in]gpio_numGPIO 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) )
Parameters
[in]gpio_numGPIO number (0-31)
Returns
Corresponding GPIO port instance

Definition at line 95 of file cc2538_gpio.h.

#define GPIO_NUM_TO_PORT_NUM (   gpio_num)    ( (gpio_num) >> GPIO_PORT_SHIFT )
Parameters
[in]gpio_numGPIO number (0-31)
Returns
Corresponding GPIO port number (0-3)

Definition at line 67 of file cc2538_gpio.h.

#define GPIO_PIN_MASK (   n)    ( 1 << (n) )
Parameters
[in]nNumber of the bit to set high in the mask.
Returns
A bit mask in which bit n is high.

Definition at line 58 of file cc2538_gpio.h.

#define GPIO_PXX_TO_NUM (   port_num,
  bit_num 
)    ( ((port_num) << GPIO_PORT_SHIFT) | (bit_num) )
Parameters
[in]port_numGPIO port (PORT_A, PORT_B, PORT_C, or PORT_D)
[in]bit_numGPIO bit number (0-7)
Returns
Corresponding GPIO number (0-31)

Definition at line 86 of file cc2538_gpio.h.

#define gpio_software_control (   gpio_num)    ( GPIO_NUM_TO_DEV(gpio_num)->AFSEL &= ~GPIO_PIN_MASK(GPIO_BIT_NUM(gpio_num)) )
Parameters
[in]gpio_numGPIO number (0-31)

Definition at line 109 of file cc2538_gpio.h.

Enumeration Type Documentation

anonymous enum
Enumerator
GPIO_PA0 

PA0.

GPIO_PA1 

PA1.

GPIO_PA2 

PA2.

GPIO_PA3 

PA3.

GPIO_PA4 

PA4.

GPIO_PA5 

PA5.

GPIO_PA6 

PA6.

GPIO_PA7 

PA7.

GPIO_PB0 

PB0.

GPIO_PB1 

PB1.

GPIO_PB2 

PB2.

GPIO_PB3 

PB3.

GPIO_PB4 

PB4.

GPIO_PB5 

PB5.

GPIO_PB6 

PB6.

GPIO_PB7 

PB7.

GPIO_PC0 

PC0.

GPIO_PC1 

PC1.

GPIO_PC2 

PC2.

GPIO_PC3 

PC3.

GPIO_PC4 

PC4.

GPIO_PC5 

PC5.

GPIO_PC6 

PC6.

GPIO_PC7 

PC7.

GPIO_PD0 

PD0.

GPIO_PD1 

PD1.

GPIO_PD2 

PD2.

GPIO_PD3 

PD3.

GPIO_PD4 

PD4.

GPIO_PD5 

PD5.

GPIO_PD6 

PD6.

GPIO_PD7 

PD7.

Definition at line 156 of file cc2538_gpio.h.