Forum: Compiler & IDEs MSPGCC Interruptroutine für P1 spinnt ?


von Interruptor (Gast)


Lesenswert?

Hallo,

ich habe einen MSP430F147. An P1.0 hängt ein externes IC, das damit den 
Takt vorgibt (14.4 kHz) mit dem an einem weiteren Pin die Daten 
ausgegeben werden (also eine Art SPI). Dazu habe ich eine 
Interruptroutine geschrieben:
1
P1IES = 1<<0; //falling edge for DCLK
2
P1IE = 1<<0; //Enable P1.0 IRQ
3
eint(); //Enable global IRQ
4
5
6
interrupt (PORT1_VECTOR) port_int(void)
7
{
8
  P2OUT ^= 1<<6;
9
}

Das Problem ist nun, dass die IRQ Routine ständig aufgerufen wird (weit 
über 200 kHz); je mehr Code darin steht desto langsamer wird dann 
natürlich P2.6 getaktet. Eigentlich sollten es nur 14.4 kHz sein.

Muss ich noch etwas beachten, z.B. bestimmte Flags zurücksetzten o.ä. ?

Schöne Grüße

Interruptor

von Stefan (Gast)


Lesenswert?

>Muss ich noch etwas beachten, z.B. bestimmte Flags zurücksetzten o.ä. ?
Ja aber sicher!
Die IRQ-Flags bei den Port-Interrupts muss man per Software selbst 
zurücksetzen! Ansonsten bist Du mit Deiner ISR fertig und springst 
sofort wieder da rein!
Also:
1
interrupt (PORT1_VECTOR) port_int(void)
2
{
3
  P2OUT ^= 1<<6;
4
  P1IFG  = 0;
5
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.