Hallo Zusammnen,
ich arbeite zur Zeit mit einem PIC12F629. Hier habe ich ein Takt Signal
(grün) an GPIO3 hängen. Meine IO_Pins sind folgendermaßen initialisiert:
1 | void port_init(void)
|
2 | {
|
3 | TRISIO = 0b00101000; // Register for define the I/O Pins as Input or Output
|
4 | }
|
meine Interrupt Init sieht so aus:
1 | void Interrupt_Init(void)
|
2 | {
|
3 | GIE = 1; // Global Interrupt Enable
|
4 | GPIE = 1; // Port Change Interrupt Enable
|
5 | IOC3 = 1; // GPIO3 Interrupt on Change Enable
|
6 | GPIF = 0; // Interrupt on Change Bit cleared
|
7 | }
|
Daraus sieht man das ich den GPIO3 als Interrupt on Change konfiguriert
habe. Nun möchte ich bei jeder negativen Flanken des Takt-Signals in der
ISR etwas tun. Dazu habe ich meine ISR folgendermaßen aufgebaut.
1 | static void interrupt clk_ISR(void)
|
2 | {
|
3 | if(!TAKTSIGNAL && GPIF)
|
4 | {
|
5 | TRIG = !TRIG
|
6 | //etwas tun
|
7 | GPIF = 0;
|
8 | }
|
9 | }
|
Hier schaue ich ob das Takt-Signal nach einsetzen des Interrupt == 0
ist. Somit stelle ich fest ob es sich um eine negative Flanke handelt.
Dann toggle ich erstmal einen Trigger (gelb).
Bei den ersten 11 negativen Flanken geht das auch gut, doch dann (rot
gekennzeichnet) gehe ich bereits bei einer positiven Flanke in die
if-Anweisung.
Woran kann das liegen?
Liegt das vielleicht an dem speziellen GPIO3.
Hat jemand Erfahrung.