PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum Serial Buffer



Rohbotiker
10.06.2008, 16:02
Hallo,

Wenn man eine Buffer-Länge spezifiziert hat, werden dann, z.B. bei einkommenden Daten, die einkommenden Daten direkt in den Buffer geschrieben, wo man sie später auslesen kann, und das Programm läuft parallel weiter?

Besserwessi
10.06.2008, 16:46
Ist das eine Hrdwarefrage ? - eher nicht

Trotzdem eine kurze Antwort: so sollte ein Buffer arbeiten. Eine andere Funtion verdient den Namennicht. Beim Hardwarepuffer hat man nur 1-2 Bytes und die Länge ist fest vorgegeben.

Rohbotiker
10.06.2008, 17:06
Das heißt, kommen serielle Daten an (wenn ein Buffer in der entsprechenden Programmiersprache gesetzt ist), dann stoppt das bisherige Programm, und schreibt erstmal die Werte in den Buffer.

Ist das ein Hardware oder ein Software (dauerndes abfragen) Interrupt, also muss immer geschaut werden ob was da ist, oder meldet sich der 1-2 Byte Hardware Buffer beim Programm das es jetzt bitte übernommen werden möchte?

Ceos
10.06.2008, 17:38
du hast nur ein datenregister bei einem AVR für die USART schnittstelle, wenn ein byte übertragen wurde, wird das RXC bit im UCSRA Register gesetzt, die software muss entweder abfragen ob das flag gesetzt ist und dann das UDR register auslesen und das byte in ein array schreiben, von wo aus es verarbeitet wird oder direkt verarbeitet werden ...

oder über interrupot, wenn der interrupt eingeschalten ist, wird mit dem RXC flag das hauptprogramm unterbrocjhen und der interrupt ausgeführt, in dem wiederum das byte ausgelesen werden muss und verarbeitet oder zwischengespeichert ....

so, das war unter der annahme dass du einen blanken atmega controller verwendest und selber programmieren möchtest

ist dem nicht so und du verwendest irgend einen anderen controller oder meinst eine bibliothek die einen Buffer bereitstellt, dann sag das bitte und schreib ein wenig code dazu, weil deine frage sehr ungenau ist

ich hoffe ich konnte helfen

Rohbotiker
10.06.2008, 18:20
Und wenn dann über Interrupt (mit dem RXC Flag), geht da dann irgendein Interrupt drauf den man dann nicht mehr verwenden kann (extern/intern)?

Besserwessi
10.06.2008, 20:12
Um einen Puffer zu programmieren wird man am besten den RX complete interrupt nehmen, zumindest wenn man die Hardware UART nimmt. Den Interrupt kann man dann auch noch für etwas anderes Verwenden, wenn man unbedingt will (z.B. um die Daten als Echo zurück zu schicken). Einen anderen Interrupt oder Pin blockiert man dadurch nicht. Man hat nur gelegentlich etwas Verzögerung bis der UART Interrupt abgearbeitet ist.

Ceos
11.06.2008, 08:25
es gibt für jede interruptfähige hardware einen entsprechenden interruptvektor, es ist nicht so das du pauschal 16 vektoren hast und einen dafür verwenden musst oder wenn du ihn nciht benutzt für etwas anderes verwenden könntest !!!

also NEIN da geht kein interrupt drauf, weil du ihn sowieso nicht für irgendwas anderes verwenden könntest