1:
10:
11:
15:
16:
17:
#include "AG903_errno.h"
18:
#include "AG903_common.h"
19:
#include "gpio/gpioprm.h"
20:
#include "register/AG903_gpioreg.h"
21:
22:
23:
extern void GPIOPrm_ModifyBit(uintptr_t addr, uint32_t set, uint32_t clr);
24:
25:
33:
void AG903_GPIOPrmSetByteData(uint8_t ch, uint8_t offset, uint8_t data)
34: {
35: uint8_t* reg;
36:
37:
ASSERT(
AG903_GPIO_CH_NUM > ch);
38:
ASSERT((
AG903_GPIO_PORTBIT_NUM/8) > offset);
39:
40: reg = (uint8_t*)&
AG903_GPIOn(ch)->DTOUT;
41: reg += offset;
42: (*reg) = data;
43:
return;
44: }
45:
46:
54:
void AG903_GPIOPrmGetByteData(uint8_t ch, uint8_t offset, uint8_t* data)
55: {
56: uint8_t* reg;
57:
58:
ASSERT(
AG903_GPIO_CH_NUM > ch);
59:
ASSERT((
AG903_GPIO_PORTBIT_NUM/8) > offset);
60:
61: reg = (uint8_t*)&
AG903_GPIOn(ch)->DTIN;
62: reg += offset;
63: (*data) = (*reg);
64:
return;
65: }
66:
67:
76:
void AG903_GPIOPrmModifyBit(uint8_t ch, uint32_t set, uint32_t clr, _Bool ext)
77: {
78: uint32_t reg;
79:
80:
ASSERT(
AG903_GPIO_CH_NUM > ch);
81:
82:
if(
true == ext) {
83: GPIOPrm_ModifyBit((uintptr_t)(&
AG903_GPIOn(ch)->DTOUT), set, ~clr);
84: }
85:
else {
86: reg =
AG903_GPIOn(ch)->DTOUT;
87: reg |= set;
88: reg &= ~clr;
89:
AG903_GPIOn(ch)->DTOUT = reg;
90: }
91:
92:
return;
93: }
94:
95:
102:
void AG903_GPIOPrmGetPortData(uint8_t ch, uint32_t* data)
103: {
104:
ASSERT(
AG903_GPIO_CH_NUM > ch);
105:
106: (*data) =
AG903_GPIOn(ch)->DTIN;
107:
return;
108: }
109:
110:
117:
void AG903_GPIOPrmSetDirection(uint8_t ch, uint32_t dir)
118: {
119:
ASSERT(
AG903_GPIO_CH_NUM > ch);
120:
121:
AG903_GPIOn(ch)->DIR = dir;
122:
return;
123: }
124:
125:
132:
void AG903_GPIOPrmGetDirection(uint8_t ch, uint32_t* dir)
133: {
134:
ASSERT(
AG903_GPIO_CH_NUM > ch);
135:
136: (*dir) =
AG903_GPIOn(ch)->DIR;
137:
return;
138: }
139:
140:
147:
void AG903_GPIOPrmSetType(uint8_t ch, uint32_t type)
148: {
149:
ASSERT(
AG903_GPIO_CH_NUM > ch);
150:
151:
AG903_GPIOn(ch)->IOTYPE = type;
152:
return;
153: }
154:
155:
162:
void AG903_GPIOPrmGetType(uint8_t ch, uint32_t* type)
163: {
164:
ASSERT(
AG903_GPIO_CH_NUM > ch);
165:
166: (*type) =
AG903_GPIOn(ch)->IOTYPE;
167:
return;
168: }
169:
170:
177:
void AG903_GPIOPrmSetPosEdgeDetect(uint8_t ch, uint32_t enable)
178: {
179:
ASSERT(
AG903_GPIO_CH_NUM > ch);
180:
181:
AG903_GPIOn(ch)->POSEDGE = enable;
182:
return;
183: }
184:
185:
192:
void AG903_GPIOPrmGetPosEdgeDetect(uint8_t ch, uint32_t* enable)
193: {
194:
ASSERT(
AG903_GPIO_CH_NUM > ch);
195:
196: (*enable) =
AG903_GPIOn(ch)->POSEDGE;
197:
return;
198: }
199:
200:
207:
void AG903_GPIOPrmSetNegEdgeDetect(uint8_t ch, uint32_t enable)
208: {
209:
ASSERT(
AG903_GPIO_CH_NUM > ch);
210:
211:
AG903_GPIOn(ch)->NEGEDGE = enable;
212:
return;
213: }
214:
215:
222:
void AG903_GPIOPrmGetNegEdgeDetect(uint8_t ch, uint32_t* enable)
223: {
224:
ASSERT(
AG903_GPIO_CH_NUM > ch);
225:
226: (*enable) =
AG903_GPIOn(ch)->NEGEDGE;
227:
return;
228: }
229:
230:
237:
void AG903_GPIOPrmSetMask(uint8_t ch, uint32_t mask)
238: {
239:
ASSERT(
AG903_GPIO_CH_NUM > ch);
240:
241:
AG903_GPIOn(ch)->INTMASK = mask;
242:
return;
243: }
244:
245:
252:
void AG903_GPIOPrmGetMask(uint8_t ch, uint32_t* mask)
253: {
254:
ASSERT(
AG903_GPIO_CH_NUM > ch);
255:
256: (*mask) =
AG903_GPIOn(ch)->INTMASK;
257:
return;
258: }
259:
260:
267:
void AG903_GPIOPrmGetEdgeDetect(uint8_t ch, uint32_t* status)
268: {
269:
ASSERT(
AG903_GPIO_CH_NUM > ch);
270:
271: (*status) =
AG903_GPIOn(ch)->EDGESTAT;
272:
return;
273: }
274:
275:
282:
void AG903_GPIOPrmClearEdgeDetect(uint8_t ch, uint32_t clrbit)
283: {
284:
ASSERT(
AG903_GPIO_CH_NUM > ch);
285:
286:
AG903_GPIOn(ch)->EDGECLR = clrbit;
287:
return;
288: }