cc2538_gpio.h

Driver for the cc2538 GPIO controller.

Header file with register and macro declarations for the cc2538 GPIO module

enum @9
PORT_A = 0
PORT_B = 1
PORT_C = 2
PORT_D = 3
enum @10
GPIO_PA0 = GPIO_PXX_TO_NUM(PORT_A, 0)
PA0.
GPIO_PA1 = GPIO_PXX_TO_NUM(PORT_A, 1)
PA1.
GPIO_PA2 = GPIO_PXX_TO_NUM(PORT_A, 2)
PA2.
GPIO_PA3 = GPIO_PXX_TO_NUM(PORT_A, 3)
PA3.
GPIO_PA4 = GPIO_PXX_TO_NUM(PORT_A, 4)
PA4.
GPIO_PA5 = GPIO_PXX_TO_NUM(PORT_A, 5)
PA5.
GPIO_PA6 = GPIO_PXX_TO_NUM(PORT_A, 6)
PA6.
GPIO_PA7 = GPIO_PXX_TO_NUM(PORT_A, 7)
PA7.
GPIO_PB0 = GPIO_PXX_TO_NUM(PORT_B, 0)
PB0.
GPIO_PB1 = GPIO_PXX_TO_NUM(PORT_B, 1)
PB1.
GPIO_PB2 = GPIO_PXX_TO_NUM(PORT_B, 2)
PB2.
GPIO_PB3 = GPIO_PXX_TO_NUM(PORT_B, 3)
PB3.
GPIO_PB4 = GPIO_PXX_TO_NUM(PORT_B, 4)
PB4.
GPIO_PB5 = GPIO_PXX_TO_NUM(PORT_B, 5)
PB5.
GPIO_PB6 = GPIO_PXX_TO_NUM(PORT_B, 6)
PB6.
GPIO_PB7 = GPIO_PXX_TO_NUM(PORT_B, 7)
PB7.
GPIO_PC0 = GPIO_PXX_TO_NUM(PORT_C, 0)
PC0.
GPIO_PC1 = GPIO_PXX_TO_NUM(PORT_C, 1)
PC1.
GPIO_PC2 = GPIO_PXX_TO_NUM(PORT_C, 2)
PC2.
GPIO_PC3 = GPIO_PXX_TO_NUM(PORT_C, 3)
PC3.
GPIO_PC4 = GPIO_PXX_TO_NUM(PORT_C, 4)
PC4.
GPIO_PC5 = GPIO_PXX_TO_NUM(PORT_C, 5)
PC5.
GPIO_PC6 = GPIO_PXX_TO_NUM(PORT_C, 6)
PC6.
GPIO_PC7 = GPIO_PXX_TO_NUM(PORT_C, 7)
PC7.
GPIO_PD0 = GPIO_PXX_TO_NUM(PORT_D, 0)
PD0.
GPIO_PD1 = GPIO_PXX_TO_NUM(PORT_D, 1)
PD1.
GPIO_PD2 = GPIO_PXX_TO_NUM(PORT_D, 2)
PD2.
GPIO_PD3 = GPIO_PXX_TO_NUM(PORT_D, 3)
PD3.
GPIO_PD4 = GPIO_PXX_TO_NUM(PORT_D, 4)
PD4.
GPIO_PD5 = GPIO_PXX_TO_NUM(PORT_D, 5)
PD5.
GPIO_PD6 = GPIO_PXX_TO_NUM(PORT_D, 6)
PD6.
GPIO_PD7 = GPIO_PXX_TO_NUM(PORT_D, 7)
PD7.
GPIO_PORTNUM_SHIFT

bit shift for GPIO port

1
(12U)
GPIO_PORTNUM_MASK

bit mask for GPIO port [0-3]

1
(0x00007000)
GPIO_PIN_MASK

bit mask for GPIO pin [0-7]

1
(0x00000007)
GPIO_PORT_MASK

bit mask for GPIO port addr

1
(0xfffff000)
GPIO_A

GPIO Port A instance.

1
((cc2538_gpio_t *)0x400d9000)
GPIO_B

GPIO Port B instance.

1
((cc2538_gpio_t *)0x400da000)
GPIO_C

GPIO Port C instance.

1
((cc2538_gpio_t *)0x400db000)
GPIO_D

GPIO Port D instance.

1
((cc2538_gpio_t *)0x400dc000)
enum cc2538_ioc_sel_t
UART0_TXD = 0
UART0 TXD.
UART1_RTS
UART1 RTS.
UART1_TXD
UART1 TXD.
SSI0_TXD
SSI0 TXD.
SSI0_CLK_OUT
SSI0 CLKOUT.
SSI0_FSS_OUT
SSI0 FSSOUT.
SSI0_TX_SER
SSI0 STXSER EN.
SSI1_TXD
SSI1 TXD.
SSI1_CLK_OUT
SSI1 CLKOUT.
SSI1_FSS_OUT
SSI1 FSSOUT.
SSI1_TX_SER
SSI1 STXSER EN.
I2C_SDA_OUT
I2C CMSSDA.
I2C_SCL_OUT
I2C CMSSCL.
GPT0_ICP1
GPT0 ICP1.
GPT0_ICP2
GPT0 ICP2.
GPT1_ICP1
GPT1 ICP1.
GPT1_ICP2
GPT1 ICP2.
GPT2_ICP1
GPT2 ICP1.
GPT2_ICP2
GPT2 ICP2.
GPT3_ICP1
GPT3 ICP1.
GPT3_ICP2
GPT3 ICP2.
enum cc2538_ioc_pin_t
UART0_RXD = 0
UART0 RXD.
UART1_CTS
UART1 CTS.
UART1_RXD
UART1 RXD.
SSI0_CLK
SSI0 CLK.
SSI0_RXD
SSI0 RXD.
SSI0_FSS_IN
SSI0 FSS IN.
SSI0_CLK_IN
SSI0 CLK IN.
SSI1_CLK
SSI1 CLK.
SSI1_RXD
SSI1 RXD.
SSI1_FSS_IN
SSI1 FSS IN.
SSI1_CLK_IN
SSI1 CLK IN.
I2C_SDA_IN
I2C SDA IN.
I2C_SCL_IN
I2C SCL IN.
GPT0_OCP1
GPT0 OCP1.
GPT0_OCP2
GPT0 OCP2.
GPT1_OCP1
GPT1 OCP1.
GPT1_OCP2
GPT1 OCP2.
GPT2_OCP1
GPT2 OCP1.
GPT2_OCP2
GPT2 OCP2.
GPT3_OCP1
GPT3 OCP1.
GPT3_OCP2
GPT3 OCP2.
IOC_OVERRIDE_OE

Output Enable.

1
0x00000008
IOC_OVERRIDE_PUE

Pull Up Enable.

1
0x00000004
IOC_OVERRIDE_PDE

Pull Down Enable.

1
0x00000002
IOC_OVERRIDE_ANA

Analog Enable.

1
0x00000001
IOC_OVERRIDE_DIS

Override Disabled.

1
0x00000000
IOC_PXX_OVER
1
(IOC->OVER)
IOC_PXX_SEL
1
(IOC->SEL)
GPIO_PORT_SHIFT

Right-shift amount to obtain the port number from a GPIO number.

1
3
GPIO_BITS_PER_PORT

Number of bits per GPIO port (8)

1
( 1 << GPIO_PORT_SHIFT )
GPIO_BIT_MASK

Mask to obtain the bit number from a GPIO number.

1
( GPIO_BITS_PER_PORT - 1 )
PIN_MASK( n)

Generate a bit mask in which only the specified bit is high.

1
( 1 << (n) )

Parameters

n:Number of the bit to set high in the mask.

Return values

  • A bit mask in which bit n is high.
GPIO_NUM_TO_PORT_NUM( gpio_num)

Extract the GPIO port number (0-3) from a GPIO number (0-31)

1
( (gpio_num) >> GPIO_PORT_SHIFT )

Parameters

gpio_num:GPIO number (0-31)

Return values

  • Corresponding GPIO port number (0-3)
GPIO_BIT_NUM( gpio_num)

Extract the GPIO port bit number (0-7) from a GPIO number (0-31)

1
( (gpio_num) & GPIO_BIT_MASK )

Parameters

gpio_num:GPIO number (0-31)

Return values

  • Corresponding GPIO port bit number (0-7)
GPIO_PXX_TO_NUM( port_num, bit_num)

Generate a GPIO number given a port and bit number.

1
( ((port_num) << GPIO_PORT_SHIFT) | (bit_num) )

Parameters

port_num:GPIO port (PORT_A, PORT_B, PORT_C, or PORT_D)
bit_num:GPIO bit number (0-7)

Return values

  • Corresponding GPIO number (0-31)
GPIO_NUM_TO_DEV( gpio_num)

Obtain the GPIO port instance given a GPIO number (0-31)

1
( GPIO_A + GPIO_NUM_TO_PORT_NUM(gpio_num) )

Parameters

gpio_num:GPIO number (0-31)

Return values

  • Corresponding GPIO port instance
gpio_hardware_control( gpio_num)

Enable hardware (peripheral) control for a given GPIO pin number.

1
( GPIO_NUM_TO_DEV(gpio_num)->AFSEL |= PIN_MASK(GPIO_BIT_NUM(gpio_num)) )

Parameters

gpio_num:GPIO number (0-31)

gpio_software_control( gpio_num)

Enable software control for a given GPIO pin number.

1
( GPIO_NUM_TO_DEV(gpio_num)->AFSEL &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) )

Parameters

gpio_num:GPIO number (0-31)

gpio_dir_output( gpio_num)

Configure the given GPIO as an output.

1
( GPIO_NUM_TO_DEV(gpio_num)->DIR |= PIN_MASK(GPIO_BIT_NUM(gpio_num)) )

Parameters

gpio_num:GPIO number (0-31)

gpio_dir_input( gpio_num)

Configure the given GPIO as an input.

1
( GPIO_NUM_TO_DEV(gpio_num)->DIR &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) )

Parameters

gpio_num:GPIO number (0-31)

cc2538_gpio_read( gpio_num)

Read the value of the given pin.

1
( (GPIO_NUM_TO_DEV(gpio_num)->DATA >> GPIO_BIT_NUM(gpio_num)) & 1 )

Parameters

gpio_num:GPIO number (0-31)

cc2538_gpio_clear( gpio_num)

Set a specific GPIO output pin low.

1
( GPIO_NUM_TO_DEV(gpio_num)->DATA &= ~PIN_MASK(GPIO_BIT_NUM(gpio_num)) )

Parameters

gpio_num:GPIO number (0-31)

GPIO_BASE

GPIO port instance base address.

1
(0x400d9000)
IOC

IOC instance definition.

1
((cc2538_ioc_t *)0x400d4000)
enum cc2538_ioc_over_t
OVERRIDE_DISABLE = 0x0
OVERRIDE_ANALOG = 0x1
OVERRIDE_PULLDOWN = 0x2
OVERRIDE_PULLUP = 0x4
OVERRIDE_ENABLE = 0x8
struct cc2538_gpio_t

GPIO port component registers.

cc2538.h::cc2538_reg_t RESERVED1()

Reserved addresses.

cc2538.h::cc2538_reg_t DATA

GPIO_A Data Register.

cc2538.h::cc2538_reg_t DIR

GPIO_A data direction register.

cc2538.h::cc2538_reg_t IS

GPIO_A Interrupt Sense register.

cc2538.h::cc2538_reg_t IBE

GPIO_A Interrupt Both-Edges register.

cc2538.h::cc2538_reg_t IEV

GPIO_A Interrupt Event Register.

cc2538.h::cc2538_reg_t IE

GPIO_A Interrupt mask register.

cc2538.h::cc2538_reg_t RIS

GPIO_A Raw Interrupt Status register.

cc2538.h::cc2538_reg_t MIS

GPIO_A Masked Interrupt Status register.

cc2538.h::cc2538_reg_t IC

GPIO_A Interrupt Clear register.

cc2538.h::cc2538_reg_t AFSEL

GPIO_A Alternate Function / mode control select register.

cc2538.h::cc2538_reg_t RESERVED2()

Reserved addresses.

cc2538.h::cc2538_reg_t GPIOLOCK

GPIO_A Lock register.

cc2538.h::cc2538_reg_t GPIOCR

GPIO_A Commit Register.

cc2538.h::cc2538_reg_t RESERVED3()

Reserved addresses.

cc2538.h::cc2538_reg_t PMUX

GPIO_A The PMUX register.

cc2538.h::cc2538_reg_t P_EDGE_CTRL

GPIO_A The Port Edge Control register.

cc2538.h::cc2538_reg_t RESERVED4()

Reserved addresses.

cc2538.h::cc2538_reg_t PI_IEN

GPIO_A The Power-up Interrupt Enable register.

cc2538.h::cc2538_reg_t RESERVED5()

Reserved addresses.

cc2538.h::cc2538_reg_t IRQ_DETECT_ACK

GPIO_A IRQ Detect ACK register.

cc2538.h::cc2538_reg_t USB_IRQ_ACK

GPIO_A IRQ Detect ACK for USB.

cc2538.h::cc2538_reg_t IRQ_DETECT_UNMASK

GPIO_A IRQ Detect ACK for masked interrupts.

cc2538.h::cc2538_reg_t RESERVED6()

Reserved addresses.

struct cc2538_ioc_t

IOC port component registers.

cc2538.h::cc2538_reg_t SEL()

select special function for output pin

cc2538.h::cc2538_reg_t OVER()

override pin mode, enable alternate mode

cc2538.h::cc2538_reg_t PINS()

select input pin for special functions