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
Hab die Lösung gefunden. Nach einer letzten debugging session fiel mir auf, dass das RXOK bit in der allg. CAN-ISR zurückgesetzt wird, bevor ich das Bit aktiv setze. Wenn man die Read-Modify-Write-Routine ausführt, bevor dort Daten gesendet werden, funktioniert alles tadellos. Trotzdem danke an das Forum. Mir wurde hier als passiver Mitleser schon viel weitergeholfen. Bis denne Erik
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.