1 #include "Driver_GPIO.h"
2
3 /* GPIO driver instance */
4 extern ARM_DRIVER_GPIO Driver_GPIO0;
5 static ARM_DRIVER_GPIO *GPIOdrv = &Driver_GPIO0;
6
7 /* Pin mapping */
8 #define GPIO_PIN0 0U
9 #define GPIO_PIN1 1U
10 #define GPIO_PIN2 2U
11 #define GPIO_PIN3 3U
12
13 /* GPIO Signal Event callback */
GPIO_SignalEvent(ARM_GPIO_Pin_t pin,uint32_t event)14 static void GPIO_SignalEvent (ARM_GPIO_Pin_t pin, uint32_t event) {
15
16 switch (pin) {
17 case GPIO_PIN1:
18 /* Events on pin GPIO_PIN1 */
19 if (event & ARM_GPIO_EVENT_RISING_EDGE) {
20 /* Rising-edge detected */
21 }
22 if (event & ARM_GPIO_EVENT_FALLING_EDGE) {
23 /* Falling-edge detected */
24 }
25 break;
26 }
27 }
28
29 /* Get GPIO Input 0 */
GPIO_GetInput0(void)30 uint32_t GPIO_GetInput0 (void) {
31 return (GPIOdrv->GetInput(GPIO_PIN0));
32 }
33
34 /* Get GPIO Input 1 */
GPIO_GetInput1(void)35 uint32_t GPIO_GetInput1 (void) {
36 return (GPIOdrv->GetInput(GPIO_PIN1));
37 }
38
39 /* Set GPIO Output Pin 2 */
GPIO_SetOutput2(uint32_t val)40 void GPIO_SetOutput2 (uint32_t val) {
41 GPIOdrv->SetOutput(GPIO_PIN2, val);
42 }
43
44 /* Set GPIO Output Pin 3 */
GPIO_SetOutput3(uint32_t val)45 void GPIO_SetOutput3 (uint32_t val) {
46 GPIOdrv->SetOutput(GPIO_PIN3, val);
47 }
48
49 /* Setup GPIO pins */
GPIO_Setup(void)50 void GPIO_Setup (void) {
51
52 /* Pin GPIO_PIN0: Input */
53 GPIOdrv->Setup (GPIO_PIN0, NULL);
54 GPIOdrv->SetDirection (GPIO_PIN0, ARM_GPIO_INPUT);
55
56 /* Pin GPIO_PIN1: Input with trigger on rising and falling edge */
57 GPIOdrv->Setup (GPIO_PIN1, GPIO_SignalEvent);
58 GPIOdrv->SetDirection (GPIO_PIN1, ARM_GPIO_INPUT);
59 GPIOdrv->SetEventTrigger(GPIO_PIN1, ARM_GPIO_TRIGGER_EITHER_EDGE);
60
61 /* Pin GPIO_PIN2: Output push-pull (initial level 0) */
62 GPIOdrv->Setup (GPIO_PIN2, NULL);
63 GPIOdrv->SetOutput (GPIO_PIN2, 0U);
64 GPIOdrv->SetDirection (GPIO_PIN2, ARM_GPIO_OUTPUT);
65
66 /* Pin GPIO_PIN3: Output open-drain with pull-up resistor (initial level 1) */
67 GPIOdrv->Setup (GPIO_PIN3, NULL);
68 GPIOdrv->SetPullResistor(GPIO_PIN3, ARM_GPIO_PULL_UP);
69 GPIOdrv->SetOutputMode (GPIO_PIN3, ARM_GPIO_OPEN_DRAIN);
70 GPIOdrv->SetOutput (GPIO_PIN3, 1U);
71 GPIOdrv->SetDirection (GPIO_PIN3, ARM_GPIO_OUTPUT);
72 }
73