Interrupt Benutzung

Gast #305375
Lesenswert?

Hallo

Nichts gegen Anfänger und deren Fragen, aber das ist jetzt wieder genau
so ein Beispiel, über das man sich im Forum so aufregt. Einerseits weiss
niemand, was du jetzt willst und andererseits sieht es so ein bisschen
nach "Ich habe keine Ahnung, präsentiert mir mal eine Lösung".

Wenn du ein Problem hast, auch ein simples, dann poste es ruhig. Aber
bitte formuliere klar, WAS das Problem ist und WAS du jetzt haben
möchtest.

Gruss

Michael
#305378
Lesenswert?

Ein Weg dahin wäre:

Das Datenblatt des Controllers nehmen und nachschaun, welche Register
für UART zur Verfügung stehen und was man da reinschreiben muss, damit
UART aktiviert und initialisiert wird.
Dann nachschaun, welche Interrupts es gibt und wie sie aufgerufen
werden. In ASM wäre das über die Interrupt-Sprungtabelle, mit
Hochsprachen kenne ich mich nicht aus.
Dann (in ASM) den jeweiligen Int aktivieren (USRT-Steuer-Register) und
Interrupts global einschalten.
Bei UART über Interrupt sollte man sich auch noch Ringbuffer für RX und
TX im SRAM anlegen, auf die das Hauptprogramm dann zugreifen kann. Somit
kann UART über Interrupts völlig im Hintergrund laufen, während das
Hauptprogramm Daten in den TX-Ringbuffer schiebt, wenn sie anfallen und
in regelmäßigen Abständen den RX-Ringbuffer ausliest, bis er leer ist.

Ich hoffe ich konnte dir helfen, auch wenn du nicht genannt hast, in
welcher Programmiersprache auf welchem Mikrocontroller du das
realisieren willst.

...
Gast #305379
Lesenswert?

ALso, ich programmiere einen ATmega32 mit C_Sprache, die Daten sollen in
beide Richtungen laufen(senden und empfangen)! Die Daten sollen dann von
Atmega32 gesendet werden!
Die uart initialisierung....habe ich schon nur das Prinzip mit dem
Interrupt kapiere ich noch nicht soooo ganz: wann soll es ausgelöst
werden.....
#305380
Lesenswert?

Ein Interrupt wird von einem "externen Ereignis" ausgelöst. Im Falle
von UART stehen 3 Interrupts bereit, siehe Datenblatt Mega32 Tabelle 18
auf Seite 42.

14 $01A USART, RXC USART, Rx Complete
15 $01C USART, UDRE USART Data Register Empty
16 $01E USART, TXC USART, Tx Complete

Die genaue Erklärung findest du auf Seite 156 (Transmitter Flags and
Interrupts) für das Senden und auf Seite 150 (Receive Compete Flag and
Interrupt) für das Empfangen.

Die Interrupts sagen dir, dass ein Zeichen angekommen ist (RXC) und (in
den RX-Ringbuffer) gesichert werden muss bzw. dass UDR beim Senden leer
ist (UDRE) und ein weiteres Zeichen (aus dem TX-Ringbuffer)
nachgeschoben werden darf. TXC sagt dir, dass alle Bits gesendet wurden
und UART-TX deaktiviert werden kann, falls keine weiteren Daten zum
Senden anstehen.

...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren