MSPGCC Interruptroutine für P1 spinnt ?

Gast #748547
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
Gast #749218
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren