Hallo!
Gerade versuche ich, mit dem oben genannten Prozessor eine positive
Flanke an 'PIN26' aufzuspüren. Das funktionert so weit auch ganz gut,
bis auf die Tatsache, dass die ISR doppelt ausgelöst wird. Vielleicht
könnt ihr mir bei der Fehlersuche helfen.
Ich habe versucht, im Quelltext alle Variablen so zu kommentieren, wie
ich sie verstehe - es wäre nett, wenn ich mich korrigiert, falls ihr was
falsches findet.
1 | //Pin 26 als Input setzen
|
2 | AT91C_BASE_PIOA->PIO_ODR = 1<<26;
|
3 | AT91C_BASE_PIOA->PIO_PER = 1<<26;
|
4 |
|
5 | //IR auf AIC Ebene konfigurieren, Quelle, Prio und ISR Handle zuweisen
|
6 | AT91_BASE_AIC->AIC_IDCR = AT91C_ID_PIOA; //quelle
|
7 | AT91_BASE_AIC->AIC_SVR[AT91C_ID_PIOA] = &IsrHandler; //Handler zu PIOA
|
8 | AT91_BASE_AIC->AIC_SMR[AT91C_ID_PIOA] = ((0x3 << 5)|6); //src. pos. edge, prio 6
|
9 | AT91_BASE_AIC->AIC_ICCR = 1<<AT91C_ID_PIOA; //register leeren
|
10 |
|
11 | //IR auf Peripherieebene einschalten
|
12 | AT91C_BASE_PIOA->PIO_IER = 1<<26;
|
13 |
|
14 | //IR auf AIC Ebene einschalten
|
15 | AT91_BASE_AIC->AIC_IECR = 1<<AT91C_ID_PIOA;
|
16 |
|
17 | void IsrHandler(void)
|
18 | {
|
19 | ...
|
20 | AT91C_BASE_AIC->AIC_EOICR = 0; //end of IR
|
21 | }
|