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> 53 static PIN_Config pin_config[] = { PIN_TERMINATE };
54 static PIN_State pin_state;
55 static PIN_Handle pin_handle;
61 *pin_mask |= PIN_BM_PULLING;
63 switch(cfg & GPIO_HAL_PIN_CFG_PULL_MASK) {
65 case GPIO_HAL_PIN_CFG_PULL_NONE: *pin_cfg |= PIN_NOPULL;
break;
66 case GPIO_HAL_PIN_CFG_PULL_UP: *pin_cfg |= PIN_PULLUP;
break;
67 case GPIO_HAL_PIN_CFG_PULL_DOWN: *pin_cfg |= PIN_PULLDOWN;
break;
71 *pin_mask |= PIN_BM_HYSTERESIS;
73 if(cfg & GPIO_HAL_PIN_CFG_HYSTERESIS) {
74 *pin_cfg |= PIN_HYSTERESIS;
78 *pin_mask |= PIN_BM_IRQ;
80 if((cfg & GPIO_HAL_PIN_CFG_INT_MASK) == GPIO_HAL_PIN_CFG_INT_ENABLE) {
82 switch(cfg & GPIO_HAL_PIN_CFG_EDGE_BOTH) {
83 case GPIO_HAL_PIN_CFG_EDGE_NONE: *pin_cfg |= PIN_IRQ_DIS;
break;
84 case GPIO_HAL_PIN_CFG_EDGE_FALLING: *pin_cfg |= PIN_IRQ_NEGEDGE;
break;
85 case GPIO_HAL_PIN_CFG_EDGE_RISING: *pin_cfg |= PIN_IRQ_POSEDGE;
break;
86 case GPIO_HAL_PIN_CFG_EDGE_BOTH: *pin_cfg |= PIN_IRQ_BOTHEDGES;
break;
89 *pin_cfg |= PIN_IRQ_DIS;
97 if(pin_cfg & PIN_BM_INPUT_MODE) {
99 if((pin_cfg & PIN_BM_HYSTERESIS) == PIN_HYSTERESIS) {
100 *cfg |= GPIO_HAL_PIN_CFG_HYSTERESIS;
104 switch(pin_cfg & PIN_BM_PULLING) {
105 case PIN_NOPULL: *cfg |= GPIO_HAL_PIN_CFG_PULL_NONE;
break;
106 case PIN_PULLUP: *cfg |= GPIO_HAL_PIN_CFG_PULL_UP;
break;
107 case PIN_PULLDOWN: *cfg |= GPIO_HAL_PIN_CFG_PULL_DOWN;
break;
112 if(pin_cfg & PIN_BM_IRQ) {
114 switch(pin_cfg & PIN_BM_IRQ) {
115 case PIN_IRQ_DIS: *cfg |= GPIO_HAL_PIN_CFG_EDGE_NONE;
116 *cfg |= GPIO_HAL_PIN_CFG_INT_DISABLE;
118 case PIN_IRQ_NEGEDGE: *cfg |= GPIO_HAL_PIN_CFG_EDGE_FALLING;
119 *cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE;
121 case PIN_IRQ_POSEDGE: *cfg |= GPIO_HAL_PIN_CFG_EDGE_RISING;
122 *cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE;
124 case PIN_IRQ_BOTHEDGES: *cfg |= GPIO_HAL_PIN_CFG_EDGE_BOTH;
125 *cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE;
132 gpio_int_cb(PIN_Handle handle, PIN_Id pin_id)
145 pin_handle = PIN_open(&pin_state, pin_config);
146 PIN_registerIntCb(pin_handle, gpio_int_cb);
155 pin_cfg = PIN_getConfig(pin);
156 PIN_add(pin_handle, pin_cfg);
158 irq_cfg = pin_cfg & PIN_BM_IRQ;
159 PIN_setInterrupt(pin_handle, pin | irq_cfg);
165 PIN_add(pin_handle, PIN_getConfig(pin));
167 PIN_setInterrupt(pin_handle, pin | PIN_IRQ_DIS);
173 PIN_add(pin_handle, PIN_getConfig(pin));
176 PIN_Config pin_cfg = 0;
177 PIN_Config pin_mask = 0;
179 from_hal_cfg(cfg, &pin_cfg, &pin_mask);
181 PIN_setConfig(pin_handle, pin_mask, pin | pin_cfg);
187 PIN_Config pin_cfg = PIN_getConfig(pin);
190 to_hal_cfg(pin_cfg, &cfg);
203 return (HWREG(GPIO_BASE + GPIO_O_DOUT31_0) & oe_pins) |
204 GPIO_readMultiDio(pins);
210 return (GPIO_getOutputEnableDio(pin))
211 ? PINCC26XX_getOutputValue(pin)
212 : PINCC26XX_getInputValue(pin);
void gpio_hal_arch_init(void)
Perform architecture specific gpio initaliaztion.
void gpio_hal_arch_interrupt_disable(gpio_hal_pin_t pin)
Disable interrupts for a gpio pin.
gpio_hal_pin_cfg_t gpio_hal_arch_pin_cfg_get(gpio_hal_pin_t pin)
Read the configuration of a GPIO pin.
gpio_hal_pin_mask_t gpio_hal_arch_read_pins(gpio_hal_pin_mask_t pins)
Read multiple pins.
void gpio_hal_arch_interrupt_enable(gpio_hal_pin_t pin)
Enable interrupts for a gpio pin.
void gpio_hal_event_handler(gpio_hal_pin_mask_t pins)
The platform-independent GPIO event handler.
uint8_t gpio_hal_pin_t
GPIO pin number representation.
uint32_t gpio_hal_pin_mask_t
GPIO pin mask representation.
uint8_t gpio_hal_arch_read_pin(gpio_hal_pin_t pin)
Read a GPIO pin.
#define gpio_hal_pin_to_mask(pin)
Convert a pin to a pin mask.
Header file for the GPIO HAL.
uint32_t gpio_hal_pin_cfg_t
GPIO pin configuration.
void gpio_hal_arch_pin_cfg_set(gpio_hal_pin_t pin, gpio_hal_pin_cfg_t cfg)
Configure a gpio pin.