70 #define GPIO_A_BASE 0x400D9000
71 #define GPIO_B_BASE 0x400DA000
72 #define GPIO_C_BASE 0x400DB000
73 #define GPIO_D_BASE 0x400DC000
93 #define GPIO_SET_INPUT(PORT_BASE, PIN_MASK) \
94 do { REG((PORT_BASE) | GPIO_DIR) &= ~(PIN_MASK); } while(0)
100 #define GPIO_SET_OUTPUT(PORT_BASE, PIN_MASK) \
101 do { REG((PORT_BASE) | GPIO_DIR) |= (PIN_MASK); } while(0)
107 #define GPIO_SET_PIN(PORT_BASE, PIN_MASK) \
108 do { REG(((PORT_BASE) | GPIO_DATA) + ((PIN_MASK) << 2)) = 0xFF; } while(0)
114 #define GPIO_CLR_PIN(PORT_BASE, PIN_MASK) \
115 do { REG(((PORT_BASE) | GPIO_DATA) + ((PIN_MASK) << 2)) = 0x00; } while(0)
121 #define GPIO_WRITE_PIN(PORT_BASE, PIN_MASK, value) \
122 do { REG(((PORT_BASE) | GPIO_DATA) + ((PIN_MASK) << 2)) = (value); } while(0)
128 #define GPIO_READ_PIN(PORT_BASE, PIN_MASK) \
129 REG(((PORT_BASE) | GPIO_DATA) + ((PIN_MASK) << 2))
135 #define GPIO_DETECT_EDGE(PORT_BASE, PIN_MASK) \
136 do { REG((PORT_BASE) | GPIO_IS) &= ~(PIN_MASK); } while(0)
142 #define GPIO_DETECT_LEVEL(PORT_BASE, PIN_MASK) \
143 do { REG((PORT_BASE) | GPIO_IS) |= (PIN_MASK); } while(0)
150 #define GPIO_TRIGGER_BOTH_EDGES(PORT_BASE, PIN_MASK) \
151 do { REG((PORT_BASE) | GPIO_IBE) |= (PIN_MASK); } while(0)
158 #define GPIO_TRIGGER_SINGLE_EDGE(PORT_BASE, PIN_MASK) \
159 do { REG((PORT_BASE) | GPIO_IBE) &= ~(PIN_MASK); } while(0)
166 #define GPIO_DETECT_RISING(PORT_BASE, PIN_MASK) \
167 do { REG((PORT_BASE) | GPIO_IEV) |= (PIN_MASK); } while(0)
174 #define GPIO_DETECT_FALLING(PORT_BASE, PIN_MASK) \
175 do { REG((PORT_BASE) | GPIO_IEV) &= ~(PIN_MASK); } while(0)
182 #define GPIO_ENABLE_INTERRUPT(PORT_BASE, PIN_MASK) \
183 do { REG((PORT_BASE) | GPIO_IE) |= (PIN_MASK); } while(0)
190 #define GPIO_DISABLE_INTERRUPT(PORT_BASE, PIN_MASK) \
191 do { REG((PORT_BASE) | GPIO_IE) &= ~(PIN_MASK); } while(0)
198 #define GPIO_CLEAR_INTERRUPT(PORT_BASE, PIN_MASK) \
199 do { REG((PORT_BASE) | GPIO_IC) = (PIN_MASK); } while(0)
206 #define GPIO_PERIPHERAL_CONTROL(PORT_BASE, PIN_MASK) \
207 do { REG((PORT_BASE) | GPIO_AFSEL) |= (PIN_MASK); } while(0)
214 #define GPIO_SOFTWARE_CONTROL(PORT_BASE, PIN_MASK) \
215 do { REG((PORT_BASE) | GPIO_AFSEL) &= ~(PIN_MASK); } while(0)
222 #define GPIO_POWER_UP_ON_RISING(PORT, PIN_MASK) \
223 do { REG(GPIO_PORT_TO_BASE(PORT) | GPIO_P_EDGE_CTRL) &= \
224 ~((PIN_MASK) << ((PORT) << 3)); } while(0)
231 #define GPIO_POWER_UP_ON_FALLING(PORT, PIN_MASK) \
232 do { REG(GPIO_PORT_TO_BASE(PORT) | GPIO_P_EDGE_CTRL) |= \
233 (PIN_MASK) << ((PORT) << 3); } while(0)
240 #define GPIO_ENABLE_POWER_UP_INTERRUPT(PORT, PIN_MASK) \
241 do { REG(GPIO_PORT_TO_BASE(PORT) | GPIO_PI_IEN) |= \
242 (PIN_MASK) << ((PORT) << 3); } while(0)
249 #define GPIO_DISABLE_POWER_UP_INTERRUPT(PORT, PIN_MASK) \
250 do { REG(GPIO_PORT_TO_BASE(PORT) | GPIO_PI_IEN) &= \
251 ~((PIN_MASK) << ((PORT) << 3)); } while(0)
258 #define GPIO_CLEAR_POWER_UP_INTERRUPT(PORT, PIN_MASK) \
259 do { REG(GPIO_PORT_TO_BASE(PORT) | GPIO_IRQ_DETECT_ACK) = \
260 (PIN_MASK) << ((PORT) << 3); } while(0)
268 #define GPIO_PIN_MASK(PIN) (1 << (PIN))
276 #define GPIO_PORT_TO_BASE(PORT) (GPIO_A_BASE + ((PORT) << 12))
282 #define GPIO_DATA 0x00000000
283 #define GPIO_DIR 0x00000400
284 #define GPIO_IS 0x00000404
285 #define GPIO_IBE 0x00000408
286 #define GPIO_IEV 0x0000040C
287 #define GPIO_IE 0x00000410
288 #define GPIO_RIS 0x00000414
289 #define GPIO_MIS 0x00000418
290 #define GPIO_IC 0x0000041C
291 #define GPIO_AFSEL 0x00000420
292 #define GPIO_GPIOLOCK 0x00000520
293 #define GPIO_GPIOCR 0x00000524
294 #define GPIO_PMUX 0x00000700
295 #define GPIO_P_EDGE_CTRL 0x00000704
296 #define GPIO_USB_CTRL 0x00000708
297 #define GPIO_PI_IEN 0x00000710
298 #define GPIO_IRQ_DETECT_ACK 0x00000718
299 #define GPIO_USB_IRQ_ACK 0x0000071C
300 #define GPIO_IRQ_DETECT_UNMASK 0x00000720
306 #define GPIO_DATA_DATA 0x000000FF
312 #define GPIO_DIR_DIR 0x000000FF
318 #define GPIO_IS_IS 0x000000FF
324 #define GPIO_IBE_IBE 0x000000FF
330 #define GPIO_IEV_IEV 0x000000FF
336 #define GPIO_IE_IE 0x000000FF
342 #define GPIO_RIS_RIS 0x000000FF
348 #define GPIO_MIS_MIS 0x000000FF
354 #define GPIO_IC_IC 0x000000FF
360 #define GPIO_AFSEL_AFSEL 0x000000FF
366 #define GPIO_GPIOLOCK_LOCK 0xFFFFFFFF
372 #define GPIO_GPIOCR_CR 0x000000FF
378 #define GPIO_PMUX_CKOEN 0x00000080
379 #define GPIO_PMUX_CKOPIN 0x00000010
380 #define GPIO_PMUX_DCEN 0x00000008
381 #define GPIO_PMUX_DCPIN 0x00000001
388 #define GPIO_P_EDGE_CTRL_PDIRC7 0x80000000
389 #define GPIO_P_EDGE_CTRL_PDIRC6 0x40000000
390 #define GPIO_P_EDGE_CTRL_PDIRC5 0x20000000
391 #define GPIO_P_EDGE_CTRL_PDIRC4 0x10000000
392 #define GPIO_P_EDGE_CTRL_PDIRC3 0x08000000
393 #define GPIO_P_EDGE_CTRL_PDIRC2 0x04000000
394 #define GPIO_P_EDGE_CTRL_PDIRC1 0x02000000
395 #define GPIO_P_EDGE_CTRL_PDIRC0 0x01000000
396 #define GPIO_P_EDGE_CTRL_PCIRC7 0x00800000
397 #define GPIO_P_EDGE_CTRL_PCIRC6 0x00400000
398 #define GPIO_P_EDGE_CTRL_PCIRC5 0x00200000
399 #define GPIO_P_EDGE_CTRL_PCIRC4 0x00100000
400 #define GPIO_P_EDGE_CTRL_PCIRC3 0x00080000
401 #define GPIO_P_EDGE_CTRL_PCIRC2 0x00040000
402 #define GPIO_P_EDGE_CTRL_PCIRC1 0x00020000
403 #define GPIO_P_EDGE_CTRL_PCIRC0 0x00010000
404 #define GPIO_P_EDGE_CTRL_PBIRC7 0x00008000
405 #define GPIO_P_EDGE_CTRL_PBIRC6 0x00004000
406 #define GPIO_P_EDGE_CTRL_PBIRC5 0x00002000
407 #define GPIO_P_EDGE_CTRL_PBIRC4 0x00001000
408 #define GPIO_P_EDGE_CTRL_PBIRC3 0x00000800
409 #define GPIO_P_EDGE_CTRL_PBIRC2 0x00000400
410 #define GPIO_P_EDGE_CTRL_PBIRC1 0x00000200
411 #define GPIO_P_EDGE_CTRL_PBIRC0 0x00000100
412 #define GPIO_P_EDGE_CTRL_PAIRC7 0x00000080
413 #define GPIO_P_EDGE_CTRL_PAIRC6 0x00000040
414 #define GPIO_P_EDGE_CTRL_PAIRC5 0x00000020
415 #define GPIO_P_EDGE_CTRL_PAIRC4 0x00000010
416 #define GPIO_P_EDGE_CTRL_PAIRC3 0x00000008
417 #define GPIO_P_EDGE_CTRL_PAIRC2 0x00000004
418 #define GPIO_P_EDGE_CTRL_PAIRC1 0x00000002
419 #define GPIO_P_EDGE_CTRL_PAIRC0 0x00000001
425 #define GPIO_USB_CTRL_USB_EDGE_CTL 0x00000001
432 #define GPIO_PI_IEN_PDIEN7 0x80000000
433 #define GPIO_PI_IEN_PDIEN6 0x40000000
434 #define GPIO_PI_IEN_PDIEN5 0x20000000
435 #define GPIO_PI_IEN_PDIEN4 0x10000000
436 #define GPIO_PI_IEN_PDIEN3 0x08000000
437 #define GPIO_PI_IEN_PDIEN2 0x04000000
438 #define GPIO_PI_IEN_PDIEN1 0x02000000
439 #define GPIO_PI_IEN_PDIEN0 0x01000000
440 #define GPIO_PI_IEN_PCIEN7 0x00800000
441 #define GPIO_PI_IEN_PCIEN6 0x00400000
442 #define GPIO_PI_IEN_PCIEN5 0x00200000
443 #define GPIO_PI_IEN_PCIEN4 0x00100000
444 #define GPIO_PI_IEN_PCIEN3 0x00080000
445 #define GPIO_PI_IEN_PCIEN2 0x00040000
446 #define GPIO_PI_IEN_PCIEN1 0x00020000
447 #define GPIO_PI_IEN_PCIEN0 0x00010000
448 #define GPIO_PI_IEN_PBIEN7 0x00008000
449 #define GPIO_PI_IEN_PBIEN6 0x00004000
450 #define GPIO_PI_IEN_PBIEN5 0x00002000
451 #define GPIO_PI_IEN_PBIEN4 0x00001000
452 #define GPIO_PI_IEN_PBIEN3 0x00000800
453 #define GPIO_PI_IEN_PBIEN2 0x00000400
454 #define GPIO_PI_IEN_PBIEN1 0x00000200
455 #define GPIO_PI_IEN_PBIEN0 0x00000100
456 #define GPIO_PI_IEN_PAIEN7 0x00000080
457 #define GPIO_PI_IEN_PAIEN6 0x00000040
458 #define GPIO_PI_IEN_PAIEN5 0x00000020
459 #define GPIO_PI_IEN_PAIEN4 0x00000010
460 #define GPIO_PI_IEN_PAIEN3 0x00000008
461 #define GPIO_PI_IEN_PAIEN2 0x00000004
462 #define GPIO_PI_IEN_PAIEN1 0x00000002
463 #define GPIO_PI_IEN_PAIEN0 0x00000001
470 #define GPIO_IRQ_DETECT_ACK_PDIACK7 0x80000000
471 #define GPIO_IRQ_DETECT_ACK_PDIACK6 0x40000000
472 #define GPIO_IRQ_DETECT_ACK_PDIACK5 0x20000000
473 #define GPIO_IRQ_DETECT_ACK_PDIACK4 0x10000000
474 #define GPIO_IRQ_DETECT_ACK_PDIACK3 0x08000000
475 #define GPIO_IRQ_DETECT_ACK_PDIACK2 0x04000000
476 #define GPIO_IRQ_DETECT_ACK_PDIACK1 0x02000000
477 #define GPIO_IRQ_DETECT_ACK_PDIACK0 0x01000000
478 #define GPIO_IRQ_DETECT_ACK_PCIACK7 0x00800000
479 #define GPIO_IRQ_DETECT_ACK_PCIACK6 0x00400000
480 #define GPIO_IRQ_DETECT_ACK_PCIACK5 0x00200000
481 #define GPIO_IRQ_DETECT_ACK_PCIACK4 0x00100000
482 #define GPIO_IRQ_DETECT_ACK_PCIACK3 0x00080000
483 #define GPIO_IRQ_DETECT_ACK_PCIACK2 0x00040000
484 #define GPIO_IRQ_DETECT_ACK_PCIACK1 0x00020000
485 #define GPIO_IRQ_DETECT_ACK_PCIACK0 0x00010000
486 #define GPIO_IRQ_DETECT_ACK_PBIACK7 0x00008000
487 #define GPIO_IRQ_DETECT_ACK_PBIACK6 0x00004000
488 #define GPIO_IRQ_DETECT_ACK_PBIACK5 0x00002000
489 #define GPIO_IRQ_DETECT_ACK_PBIACK4 0x00001000
490 #define GPIO_IRQ_DETECT_ACK_PBIACK3 0x00000800
491 #define GPIO_IRQ_DETECT_ACK_PBIACK2 0x00000400
492 #define GPIO_IRQ_DETECT_ACK_PBIACK1 0x00000200
493 #define GPIO_IRQ_DETECT_ACK_PBIACK0 0x00000100
494 #define GPIO_IRQ_DETECT_ACK_PAIACK7 0x00000080
495 #define GPIO_IRQ_DETECT_ACK_PAIACK6 0x00000040
496 #define GPIO_IRQ_DETECT_ACK_PAIACK5 0x00000020
497 #define GPIO_IRQ_DETECT_ACK_PAIACK4 0x00000010
498 #define GPIO_IRQ_DETECT_ACK_PAIACK3 0x00000008
499 #define GPIO_IRQ_DETECT_ACK_PAIACK2 0x00000004
500 #define GPIO_IRQ_DETECT_ACK_PAIACK1 0x00000002
501 #define GPIO_IRQ_DETECT_ACK_PAIACK0 0x00000001
507 #define GPIO_USB_IRQ_ACK_USBACK 0x00000001
514 #define GPIO_IRQ_DETECT_UNMASK_PDIACK7 0x80000000
515 #define GPIO_IRQ_DETECT_UNMASK_PDIACK6 0x40000000
516 #define GPIO_IRQ_DETECT_UNMASK_PDIACK5 0x20000000
517 #define GPIO_IRQ_DETECT_UNMASK_PDIACK4 0x10000000
518 #define GPIO_IRQ_DETECT_UNMASK_PDIACK3 0x08000000
519 #define GPIO_IRQ_DETECT_UNMASK_PDIACK2 0x04000000
520 #define GPIO_IRQ_DETECT_UNMASK_PDIACK1 0x02000000
521 #define GPIO_IRQ_DETECT_UNMASK_PDIACK0 0x01000000
522 #define GPIO_IRQ_DETECT_UNMASK_PCIACK7 0x00800000
523 #define GPIO_IRQ_DETECT_UNMASK_PCIACK6 0x00400000
524 #define GPIO_IRQ_DETECT_UNMASK_PCIACK5 0x00200000
525 #define GPIO_IRQ_DETECT_UNMASK_PCIACK4 0x00100000
526 #define GPIO_IRQ_DETECT_UNMASK_PCIACK3 0x00080000
527 #define GPIO_IRQ_DETECT_UNMASK_PCIACK2 0x00040000
528 #define GPIO_IRQ_DETECT_UNMASK_PCIACK1 0x00020000
529 #define GPIO_IRQ_DETECT_UNMASK_PCIACK0 0x00010000
530 #define GPIO_IRQ_DETECT_UNMASK_PBIACK7 0x00008000
531 #define GPIO_IRQ_DETECT_UNMASK_PBIACK6 0x00004000
532 #define GPIO_IRQ_DETECT_UNMASK_PBIACK5 0x00002000
533 #define GPIO_IRQ_DETECT_UNMASK_PBIACK4 0x00001000
534 #define GPIO_IRQ_DETECT_UNMASK_PBIACK3 0x00000800
535 #define GPIO_IRQ_DETECT_UNMASK_PBIACK2 0x00000400
536 #define GPIO_IRQ_DETECT_UNMASK_PBIACK1 0x00000200
537 #define GPIO_IRQ_DETECT_UNMASK_PBIACK0 0x00000100
538 #define GPIO_IRQ_DETECT_UNMASK_PAIACK7 0x00000080
539 #define GPIO_IRQ_DETECT_UNMASK_PAIACK6 0x00000040
540 #define GPIO_IRQ_DETECT_UNMASK_PAIACK5 0x00000020
541 #define GPIO_IRQ_DETECT_UNMASK_PAIACK4 0x00000010
542 #define GPIO_IRQ_DETECT_UNMASK_PAIACK3 0x00000008
543 #define GPIO_IRQ_DETECT_UNMASK_PAIACK2 0x00000004
544 #define GPIO_IRQ_DETECT_UNMASK_PAIACK1 0x00000002
545 #define GPIO_IRQ_DETECT_UNMASK_PAIACK0 0x00000001
void gpio_init()
Initialise the GPIO module.
Header file with register manipulation macro definitions.
void gpio_register_callback(gpio_callback_t f, uint8_t port, uint8_t pin)
Register GPIO callback.
void(* gpio_callback_t)(uint8_t port, uint8_t pin)
Type definition for callbacks invoked by the GPIO ISRs.