]> begriffs open source - cmsis/blob - CMSIS/Documentation/Doxygen/Driver/src/GPIO_Demo.c
Possible bugs in MMU_MemorySection(), MMU_MemoryPage() (#219)
[cmsis] / CMSIS / Documentation / Doxygen / Driver / src / GPIO_Demo.c
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 */
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 */
30 uint32_t GPIO_GetInput0 (void) {
31   return (GPIOdrv->GetInput(GPIO_PIN0));
32 }
33
34 /* Get GPIO Input 1 */
35 uint32_t GPIO_GetInput1 (void) {
36   return (GPIOdrv->GetInput(GPIO_PIN1));
37 }
38
39 /* Set GPIO Output Pin 2 */
40 void GPIO_SetOutput2 (uint32_t val) {
41   GPIOdrv->SetOutput(GPIO_PIN2, val);
42 }
43
44 /* Set GPIO Output Pin 3 */
45 void GPIO_SetOutput3 (uint32_t val) {
46   GPIOdrv->SetOutput(GPIO_PIN3, val);
47 }
48
49 /* Setup GPIO pins */
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 }