The friendly Operating System for the Internet of Things

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