ATMEGA16 UART Interrupt künstlich auslösen

Gast #774653
Lesenswert?
• ▲
▼
Hallo zusammen,
ich verwende den ATMEGA16. Nun möchte ich das Senden von Daten über die 
serielle Schnittstelle zum Computer per Interrupt lösen. Die zu 
sendenden Daten lege ich in einem Buffer ab. Sobald Daten in diesem 
Buffer sind, möchte ich den Interrupt aktivieren.
Das Problem ist nun, dass ich (bis anhin) zuerst "von Hand" ein Byte 
schreibe (mit UDR = 5;) und erst dann wird der erste Intrrupt ausgelöst. 
(ist ja auch logisch).
Meine frage ist nun, kann ich denn Interrupt selber (also 
softwaremässig) auslösen? Mein erster Ansatz war, im UCSRA das TXC Bit 
zu setzen, das funktioniert aber nicht, da es nur gelöscht werden kann.
mit freundlichen Grüssen
chrigu
Gast #774680
Lesenswert?
• ▲
▼
Die Daten sollen sofort raus. Aber damit ein Interrupt ausgelöst wird, 
muss 1 Byte gesendet werden (soweit mein Wissensstand zur Zeit ist). Mit 
anderen Worten: wenn ich den Interrupt aktiviere, dann werden noch keine 
Daten gesendet, da kein Interrupt ausgelöst werden kann.
Muss ich jetzt manuell das erste Byte senden damit dann der Rest der 
Interrupt übernimmt?
mfg
chrigu
Gast #774712
Lesenswert?
• ▲
▼
@OP:
Schau dir mal die Lib von http://jump.to/fleury (UART-Lib für AVR-GCC) 
an.
Da geht es so:
- Immer wenn Daten zum senden in den Puffer geschrieben werden, wird 
der UDRE-Interrupt aktiviert.
- die UDRE-ISR schaut jedes mal nach, ob noch mehr gesendet werden soll:
  - wenn ja: wird das Byte ins UDR geschrieben
  - wenn nicht: wird der UDRE interrupt abgeschaltet
( Optional : der TXC-Interrupt kann anschließend z.b. bei 
Halb-duplex den sender abstellen )

hth. Jörg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.