Hallo,
ich bin gerade dabei mein erstes AVR-Projekt zu schreiben. U.a. will ich
im 100ms-Takt 2 CAN-Botschaften versenden und eine eingehende Botschaft
empfangen und die enthaltenen Daten auswerten.
Das Senden erfolgt in der CAN-Overtime ISR (der CAN-Timer läuft nach
100ms über). Das Empfangen wird über die allg. CAN-ISR abgearbeitet.
Nun ist es so, dass bei einer empfangenen Nachricht die Bits im CANSIT
für das entsprechende MOb und das General Interrupt Flag im CANGIT
gesetzt werden. Die ISR wird ausgelöst. Soweit so gewollt. Nach
bearbeiten des MObs kommt das RXOK Flag, welches mit einer
Read-Modify-Write-Routine wieder gelöscht wird.
Leider beiben die Interrupts in CANGIT und CANSIT weiter bestehen und
werden nicht gelöscht. Daher springt das Programm nach Beendigung der
ISR sofort wieder zurück in den Anfang. Die ISR wird ca. 200-300
durchlaufen, dann werden die Flags gelöscht. Dieser Aufruf funktioniert
nur jedes 2. Mal.
Die Overtime-ISR wird 2 mal durchlaufen und springt danach an den Anfang
der main-Funktion.
Als Basis dient mir die CAN-lib von Marco Glietsch (mg-programmer).
Die CAN-Kommunikation hatte schon funktioniert, bis ich den ADC
dazuprogrammiert habe. Beeinflussen sich da Interrupts? Ich versuche da
jetzt seit 2 Tagen rum und bin Ideenlos.
Wenn jemand Ideen hat (ich bin bereit alles auszuprobieren) oder gar die
Muße hat in den Code zu schauen, wäre ich sehr dankbar.
Bis denne
Erik