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