Hallo zusammen,
ich versuche gerade meine Uart-Schnittstelle auf einem ATtiny3217 zu programmieren. Leider gelingt es mir nicht, dass der zugehoerige Interrupt ausgeloest wird. Wenn ich die Daten polle, sehe ich, dass der ATtiny das bzw. die Byte(s) empfaengt.
Um zu ueberpruefen, ob mein Programm etwas an den Einstellungen vermurxt, habe ich ein neues Projekt (ueber Atmel Start) erstellt, das nur aus einer UART-Schnittstelle und einer Status-LED besteht, die bei Ausloesen des Interrupts toggeln soll. Wenn ich mit dem Debugger auf dem uc bin, dann wird der Breakpoint im Interrupt nicht erreicht.
Den Quellcode sowie das Projekt findet ihr im Anhang.
Meine bisherigen Schritte:
- Globale Interrupts sowohl ueber das Projekt als auch ueber sei() aktiviert
- Globale Interrupts vor der Aufrufen von driver_init() deaktiviert (im Datenblatt auf Seite 315 wird empfohlen, dass die Interrupts bei der Initialisierung deaktiviert sein sollen) und nach der Initilisierung aktiviert.
- Attiny gewechselt (also von der Zielplatine zum Evalboard)
- Definitionen von ISR-Routinen in unterschiedliche Dateien geschrieben
Die .map-Datei schaut aus als ob die ISR-Funktionen nicht vergessen wurden. Dennoch wirkt es fuer mich, als waere an der Konfiguration von den Interrupts irgend etwas nicht richtig.
Im Datenblatt steht auch noch, dass vor dem UART CPUINT und SREG eingestellt werden muessen. Letzteres passiert, wenn ich mich nicht taeusche, ueber sei() und cli(), ersteres wirkt fuer mich, als ob ich nicht wirklich etwas einstellen muesste.
Aktuell benutze ich das Attiny3217Xplainedpro board. Die Uart-Nachrichten sende ich ueber einen TTL-Adapter ueber USB von meinem Laptop aus. Am Oszi schauen die Signale gut aus (und werden wie vorhin auch beschrieben richtig empfangen).
Hat jemand einen Tipp, wie ich weiter vorgehen kann?
Vielen Dank im Voraus.
Link zum Datenblatt: https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/ATtiny3216-17-DataSheet-DS40002205A.pdf