-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgpio.c
115 lines (104 loc) · 3.1 KB
/
gpio.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "gpio.h"
uint8_t gpioMemory[ADI_GPIO_MEMORY_SIZE];
pinMap SCL = {ADI_GPIO_PORT0, ADI_GPIO_PIN_4};
pinMap SDA = {ADI_GPIO_PORT0, ADI_GPIO_PIN_5};
pinMap SCLK = {ADI_GPIO_PORT0, ADI_GPIO_PIN_0};
pinMap MISO = {ADI_GPIO_PORT0, ADI_GPIO_PIN_2};
pinMap MOSI = {ADI_GPIO_PORT0, ADI_GPIO_PIN_1};
pinMap CS = {ADI_GPIO_PORT1, ADI_GPIO_PIN_10};
pinMap RDY = {ADI_GPIO_PORT1, ADI_GPIO_PIN_14};
pinMap IO28 = {ADI_GPIO_PORT1, ADI_GPIO_PIN_12};
pinMap IO08 = {ADI_GPIO_PORT0, ADI_GPIO_PIN_8};
pinMap IO27 = {ADI_GPIO_PORT1, ADI_GPIO_PIN_11};
pinMap IO33 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_1};
pinMap IO09 = {ADI_GPIO_PORT0, ADI_GPIO_PIN_9};
pinMap IO13 = {ADI_GPIO_PORT0, ADI_GPIO_PIN_13};
pinMap IO15 = {ADI_GPIO_PORT0, ADI_GPIO_PIN_15};
pinMap TX = {ADI_GPIO_PORT0, ADI_GPIO_PIN_10};
pinMap RX = {ADI_GPIO_PORT0, ADI_GPIO_PIN_11};
pinMap AIN0 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_3};
pinMap AIN1 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_4};
pinMap AIN2 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_5};
pinMap AIN3 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_6};
pinMap AIN4 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_7};
pinMap AIN5 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_8};
pinMap IO16 = {ADI_GPIO_PORT1, ADI_GPIO_PIN_0};
pinMap IO12 = {ADI_GPIO_PORT0, ADI_GPIO_PIN_12};
pinMap DS4 = {ADI_GPIO_PORT1, ADI_GPIO_PIN_15};
pinMap DS3 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_0};
ADI_GPIO_RESULT gpioSetup()
{
return adi_gpio_Init(gpioMemory, ADI_GPIO_MEMORY_SIZE);
}
ADI_GPIO_RESULT pinMode(pinMap pm, mode m)
{
if(m == INPUT)
{
return adi_gpio_InputEnable(pm.port, pm.pin, true);
}
else if(m == OUTPUT)
{
return adi_gpio_OutputEnable(pm.port, pm.pin, true);
}
else if(m == INPUT_PULLUP)
{
ADI_GPIO_RESULT result;
if(ADI_GPIO_SUCCESS != (result = adi_gpio_InputEnable(pm.port, pm.pin, true)))
{
return result;
}
if(ADI_GPIO_SUCCESS != (result = adi_gpio_PullUpEnable(pm.port, pm.pin, true)))
{
return result;
}
}
return 0;
}
ADI_GPIO_RESULT digitalWrite(pinMap pm, logicLevel b)
{
if(b)
{
return adi_gpio_SetHigh(pm.port, pm.pin);
}
else
{
return adi_gpio_SetLow(pm.port, pm.pin);
}
return 0;
}
logicLevel digitalRead(pinMap pm)
{
uint16_t val;
adi_gpio_GetData(pm.port, pm.pin, &val);
return val ? HIGH : LOW;
}
ADI_GPIO_RESULT attachInterrupt(pinMap pm, ADI_CALLBACK const cb, Imode im, ADI_GPIO_IRQ gp)
{
ADI_GPIO_RESULT result;
if(ADI_GPIO_SUCCESS != (result = adi_gpio_SetGroupInterruptPins(pm.port, gp , pm.pin)))
{
return result;
}
if(ADI_GPIO_SUCCESS != (result = adi_gpio_GroupInterruptPolarityEnable(pm.port, pm.pin, im)))
{
return result;
}
if(ADI_GPIO_SUCCESS != (result = adi_gpio_RegisterCallback(gp, cb, (void*)gp)))
{
return result;
}
return ADI_GPIO_SUCCESS;
}
ADI_GPIO_RESULT setupInterrupt(pinMap pm, ADI_CALLBACK const cb, Imode im, ADI_GPIO_IRQ gp)
{
ADI_GPIO_RESULT result;
if(ADI_GPIO_SUCCESS != (result = adi_gpio_SetGroupInterruptPins(pm.port, gp , pm.pin)))
{
return result;
}
if(ADI_GPIO_SUCCESS != (result = adi_gpio_GroupInterruptPolarityEnable(pm.port, pm.pin, im)))
{
return result;
}
return ADI_GPIO_SUCCESS;
}