Hallo zusammen,
ich habe ein Problem mit dem Zeitversatz von einer Flanke am INT0
Eingang zur Ausführung der INT0 ISR.
Anwendung: Eine Software UART über einen Pin des uC. Die fallende Flanke
soll das Startbit erkennen und danach den Timer0 passend triggern.
uC: ATTiny45 @ 8 MHz, Clock prescaler ist 0
ISR'en: nur INT0 aktiv, alle anderen sind auskommentiert.
Hier meine Einstellungen:
1 | // Set to falling edge
|
2 | ClearBit(MCUCR, ISC00);
|
3 | SetBit( MCUCR, ISC01);
|
4 |
|
5 | // Clear INT0 Flag
|
6 | SetBit(GIFR, INTF0);
|
7 |
|
8 | // Enable INT0 Interrupt
|
9 | SetBit(GIMSK, INT0);
|
bzw. die ISR:
1 | ISR ( INT0_vect )
|
2 | {
|
3 | char cSREG;
|
4 | cSREG = SREG; /* store SREG value */
|
5 |
|
6 | PORTB ^= (1<<PORTB0);
|
7 |
|
8 | SREG = cSREG; /* restore SREG value (I-bit) */
|
9 | }
|
Das Problem ist, dass ich einen Zeitversatz von der Flanke zum togglen
des Ports von 240us habe.
Auch der ASM Code im Lss file sieht nicht wirklich viel aus.
Somit kann ich nicht verstehen, warum der uC 1920 Ticks braucht um den
Port zu tooglen.
Leider konnte ich diesbezüglich nichts im Tutorial oder bei google
finden. Ist das Verhalten normal oder hab ich etwas vergessen?
Gruß
Daniel