Driver for the cc2538 GPIO controller. More...

Detailed Description

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

Author
Ian Martin ian@l.nosp@m.ocic.nosp@m.ontro.nosp@m.ls.c.nosp@m.om

Definition in file cc2538_gpio.h.

#include <stdint.h>
#include "cc2538.h"
+ Include dependency graph for cc2538_gpio.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

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...
 
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.
 

Enumerations

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