Hallo Leute,
ich habe folgendes Problem. In der main() werden sekündlich jobs auf
einen TWI-Stack gestapelt. Auf dem Stack kann immer nur ein Job von
einem Typ sein. Jeder Job hat ne Statemachine. Jeweils die erste Aktion
ist logischerwierse ein TWI_sendStart():
1 | void TWI_sendStart(){
|
2 | TWCR = (1<<TWINT) | (1<<TWEN) | (1 << TWIE) | (1<<TWSTA);
|
3 | }
|
Wenn der TWI job fertig ist soll das TWI_busy Flag gelöscht werden:
1 | ISR(TWI_vect) {
|
2 | TWI_busy = 0;
|
3 | USART_puts("TWINT INT");
|
4 | }
|
Und dann kann fröhlich weitergearbeitet werden.
1 | if (!TWI_busy)
|
2 | TWI_popJobAndExecute();
|
Allerdings kommt die ganze Maschinerie nicht ins rennen. Ich habe mir
mal alles ausgeben lassen ( hab leider kein debugger) und mir ist
aufgefallen, dass die TWI ISR garnicht gestartet wird. Im DS steht TWI
interrupt wird nach beendeten Jobs, die Softwareresponse erwarten,
ausgelöst. (/ TWINT gesetzt) Auf jeden Fall beim gesendeten StartSignal.
Wieso also bekomm ich keinen Interrupt?
Grüße und danke schon mal für die Hilfe!