14 #include "inc/hw_memmap.h"
16 #include "driverlib/gpio.h"
17 #include "driverlib/sysctl.h"
28 static GPIO GPIO_gpios[48] =
29 { { SYSCTL_PERIPH_GPIOA, GPIO_PORTA_BASE, GPIO_PIN_0,
false, GPIO_MODE_INPUT }
30 , { SYSCTL_PERIPH_GPIOA, GPIO_PORTA_BASE, GPIO_PIN_1,
false, GPIO_MODE_INPUT }
31 , { SYSCTL_PERIPH_GPIOA, GPIO_PORTA_BASE, GPIO_PIN_2,
false, GPIO_MODE_INPUT }
32 , { SYSCTL_PERIPH_GPIOA, GPIO_PORTA_BASE, GPIO_PIN_3,
false, GPIO_MODE_INPUT }
33 , { SYSCTL_PERIPH_GPIOA, GPIO_PORTA_BASE, GPIO_PIN_4,
false, GPIO_MODE_INPUT }
34 , { SYSCTL_PERIPH_GPIOA, GPIO_PORTA_BASE, GPIO_PIN_5,
false, GPIO_MODE_INPUT }
35 , { SYSCTL_PERIPH_GPIOA, GPIO_PORTA_BASE, GPIO_PIN_6,
false, GPIO_MODE_INPUT }
36 , { SYSCTL_PERIPH_GPIOA, GPIO_PORTA_BASE, GPIO_PIN_7,
false, GPIO_MODE_INPUT }
37 , { SYSCTL_PERIPH_GPIOB, GPIO_PORTB_BASE, GPIO_PIN_0,
false, GPIO_MODE_INPUT }
38 , { SYSCTL_PERIPH_GPIOB, GPIO_PORTB_BASE, GPIO_PIN_1,
false, GPIO_MODE_INPUT }
39 , { SYSCTL_PERIPH_GPIOB, GPIO_PORTB_BASE, GPIO_PIN_2,
false, GPIO_MODE_INPUT }
40 , { SYSCTL_PERIPH_GPIOB, GPIO_PORTB_BASE, GPIO_PIN_3,
false, GPIO_MODE_INPUT }
41 , { SYSCTL_PERIPH_GPIOB, GPIO_PORTB_BASE, GPIO_PIN_4,
false, GPIO_MODE_INPUT }
42 , { SYSCTL_PERIPH_GPIOB, GPIO_PORTB_BASE, GPIO_PIN_5,
false, GPIO_MODE_INPUT }
43 , { SYSCTL_PERIPH_GPIOB, GPIO_PORTB_BASE, GPIO_PIN_6,
false, GPIO_MODE_INPUT }
44 , { SYSCTL_PERIPH_GPIOB, GPIO_PORTB_BASE, GPIO_PIN_7,
false, GPIO_MODE_INPUT }
45 , { SYSCTL_PERIPH_GPIOC, GPIO_PORTC_BASE, GPIO_PIN_0,
false, GPIO_MODE_INPUT }
46 , { SYSCTL_PERIPH_GPIOC, GPIO_PORTC_BASE, GPIO_PIN_1,
false, GPIO_MODE_INPUT }
47 , { SYSCTL_PERIPH_GPIOC, GPIO_PORTC_BASE, GPIO_PIN_2,
false, GPIO_MODE_INPUT }
48 , { SYSCTL_PERIPH_GPIOC, GPIO_PORTC_BASE, GPIO_PIN_3,
false, GPIO_MODE_INPUT }
49 , { SYSCTL_PERIPH_GPIOC, GPIO_PORTC_BASE, GPIO_PIN_4,
false, GPIO_MODE_INPUT }
50 , { SYSCTL_PERIPH_GPIOC, GPIO_PORTC_BASE, GPIO_PIN_5,
false, GPIO_MODE_INPUT }
51 , { SYSCTL_PERIPH_GPIOC, GPIO_PORTC_BASE, GPIO_PIN_6,
false, GPIO_MODE_INPUT }
52 , { SYSCTL_PERIPH_GPIOC, GPIO_PORTC_BASE, GPIO_PIN_7,
false, GPIO_MODE_INPUT }
53 , { SYSCTL_PERIPH_GPIOD, GPIO_PORTD_BASE, GPIO_PIN_0,
false, GPIO_MODE_INPUT }
54 , { SYSCTL_PERIPH_GPIOD, GPIO_PORTD_BASE, GPIO_PIN_1,
false, GPIO_MODE_INPUT }
55 , { SYSCTL_PERIPH_GPIOD, GPIO_PORTD_BASE, GPIO_PIN_2,
false, GPIO_MODE_INPUT }
56 , { SYSCTL_PERIPH_GPIOD, GPIO_PORTD_BASE, GPIO_PIN_3,
false, GPIO_MODE_INPUT }
57 , { SYSCTL_PERIPH_GPIOD, GPIO_PORTD_BASE, GPIO_PIN_4,
false, GPIO_MODE_INPUT }
58 , { SYSCTL_PERIPH_GPIOD, GPIO_PORTD_BASE, GPIO_PIN_5,
false, GPIO_MODE_INPUT }
59 , { SYSCTL_PERIPH_GPIOD, GPIO_PORTD_BASE, GPIO_PIN_6,
false, GPIO_MODE_INPUT }
60 , { SYSCTL_PERIPH_GPIOD, GPIO_PORTD_BASE, GPIO_PIN_7,
false, GPIO_MODE_INPUT }
61 , { SYSCTL_PERIPH_GPIOE, GPIO_PORTE_BASE, GPIO_PIN_0,
false, GPIO_MODE_INPUT }
62 , { SYSCTL_PERIPH_GPIOE, GPIO_PORTE_BASE, GPIO_PIN_1,
false, GPIO_MODE_INPUT }
63 , { SYSCTL_PERIPH_GPIOE, GPIO_PORTE_BASE, GPIO_PIN_2,
false, GPIO_MODE_INPUT }
64 , { SYSCTL_PERIPH_GPIOE, GPIO_PORTE_BASE, GPIO_PIN_3,
false, GPIO_MODE_INPUT }
65 , { SYSCTL_PERIPH_GPIOE, GPIO_PORTE_BASE, GPIO_PIN_4,
false, GPIO_MODE_INPUT }
66 , { SYSCTL_PERIPH_GPIOE, GPIO_PORTE_BASE, GPIO_PIN_5,
false, GPIO_MODE_INPUT }
67 , { SYSCTL_PERIPH_GPIOE, GPIO_PORTE_BASE, GPIO_PIN_6,
false, GPIO_MODE_INPUT }
68 , { SYSCTL_PERIPH_GPIOE, GPIO_PORTE_BASE, GPIO_PIN_7,
false, GPIO_MODE_INPUT }
69 , { SYSCTL_PERIPH_GPIOF, GPIO_PORTF_BASE, GPIO_PIN_0,
false, GPIO_MODE_INPUT }
70 , { SYSCTL_PERIPH_GPIOF, GPIO_PORTF_BASE, GPIO_PIN_1,
false, GPIO_MODE_INPUT }
71 , { SYSCTL_PERIPH_GPIOF, GPIO_PORTF_BASE, GPIO_PIN_2,
false, GPIO_MODE_INPUT }
72 , { SYSCTL_PERIPH_GPIOF, GPIO_PORTF_BASE, GPIO_PIN_3,
false, GPIO_MODE_INPUT }
73 , { SYSCTL_PERIPH_GPIOF, GPIO_PORTF_BASE, GPIO_PIN_4,
false, GPIO_MODE_INPUT }
74 , { SYSCTL_PERIPH_GPIOF, GPIO_PORTF_BASE, GPIO_PIN_5,
false, GPIO_MODE_INPUT }
75 , { SYSCTL_PERIPH_GPIOF, GPIO_PORTF_BASE, GPIO_PIN_6,
false, GPIO_MODE_INPUT }
76 , { SYSCTL_PERIPH_GPIOF, GPIO_PORTF_BASE, GPIO_PIN_7,
false, GPIO_MODE_INPUT }
78 #define NUMBER_OF_GPIOS ( sizeof(GPIO_gpios) / sizeof(GPIO) )
80 static void GPIO_mode_init(
GPIO *gpio, GPIO_mode mode)
85 GPIOPinTypeGPIOInput(gpio->port, gpio->pin);
88 case GPIO_MODE_OUTPUT:
89 GPIOPinTypeGPIOOutput(gpio->port, gpio->pin);
99 static void GPIO_init(
GPIO *gpio, GPIO_mode mode)
101 if(!gpio->initialised)
104 if(!SysCtlPeripheralReady(gpio->peripheral))
106 SysCtlPeripheralEnable(gpio->peripheral);
107 while(!SysCtlPeripheralReady(gpio->peripheral)) { };
110 GPIO_mode_init(gpio, mode);
112 gpio->initialised =
true;
114 else if(mode != gpio->mode)
116 GPIO_mode_init(gpio, mode);
131 #define GPIO_Pin_Write(gpio, value) GPIOPinWrite(gpio->port, gpio->pin, value ? gpio->pin : 0x00)
135 if(gpio_num >= NUMBER_OF_GPIOS)
137 GPIO *gpio = &GPIO_gpios[gpio_num];
139 GPIO_init(gpio, GPIO_MODE_OUTPUT);
141 GPIO_Pin_Write(gpio, state);
145 #define GPIO_Pin_Read(gpio) !!(GPIOPinRead(gpio->port, gpio->pin) & gpio->pin)
149 if(gpio_num >= NUMBER_OF_GPIOS)
151 GPIO *gpio = &GPIO_gpios[gpio_num];
153 GPIO_init(gpio, GPIO_MODE_INPUT);
155 return GPIO_Pin_Read(gpio);
bool GPIO_read(uint8_t gpio_num)
void GPIO_set(uint8_t gpio_num)
void GPIO_write(uint8_t gpio_num, bool state)
void GPIO_reset(uint8_t gpio_num)