45#include <ti/devices/DeviceFamily.h>
46#include DeviceFamily_constructPath(driverlib/gpio.h)
48#include <ti/drivers/PIN.h>
49#include <ti/drivers/pin/PINCC26XX.h>
53static PIN_Config pin_config[] = { PIN_TERMINATE };
54static PIN_State pin_state;
55static PIN_Handle pin_handle;
58#define GPIO_HAL_PIN_STD_INPUT (PIN_INPUT_EN | PIN_GPIO_OUTPUT_DIS | \
59 PIN_NOPULL | PIN_DRVSTR_MIN | PIN_IRQ_DIS)
62#define GPIO_HAL_PIN_STD_INPUT_BM (PIN_BM_INPUT_EN | PIN_BM_GPIO_OUTPUT_EN | \
63 PIN_BM_PULLING | PIN_BM_INV_INOUT | \
64 PIN_BM_DRVSTR | PIN_BM_SLEWCTRL | \
65 PIN_BM_HYSTERESIS | PIN_BM_IRQ)
68#define GPIO_HAL_PIN_STD_OUTPUT (PIN_INPUT_DIS | PIN_GPIO_OUTPUT_EN | \
69 PIN_NOPULL | PIN_DRVSTR_MIN | PIN_IRQ_DIS)
72#define GPIO_HAL_PIN_STD_OUTPUT_BM (PIN_BM_INPUT_EN | PIN_BM_GPIO_OUTPUT_EN | \
73 PIN_BM_PULLING | PIN_BM_INV_INOUT | \
74 PIN_BM_DRVSTR | PIN_BM_SLEWCTRL | \
75 PIN_BM_HYSTERESIS | PIN_BM_IRQ)
81 *pin_mask |= PIN_BM_PULLING;
83 switch(cfg & GPIO_HAL_PIN_CFG_PULL_MASK) {
85 case GPIO_HAL_PIN_CFG_PULL_NONE: *pin_cfg |= PIN_NOPULL;
break;
86 case GPIO_HAL_PIN_CFG_PULL_UP: *pin_cfg |= PIN_PULLUP;
break;
87 case GPIO_HAL_PIN_CFG_PULL_DOWN: *pin_cfg |= PIN_PULLDOWN;
break;
91 *pin_mask |= PIN_BM_HYSTERESIS;
93 if(cfg & GPIO_HAL_PIN_CFG_HYSTERESIS) {
94 *pin_cfg |= PIN_HYSTERESIS;
98 *pin_mask |= PIN_BM_IRQ;
100 if((cfg & GPIO_HAL_PIN_CFG_INT_MASK) == GPIO_HAL_PIN_CFG_INT_ENABLE) {
102 switch(cfg & GPIO_HAL_PIN_CFG_EDGE_BOTH) {
103 case GPIO_HAL_PIN_CFG_EDGE_NONE: *pin_cfg |= PIN_IRQ_DIS;
break;
104 case GPIO_HAL_PIN_CFG_EDGE_FALLING: *pin_cfg |= PIN_IRQ_NEGEDGE;
break;
105 case GPIO_HAL_PIN_CFG_EDGE_RISING: *pin_cfg |= PIN_IRQ_POSEDGE;
break;
106 case GPIO_HAL_PIN_CFG_EDGE_BOTH: *pin_cfg |= PIN_IRQ_BOTHEDGES;
break;
109 *pin_cfg |= PIN_IRQ_DIS;
117 if(pin_cfg & PIN_BM_INPUT_MODE) {
119 if((pin_cfg & PIN_BM_HYSTERESIS) == PIN_BM_HYSTERESIS) {
120 *cfg |= GPIO_HAL_PIN_CFG_HYSTERESIS;
124 switch(pin_cfg & (PIN_GEN | PIN_BM_PULLING)) {
125 case PIN_NOPULL: *cfg |= GPIO_HAL_PIN_CFG_PULL_NONE;
break;
126 case PIN_PULLUP: *cfg |= GPIO_HAL_PIN_CFG_PULL_UP;
break;
127 case PIN_PULLDOWN: *cfg |= GPIO_HAL_PIN_CFG_PULL_DOWN;
break;
132 if(pin_cfg & PIN_BM_IRQ) {
134 switch(pin_cfg & (PIN_GEN | PIN_BM_IRQ)) {
135 case PIN_IRQ_DIS: *cfg |= GPIO_HAL_PIN_CFG_EDGE_NONE;
136 *cfg |= GPIO_HAL_PIN_CFG_INT_DISABLE;
138 case PIN_IRQ_NEGEDGE: *cfg |= GPIO_HAL_PIN_CFG_EDGE_FALLING;
139 *cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE;
141 case PIN_IRQ_POSEDGE: *cfg |= GPIO_HAL_PIN_CFG_EDGE_RISING;
142 *cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE;
144 case PIN_IRQ_BOTHEDGES: *cfg |= GPIO_HAL_PIN_CFG_EDGE_BOTH;
145 *cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE;
152gpio_int_cb(PIN_Handle handle, PIN_Id pin_id)
165 pin_handle = PIN_open(&pin_state, pin_config);
166 PIN_registerIntCb(pin_handle, gpio_int_cb);
173 PIN_add(pin_handle, PIN_getConfig(pin));
179 PIN_setConfig(pin_handle, pin_mask, pin_cfg);
184 PIN_add(pin_handle, PIN_getConfig(pin));
188 PIN_Config pin_mask = GPIO_HAL_PIN_STD_OUTPUT_BM;
189 PIN_setConfig(pin_handle, pin_mask, pin_cfg);
203 pin_cfg = PIN_getConfig(pin);
204 PIN_add(pin_handle, pin_cfg);
206 irq_cfg = pin_cfg & PIN_BM_IRQ;
207 PIN_setInterrupt(pin_handle, pin | irq_cfg);
213 PIN_add(pin_handle, PIN_getConfig(pin));
219 PIN_setInterrupt(pin_handle, pin | PIN_IRQ_DIS);
225 PIN_add(pin_handle, PIN_getConfig(pin));
228 PIN_Config pin_cfg = 0;
229 PIN_Config pin_mask = 0;
231 from_hal_cfg(cfg, &pin_cfg, &pin_mask);
233 PIN_setConfig(pin_handle, pin_mask, pin | pin_cfg);
239 PIN_Config pin_cfg = PIN_getConfig(pin);
242 to_hal_cfg(pin_cfg, &cfg);
255 return (HWREG(GPIO_BASE + GPIO_O_DOUT31_0) & oe_pins) |
256 GPIO_readMultiDio(pins);
262 return (GPIO_getOutputEnableDio(pin))
263 ? PINCC26XX_getOutputValue(pin)
264 : PINCC26XX_getInputValue(pin);
Header file for the GPIO HAL.
#define GPIO_HAL_PIN_STD_OUTPUT
PIN standard output configuration bitmask.
#define GPIO_HAL_PIN_STD_INPUT
< PIN standard input configuration mimicking IOC_STD_INPUT
#define GPIO_HAL_PIN_STD_INPUT_BM
PIN standard input configuration mimicking IOC_STD_OUTPUT.
gpio_hal_pin_mask_t gpio_hal_arch_no_port_read_pins(gpio_hal_pin_mask_t pins)
Read multiple pins.
gpio_hal_pin_cfg_t gpio_hal_arch_no_port_pin_cfg_get(gpio_hal_pin_t pin)
Read the configuration of a GPIO pin.
void gpio_hal_arch_no_port_pin_cfg_set(gpio_hal_pin_t pin, gpio_hal_pin_cfg_t cfg)
Configure a gpio pin.
uint8_t gpio_hal_arch_no_port_read_pin(gpio_hal_pin_t pin)
Read a GPIO pin.
void gpio_hal_arch_init(void)
Perform architecture specific gpio initaliaztion.
void gpio_hal_arch_no_port_pin_set_output(gpio_hal_pin_t pin)
Configure a pin as GPIO output.
void gpio_hal_arch_no_port_pin_set_input(gpio_hal_pin_t pin)
Configure a pin as GPIO input.
uint32_t gpio_hal_pin_mask_t
GPIO pin mask representation.
void gpio_hal_arch_no_port_interrupt_disable(gpio_hal_pin_t pin)
Disable interrupts for a gpio pin.
uint32_t gpio_hal_pin_cfg_t
GPIO pin configuration.
#define gpio_hal_pin_to_mask(pin)
Convert a pin to a pin mask.
void gpio_hal_arch_no_port_interrupt_enable(gpio_hal_pin_t pin)
Enable interrupts for a gpio pin.
uint8_t gpio_hal_pin_t
GPIO pin number representation.