Gast
#2363891
Hallo,
ich brüte hier seit einiger Zeit über einem mir unverständlichen
Problem.
Ich versuche gerade in einem bereits bestehenden, größeren Projekt, die
serielle Schnittstelle (USART) zum laufen zu bekommen.
Um Strings, bzw längere Commandos empfangen zu können würde ich gerne in
der RX-ISR einen FIFO Buffer befüllen. Leider scheint es, dass pro
empfangenem Byte der Interrupt gleich mehrmals ausgelöst wird.
Habe die ISR mal zum Testen aufs wesentliche reduziert:
void INTUC2R(void)
{
Sci_PutChar(UC2RXL.byte); //Senden des gerade empfangenen Zeichens
return;
}
Wobei Sci_PutChar die Funktion zum senden eines Bytes und UC2RXL.byte
das Lowerbyte des Empfangsregister (RX) ist.
Mehr kann ich leider nicht posten da es sich wie gesagt um ein
bestehendes, umfangreiches Projekt handelt. Allerdings ist der Rest für
den USART nicht relevant.
Mein Problem: Sende ich in HTerm das Zeichen 'a' so empfange ich die
Zeichen oxFF (Wert des RX Registers nach Reset) und 'a'. Sende ich
danach das Zeichen 'b' so empfange ich 'a' und 'b'. Sende ich danach das
Zeichen 'c' so empfange ich 'b' und 'c'. Usw.
Also werden mir 2 Zeichen zurückgeschickt obwohl der IR nur einmal
auftritt. Einmal das alte und einmal das neue Zeichen.
Das der Fehler in der Sci-PutChar ist kann ich (sogutwie) ausschließen.
Denn lasse ich in der ISR einen Integer hochzählen und debugge das
Programm so erhöht sich der Wert des Integers um 2 pro gesendetem
Zeichen.
USART-spezifische Register werden vom Rest des Projekts nicht verwendet,
habe mit Eclipse das gesamte Projekt danach durchsucht.
Baudrate (115200 bps) und Modus (8N1) stimmen, da hab ich des öfteren
drübergeschaut.
Prozessor ist ein V850E Phoenix (32-Bitter) von Renesas.
Datenblatt gibt keinen Hinweiß.
Zuhause an meinem AVR gings ohne Probleme :)
Kann mir jemand vielleicht nen Denkanstoß geben? Hat jemand sowas
schonmal erlebt?
Achja, bevor ichs vergess: Ich sende über HTerm natürlich KEIN CR und
KEIN LF. Ich sende wirklich nur 1 Byte.
Viele Grüße,
Lugge