-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathgpio_pic32.h
329 lines (318 loc) · 21.1 KB
/
gpio_pic32.h
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
/**
* @file gpio_pic32.h
* @author Sebastien CAUX (sebcaux)
* @copyright Robotips 2016-2017
* @copyright UniSwarm 2018-2023
*
* @date March 20, 2017, 18:39 AM
*
* @brief GPIO support driver for PIC32MM, PIC32MK, PIC32MX,
* PIC32MZDA, PIC32MZEC and PIC32MZEF
*
* Implementation based on Microchip document DS60001120F :
* http://ww1.microchip.com/downloads/en/DeviceDoc/60001120F.pdf
*/
#ifndef GPIO_PIC32_H
#define GPIO_PIC32_H
#ifdef __cplusplus
extern "C" {
#endif
// compute PORT count and existance on device
#if defined(DEVICE_32MM0016GPL020) || defined(DEVICE_32MM0032GPL020) || defined(DEVICE_32MM0064GPL020) || defined(DEVICE_32MX110F016B) \
|| defined(DEVICE_32MX120F032B) || defined(DEVICE_32MX130F064B) || defined(DEVICE_32MX130F256B) || defined(DEVICE_32MX150F128B) \
|| defined(DEVICE_32MX154F128B) || defined(DEVICE_32MX170F256B) || defined(DEVICE_32MX174F256B) || defined(DEVICE_32MX210F016B) \
|| defined(DEVICE_32MX220F032B) || defined(DEVICE_32MX230F064B) || defined(DEVICE_32MX230F256B) || defined(DEVICE_32MX250F128B) \
|| defined(DEVICE_32MX254F128B) || defined(DEVICE_32MX270F256B) || defined(DEVICE_32MX274F256B)
# define GPIO_HAVE_PORTA
# define GPIO_HAVE_PORTB
# define GPIO_PORT_COUNT 2
# define GPIO_PORT_MAX 2
#elif defined(DEVICE_32MM0016GPL028) || defined(DEVICE_32MM0016GPL036) || defined(DEVICE_32MM0032GPL028) || defined(DEVICE_32MM0032GPL036) \
|| defined(DEVICE_32MM0064GPL028) || defined(DEVICE_32MM0064GPL036) || defined(DEVICE_32MM0064GPM028) || defined(DEVICE_32MM0064GPM036) \
|| defined(DEVICE_32MM0128GPM028) || defined(DEVICE_32MM0128GPM036) || defined(DEVICE_32MM0256GPM028) || defined(DEVICE_32MM0256GPM036) \
|| defined(DEVICE_32MX110F016C) || defined(DEVICE_32MX110F016D) || defined(DEVICE_32MX120F032C) || defined(DEVICE_32MX120F032D) \
|| defined(DEVICE_32MX130F064C) || defined(DEVICE_32MX130F064D) || defined(DEVICE_32MX130F256D) || defined(DEVICE_32MX150F128C) \
|| defined(DEVICE_32MX150F128D) || defined(DEVICE_32MX154F128D) || defined(DEVICE_32MX170F256D) || defined(DEVICE_32MX174F256D) \
|| defined(DEVICE_32MX210F016C) || defined(DEVICE_32MX210F016D) || defined(DEVICE_32MX220F032C) || defined(DEVICE_32MX220F032D) \
|| defined(DEVICE_32MX230F064C) || defined(DEVICE_32MX230F064D) || defined(DEVICE_32MX230F256D) || defined(DEVICE_32MX250F128C) \
|| defined(DEVICE_32MX250F128D) || defined(DEVICE_32MX254F128D) || defined(DEVICE_32MX270F256D) || defined(DEVICE_32MX274F256D)
# define GPIO_HAVE_PORTA
# define GPIO_HAVE_PORTB
# define GPIO_HAVE_PORTC
# define GPIO_PORT_COUNT 3
# define GPIO_PORT_MAX 3
#elif defined(DEVICE_32MK0128MCA028) || defined(DEVICE_32MK0128MCA032) || defined(DEVICE_32MK0128MCA048) || defined(DEVICE_32MK0256GPG048) \
|| defined(DEVICE_32MK0256MCJ048) || defined(DEVICE_32MK0512GPG048) || defined(DEVICE_32MK0512MCJ048) || defined(DEVICE_32MM0064GPM048) \
|| defined(DEVICE_32MM0064GPM064) || defined(DEVICE_32MM0128GPM048) || defined(DEVICE_32MM0128GPM064) || defined(DEVICE_32MM0256GPM048) \
|| defined(DEVICE_32MM0256GPM064)
# define GPIO_HAVE_PORTA
# define GPIO_HAVE_PORTB
# define GPIO_HAVE_PORTC
# define GPIO_HAVE_PORTD
# define GPIO_PORT_COUNT 4
# define GPIO_PORT_MAX 4
#elif defined(DEVICE_32MX120F064H) || defined(DEVICE_32MX130F128H) || defined(DEVICE_32MX150F256H) || defined(DEVICE_32MX170F512H) \
|| defined(DEVICE_32MX230F128H) || defined(DEVICE_32MX250F256H) || defined(DEVICE_32MX270F512H) || defined(DEVICE_32MX320F032H) \
|| defined(DEVICE_32MX320F064H) || defined(DEVICE_32MX320F128H) || defined(DEVICE_32MX330F064H) || defined(DEVICE_32MX340F128H) \
|| defined(DEVICE_32MX340F256H) || defined(DEVICE_32MX340F512H) || defined(DEVICE_32MX350F128H) || defined(DEVICE_32MX350F256H) \
|| defined(DEVICE_32MX370F512H) || defined(DEVICE_32MX420F032H) || defined(DEVICE_32MX430F064H) || defined(DEVICE_32MX440F128H) \
|| defined(DEVICE_32MX440F256H) || defined(DEVICE_32MX440F512H) || defined(DEVICE_32MX450F128H) || defined(DEVICE_32MX450F256H) \
|| defined(DEVICE_32MX470F512H) || defined(DEVICE_32MX530F128H) || defined(DEVICE_32MX534F064H) || defined(DEVICE_32MX550F256H) \
|| defined(DEVICE_32MX564F064H) || defined(DEVICE_32MX564F128H) || defined(DEVICE_32MX570F512H) || defined(DEVICE_32MX575F256H) \
|| defined(DEVICE_32MX575F512H) || defined(DEVICE_32MX664F064H) || defined(DEVICE_32MX664F128H) || defined(DEVICE_32MX675F256H) \
|| defined(DEVICE_32MX675F512H) || defined(DEVICE_32MX695F512H) || defined(DEVICE_32MX764F128H) || defined(DEVICE_32MX775F256H) \
|| defined(DEVICE_32MX775F512H) || defined(DEVICE_32MX795F512H) || defined(DEVICE_32MZ0512EFE064) || defined(DEVICE_32MZ0512EFF064) \
|| defined(DEVICE_32MZ0512EFK064) || defined(DEVICE_32MZ1024ECG064) || defined(DEVICE_32MZ1024ECH064) || defined(DEVICE_32MZ1024ECM064) \
|| defined(DEVICE_32MZ1024EFE064) || defined(DEVICE_32MZ1024EFF064) || defined(DEVICE_32MZ1024EFG064) || defined(DEVICE_32MZ1024EFH064) \
|| defined(DEVICE_32MZ1024EFK064) || defined(DEVICE_32MZ1024EFM064) || defined(DEVICE_32MZ2048ECG064) || defined(DEVICE_32MZ2048ECH064) \
|| defined(DEVICE_32MZ2048ECM064) || defined(DEVICE_32MZ2048EFG064) || defined(DEVICE_32MZ2048EFH064) || defined(DEVICE_32MZ2048EFM064)
# define GPIO_HAVE_PORTB
# define GPIO_HAVE_PORTC
# define GPIO_HAVE_PORTD
# define GPIO_HAVE_PORTE
# define GPIO_HAVE_PORTF
# define GPIO_HAVE_PORTG
# define GPIO_PORT_COUNT 6
# define GPIO_PORT_MAX 7
#elif defined(DEVICE_32MK0256GPG064) || defined(DEVICE_32MK0256MCJ064) || defined(DEVICE_32MK0512GPD064) || defined(DEVICE_32MK0512GPD100) \
|| defined(DEVICE_32MK0512GPE064) || defined(DEVICE_32MK0512GPE100) || defined(DEVICE_32MK0512GPG064) || defined(DEVICE_32MK0512GPK064) \
|| defined(DEVICE_32MK0512GPK100) || defined(DEVICE_32MK0512MCF064) || defined(DEVICE_32MK0512MCF100) || defined(DEVICE_32MK0512MCJ064) \
|| defined(DEVICE_32MK0512MCM064) || defined(DEVICE_32MK0512MCM100) || defined(DEVICE_32MK1024GPD064) || defined(DEVICE_32MK1024GPD100) \
|| defined(DEVICE_32MK1024GPE064) || defined(DEVICE_32MK1024GPE100) || defined(DEVICE_32MK1024GPK064) || defined(DEVICE_32MK1024GPK100) \
|| defined(DEVICE_32MK1024MCF064) || defined(DEVICE_32MK1024MCF100) || defined(DEVICE_32MK1024MCM064) || defined(DEVICE_32MK1024MCM100) \
|| defined(DEVICE_32MX130F128L) || defined(DEVICE_32MX150F256L) || defined(DEVICE_32MX170F512L) || defined(DEVICE_32MX230F128L) \
|| defined(DEVICE_32MX250F256L) || defined(DEVICE_32MX270F512L) || defined(DEVICE_32MX320F128L) || defined(DEVICE_32MX330F064L) \
|| defined(DEVICE_32MX340F128L) || defined(DEVICE_32MX350F128L) || defined(DEVICE_32MX350F256L) || defined(DEVICE_32MX360F256L) \
|| defined(DEVICE_32MX360F512L) || defined(DEVICE_32MX370F512L) || defined(DEVICE_32MX430F064L) || defined(DEVICE_32MX440F128L) \
|| defined(DEVICE_32MX450F128L) || defined(DEVICE_32MX450F256L) || defined(DEVICE_32MX460F256L) || defined(DEVICE_32MX460F512L) \
|| defined(DEVICE_32MX470F512L) || defined(DEVICE_32MX530F128L) || defined(DEVICE_32MX534F064L) || defined(DEVICE_32MX550F256L) \
|| defined(DEVICE_32MX564F064L) || defined(DEVICE_32MX564F128L) || defined(DEVICE_32MX570F512L) || defined(DEVICE_32MX575F256L) \
|| defined(DEVICE_32MX575F512L) || defined(DEVICE_32MX664F064L) || defined(DEVICE_32MX664F128L) || defined(DEVICE_32MX675F256L) \
|| defined(DEVICE_32MX675F512L) || defined(DEVICE_32MX695F512L) || defined(DEVICE_32MX764F128L) || defined(DEVICE_32MX775F256L) \
|| defined(DEVICE_32MX775F512L) || defined(DEVICE_32MX795F512L) || defined(DEVICE_32MZ0512EFE100) || defined(DEVICE_32MZ0512EFF100) \
|| defined(DEVICE_32MZ0512EFK100) || defined(DEVICE_32MZ1024ECG100) || defined(DEVICE_32MZ1024ECH100) || defined(DEVICE_32MZ1024ECM100) \
|| defined(DEVICE_32MZ1024EFE100) || defined(DEVICE_32MZ1024EFF100) || defined(DEVICE_32MZ1024EFG100) || defined(DEVICE_32MZ1024EFH100) \
|| defined(DEVICE_32MZ1024EFK100) || defined(DEVICE_32MZ1024EFM100) || defined(DEVICE_32MZ2048ECG100) || defined(DEVICE_32MZ2048ECH100) \
|| defined(DEVICE_32MZ2048ECM100) || defined(DEVICE_32MZ2048EFG100) || defined(DEVICE_32MZ2048EFH100) || defined(DEVICE_32MZ2048EFM100)
# define GPIO_HAVE_PORTA
# define GPIO_HAVE_PORTB
# define GPIO_HAVE_PORTC
# define GPIO_HAVE_PORTD
# define GPIO_HAVE_PORTE
# define GPIO_HAVE_PORTF
# define GPIO_HAVE_PORTG
# define GPIO_PORT_COUNT 7
# define GPIO_PORT_MAX 7
#elif defined(DEVICE_32MZ0512EFE124) || defined(DEVICE_32MZ0512EFF124) || defined(DEVICE_32MZ0512EFK124) || defined(DEVICE_32MZ1024ECG124) \
|| defined(DEVICE_32MZ1024ECH124) || defined(DEVICE_32MZ1024ECM124) || defined(DEVICE_32MZ1024EFE124) || defined(DEVICE_32MZ1024EFF124) \
|| defined(DEVICE_32MZ1024EFG124) || defined(DEVICE_32MZ1024EFH124) || defined(DEVICE_32MZ1024EFK124) || defined(DEVICE_32MZ1024EFM124) \
|| defined(DEVICE_32MZ2048ECG124) || defined(DEVICE_32MZ2048ECH124) || defined(DEVICE_32MZ2048ECM124) || defined(DEVICE_32MZ2048EFG124) \
|| defined(DEVICE_32MZ2048EFH124) || defined(DEVICE_32MZ2048EFM124)
# define GPIO_HAVE_PORTA
# define GPIO_HAVE_PORTB
# define GPIO_HAVE_PORTC
# define GPIO_HAVE_PORTD
# define GPIO_HAVE_PORTE
# define GPIO_HAVE_PORTF
# define GPIO_HAVE_PORTG
# define GPIO_HAVE_PORTH
# define GPIO_HAVE_PORTJ
# define GPIO_PORT_COUNT 9
# define GPIO_PORT_MAX 10
#elif defined(DEVICE_32MZ0512EFE144) || defined(DEVICE_32MZ0512EFF144) || defined(DEVICE_32MZ0512EFK144) || defined(DEVICE_32MZ1024ECG144) \
|| defined(DEVICE_32MZ1024ECH144) || defined(DEVICE_32MZ1024ECM144) || defined(DEVICE_32MZ1024EFE144) || defined(DEVICE_32MZ1024EFF144) \
|| defined(DEVICE_32MZ1024EFG144) || defined(DEVICE_32MZ1024EFH144) || defined(DEVICE_32MZ1024EFK144) || defined(DEVICE_32MZ1024EFM144) \
|| defined(DEVICE_32MZ1025DAA169) || defined(DEVICE_32MZ1025DAA176) || defined(DEVICE_32MZ1025DAA288) || defined(DEVICE_32MZ1025DAB169) \
|| defined(DEVICE_32MZ1025DAB176) || defined(DEVICE_32MZ1025DAB288) || defined(DEVICE_32MZ1025DAG169) || defined(DEVICE_32MZ1025DAG176) \
|| defined(DEVICE_32MZ1025DAH169) || defined(DEVICE_32MZ1025DAH176) || defined(DEVICE_32MZ1025DAK169) || defined(DEVICE_32MZ1025DAK176) \
|| defined(DEVICE_32MZ1025DAL169) || defined(DEVICE_32MZ1025DAL176) || defined(DEVICE_32MZ1025DAR169) || defined(DEVICE_32MZ1025DAR176) \
|| defined(DEVICE_32MZ1025DAS169) || defined(DEVICE_32MZ1025DAS176) || defined(DEVICE_32MZ1064DAA169) || defined(DEVICE_32MZ1064DAA176) \
|| defined(DEVICE_32MZ1064DAA288) || defined(DEVICE_32MZ1064DAB169) || defined(DEVICE_32MZ1064DAB176) || defined(DEVICE_32MZ1064DAB288) \
|| defined(DEVICE_32MZ1064DAG169) || defined(DEVICE_32MZ1064DAG176) || defined(DEVICE_32MZ1064DAH169) || defined(DEVICE_32MZ1064DAH176) \
|| defined(DEVICE_32MZ1064DAK169) || defined(DEVICE_32MZ1064DAK176) || defined(DEVICE_32MZ1064DAL169) || defined(DEVICE_32MZ1064DAL176) \
|| defined(DEVICE_32MZ1064DAR169) || defined(DEVICE_32MZ1064DAR176) || defined(DEVICE_32MZ1064DAS169) || defined(DEVICE_32MZ1064DAS176) \
|| defined(DEVICE_32MZ2025DAA169) || defined(DEVICE_32MZ2025DAA176) || defined(DEVICE_32MZ2025DAA288) || defined(DEVICE_32MZ2025DAB169) \
|| defined(DEVICE_32MZ2025DAB176) || defined(DEVICE_32MZ2025DAB288) || defined(DEVICE_32MZ2025DAG169) || defined(DEVICE_32MZ2025DAG176) \
|| defined(DEVICE_32MZ2025DAH169) || defined(DEVICE_32MZ2025DAH176) || defined(DEVICE_32MZ2025DAK169) || defined(DEVICE_32MZ2025DAK176) \
|| defined(DEVICE_32MZ2025DAL169) || defined(DEVICE_32MZ2025DAL176) || defined(DEVICE_32MZ2025DAR169) || defined(DEVICE_32MZ2025DAR176) \
|| defined(DEVICE_32MZ2025DAS169) || defined(DEVICE_32MZ2025DAS176) || defined(DEVICE_32MZ2048ECG144) || defined(DEVICE_32MZ2048ECH144) \
|| defined(DEVICE_32MZ2048ECM144) || defined(DEVICE_32MZ2048EFG144) || defined(DEVICE_32MZ2048EFH144) || defined(DEVICE_32MZ2048EFM144) \
|| defined(DEVICE_32MZ2064DAA169) || defined(DEVICE_32MZ2064DAA176) || defined(DEVICE_32MZ2064DAA288) || defined(DEVICE_32MZ2064DAB169) \
|| defined(DEVICE_32MZ2064DAB176) || defined(DEVICE_32MZ2064DAB288) || defined(DEVICE_32MZ2064DAG169) || defined(DEVICE_32MZ2064DAG176) \
|| defined(DEVICE_32MZ2064DAH169) || defined(DEVICE_32MZ2064DAH176) || defined(DEVICE_32MZ2064DAK169) || defined(DEVICE_32MZ2064DAK176) \
|| defined(DEVICE_32MZ2064DAL169) || defined(DEVICE_32MZ2064DAL176) || defined(DEVICE_32MZ2064DAR169) || defined(DEVICE_32MZ2064DAR176) \
|| defined(DEVICE_32MZ2064DAS169) || defined(DEVICE_32MZ2064DAS176)
# define GPIO_HAVE_PORTA
# define GPIO_HAVE_PORTB
# define GPIO_HAVE_PORTC
# define GPIO_HAVE_PORTD
# define GPIO_HAVE_PORTE
# define GPIO_HAVE_PORTF
# define GPIO_HAVE_PORTG
# define GPIO_HAVE_PORTH
# define GPIO_HAVE_PORTJ
# define GPIO_HAVE_PORTK
# define GPIO_PORT_COUNT 10
# define GPIO_PORT_MAX 11
#else
# define GPIO_PORT_COUNT 0
# define GPIO_PORT_MAX 0
#endif
#define GPIO_MAX_PORTWIDTH 16
#define GPIO_MAX_PORTWIDTHU 4
#define GPIO_MAX_PORTWIDTHMASK 0x0F
#define GPIO_HAVE_CHANGENOTIFICATION // have change notification on pins
#define GPIO_HAVE_OPENDRAIN // have open drain output config
#if defined(ARCHI_pic32mzec) || defined(ARCHI_pic32mzef) || defined(ARCHI_pic32mzda)
// interrupt bits helpers for PIC32MZ
# ifndef _CNAIE
# define _CNAIE IEC3bits.CNAIE
# define _CNAIF IFS3bits.CNAIF
# define _CNAIP IPC29bits.CNAIP
# define _CNAIS IPC29bits.CNAIS
# define _CNBIE IEC3bits.CNBIE
# define _CNBIF IFS3bits.CNBIF
# define _CNBIP IPC29bits.CNBIP
# define _CNBIS IPC29bits.CNBIS
# define _CNCIE IEC3bits.CNCIE
# define _CNCIF IFS3bits.CNCIF
# define _CNCIP IPC30bits.CNCIP
# define _CNCIS IPC30bits.CNCIS
# define _CNDIE IEC3bits.CNDIE
# define _CNDIF IFS3bits.CNDIF
# define _CNDIP IPC30bits.CNDIP
# define _CNDIS IPC30bits.CNDIS
# define _CNEIE IEC3bits.CNEIE
# define _CNEIF IFS3bits.CNEIF
# define _CNEIP IPC30bits.CNEIP
# define _CNEIS IPC30bits.CNEIS
# define _CNFIE IEC3bits.CNFIE
# define _CNFIF IFS3bits.CNFIF
# define _CNFIP IPC30bits.CNFIP
# define _CNFIS IPC30bits.CNFIS
# define _CNGIE IEC3bits.CNGIE
# define _CNGIF IFS3bits.CNGIF
# define _CNGIP IPC31bits.CNGIP
# define _CNGIS IPC31bits.CNGIS
# define _CNHIE IEC3bits.CNHIE
# define _CNHIF IFS3bits.CNHIF
# define _CNHIP IPC31bits.CNHIP
# define _CNHIS IPC31bits.CNHIS
# define _CNJIE IEC3bits.CNJIE
# define _CNJIF IFS3bits.CNJIF
# define _CNJIP IPC31bits.CNJIP
# define _CNJIS IPC31bits.CNJIS
# define _CNKIE IEC3bits.CNKIE
# define _CNKIF IFS3bits.CNKIF
# define _CNKIP IPC31bits.CNKIP
# define _CNKIS IPC31bits.CNKIS
# endif
# define CNIPR IPL5SRS
#elif defined(ARCHI_pic32mm)
# ifndef _CNAIE
# define _CNAIE IEC0bits.CNAIE
# define _CNAIF IFS0bits.CNAIF
# define _CNAIP IPC2bits.CNAIP
# define _CNAIS IPC2bits.CNAIS
# define _CNBIE IEC0bits.CNBIE
# define _CNBIF IFS0bits.CNBIF
# define _CNBIP IPC2bits.CNBIP
# define _CNBIS IPC2bits.CNBIS
# define _CNCIE IEC0bits.CNCIE
# define _CNCIF IFS0bits.CNCIF
# define _CNCIP IPC2bits.CNCIP
# define _CNCIS IPC2bits.CNCIS
# define _CNDIE IEC0bits.CNDIE
# define _CNDIF IFS0bits.CNDIF
# define _CNDIP IPC2bits.CNDIP
# define _CNDIS IPC2bits.CNDIS
# endif
# define CNIPR IPL5SRS
# define GPIO_CN_NOEDGEDETECT
#elif defined(ARCHI_pic32mk)
# ifndef _CNAIE
# define _CNAIE IEC1bits.CNAIE
# define _CNAIF IFS1bits.CNAIF
# define _CNAIP IPC11bits.CNAIP
# define _CNAIS IPC11bits.CNAIS
# define _CNBIE IEC1bits.CNBIE
# define _CNBIF IFS1bits.CNBIF
# define _CNBIP IPC11bits.CNBIP
# define _CNBIS IPC11bits.CNBIS
# define _CNCIE IEC1bits.CNCIE
# define _CNCIF IFS1bits.CNCIF
# define _CNCIP IPC11bits.CNCIP
# define _CNCIS IPC11bits.CNCIS
# define _CNDIE IEC1bits.CNDIE
# define _CNDIF IFS1bits.CNDIF
# define _CNDIP IPC11bits.CNDIP
# define _CNDIS IPC11bits.CNDIS
# define _CNEIE IEC1bits.CNEIE
# define _CNEIF IFS1bits.CNEIF
# define _CNEIP IPC12bits.CNEIP
# define _CNEIS IPC12bits.CNEIS
# define _CNFIE IEC1bits.CNFIE
# define _CNFIF IFS1bits.CNFIF
# define _CNFIP IPC12bits.CNFIP
# define _CNFIS IPC12bits.CNFIS
# define _CNGIE IEC1bits.CNGIE
# define _CNGIF IFS1bits.CNGIF
# define _CNGIP IPC12bits.CNGIP
# define _CNGIS IPC12bits.CNGIS
# endif
# define CNIPR IPL5SRS
#elif defined(ARCHI_pic32mx)
# ifndef _CNAIE
# if defined(DEVICE_32MX530F128H) || defined(DEVICE_32MX550F256H) || defined(DEVICE_32MX570F512H) || defined(DEVICE_32MX530F128L) \
|| defined(DEVICE_32MX550F256L) || defined(DEVICE_32MX570F512L) || defined(DEVICE_32MX534F064H) || defined(DEVICE_32MX534F064L) \
|| defined(DEVICE_32MX564F064H) || defined(DEVICE_32MX564F064L) || defined(DEVICE_32MX564F128H) || defined(DEVICE_32MX564F128L) \
|| defined(DEVICE_32MX575F256H) || defined(DEVICE_32MX575F256L) || defined(DEVICE_32MX575F512H) || defined(DEVICE_32MX575F512L) \
|| defined(DEVICE_32MX664F064H) || defined(DEVICE_32MX664F064L) || defined(DEVICE_32MX664F128H) || defined(DEVICE_32MX664F128L) \
|| defined(DEVICE_32MX675F256H) || defined(DEVICE_32MX675F256L) || defined(DEVICE_32MX675F512H) || defined(DEVICE_32MX675F512L) \
|| defined(DEVICE_32MX695F512H) || defined(DEVICE_32MX695F512L) || defined(DEVICE_32MX764F128H) || defined(DEVICE_32MX764F128L) \
|| defined(DEVICE_32MX775F256H) || defined(DEVICE_32MX775F256L) || defined(DEVICE_32MX775F512H) || defined(DEVICE_32MX775F512L) \
|| defined(DEVICE_32MX795F512H) || defined(DEVICE_32MX795F512L)
// PIC32MX5xx / 7xx
# define _CNIE IEC1bits.CNIE
# define _CNIF IFS1bits.CNIF
# define _CNIP IPC6bits.CNIP
# define _CNIS IPC6bits.CNIS
# else
# define _CNAIE IEC1bits.CNAIE
# define _CNAIF IFS1bits.CNAIF
# define _CNAIP IPC8bits.CNIP
# define _CNAIS IPC8bits.CNIS
# define _CNBIE IEC1bits.CNBIE
# define _CNBIF IFS1bits.CNBIF
# define _CNBIP IPC8bits.CNIP
# define _CNBIS IPC8bits.CNIS
# define _CNCIE IEC1bits.CNCIE
# define _CNCIF IFS1bits.CNCIF
# define _CNCIP IPC8bits.CNIP
# define _CNCIS IPC8bits.CNIS
# define _CNDIE IEC1bits.CNDIE
# define _CNDIF IFS1bits.CNDIF
# define _CNDIP IPC8bits.CNIP
# define _CNDIS IPC8bits.CNIS
# define _CNEIE IEC1bits.CNEIE
# define _CNEIF IFS1bits.CNEIF
# define _CNEIP IPC8bits.CNIP
# define _CNEIS IPC8bits.CNIS
# define _CNFIE IEC1bits.CNFIE
# define _CNFIF IFS1bits.CNFIF
# define _CNFIP IPC8bits.CNIP
# define _CNFIS IPC8bits.CNIS
# define _CNGIE IEC1bits.CNGIE
# define _CNGIF IFS1bits.CNGIF
# define _CNGIP IPC8bits.CNIP
# define _CNGIS IPC8bits.CNIS
# endif
# endif
# define CNIPR IPL5SRS
# define GPIO_CN_NOEDGEDETECT
# define GPIO_CN_SINGLEINTERRUPT
#endif
#ifdef __cplusplus
}
#endif
#endif // GPIO_PIC32_H