Schwierigkeiten mit UART0 Programmierung M16C/62P

Guest
Hallo Zusammen

Ich habe wieder mal eine Frage betreffend der Programmierung des UART0
meines Boards
Mein Code sieht so aus:

_interrupt(18) void
se_int_receive( void )
{
x = U0RBL;

switch ( x )
{
case stoppbit: //Auswertroutine
result rxbuffer[1]+
rxbuffer[2]+
rxbuffer[3]+
rxbuffer[4]+
rxbuffer[5]+
rxbuffer[6]+
rxbuffer[7]
;
break;

case startbit: //startbit
u = 0; //zähler auf 0 setzten

break;


default:

rxbuffer = x; //buffer füllen
u++; //U0RBL nach rxbuffer schreiben
//zähler um 1 erhöhen für nächste
//U0RBL nach rxbuffer schreiben

Meine Überlegung dahinter ist:
es kommt ein startbit wert - der zähler u wird auf 0 gesetzt

es kommt ein defaultwert - die Stelle "u" wird beschrieben mit dem wert
U0RBL (x)
der wert u wird um 1 erhöht um die nächste stelle zu beschreiben,
beim nächsten defaultwert beschreibt man die nächste stelle

es kommt das stoppbit
die auswertung wird ausgeführt. Alle werte zusammenzählen um ein
result zu erhalten


Das Startbit spricht an, das ist OK.
Das Stoppbit spricht auch an auch OK.

Nun also meine Frage an Euch.
Wenn ich das Resultat aber anschaue, habe ich jedesmal wenn ich einen
neuen Lesevorgang mache ein anderes Resultat
Auch die Einzelnen Werte im rxbuffer[1].....usw. sind jedesmal anders.
Was kann das Problem sein. hat jemand eine Ahnung.


Ich habe noch meine Initialisierung des UART angehängt. vielleicht ist
hier noch ein unentdeckter fehler versteckt.

U0BRG = 103; /* baudrate 9600 */ //67
U0MR = 0x05;
U0C0 = 0x10; /* no cts/rts, prescaler = F1 */
U0C1 = 0x05; /* enable receiver and transmitter 0x5*/
UCON = 0x04;

S0TIC = 0x6; /* Set UART0 transmit interrupt priority */
S0RIC = 0x6; /* Set UART0 transmit interrupt priority */

PD6_3 = 1;
PD6_2 = 0;


Vielen Dank für Euren Einsatz

Oli
 
Hallo,

Mein Code sieht so aus:
Irgendwie fehlen alle Variablendeklarationen.

BYTE x;
static BYTE u;
static BYTE rxbuffer[8];
short unsigned int result;

case stoppbit: //Auswertroutine
result > rxbuffer[1]+
rxbuffer[2]+
rxbuffer[3]+
rxbuffer[4]+
rxbuffer[5]+
rxbuffer[6]+
rxbuffer[7]
;
break;
Ist es beabsichtigt, dass rxbuffer[0] zwar empfangen und
gespeichert, aber nicht addiert wird? Werden zwischen
"startbit" und "stopbit" tatsaechlich 8 Byte empfangen?

Was soll "startbit" und "stopbit" eigentlich genau sein - soll das
ein framing werden (also eher "startbyte" und "stopbyte")?

Ich habe noch meine Initialisierung des UART angehängt. vielleicht ist
hier noch ein unentdeckter fehler versteckt.

U0BRG = 103; /* baudrate 9600 */ //67
Der Prozessor läuft also mit 16 MHz?

U0MR = 0x05;
U0C0 = 0x10; /* no cts/rts, prescaler = F1 */
U0C1 = 0x05; /* enable receiver and transmitter 0x5*/
UCON = 0x04;
Das halte ich fuer bedenklich.
Probiere mal
UCON = 0x00;

PD6_3 = 1;
PD6_2 = 0;
Das kann entfallen.

Setzt du vielleicht irgendwo PCLK1 im PCLKR auf 0 (beliebter Fehler)?
Zur Sicherheit kannst du mal folgendes einfuegen:
PRC0 = 1;
PCLK1 = 1;
PRC0 = 0;

HTH, bye
Thomas
 
Hallo Oliver,

Meine Überlegung dahinter ist:
es kommt ein startbit wert - der zähler u wird auf 0 gesetzt
Wertet dieser UART nicht Start- und Stopbits selbst aus und liefert den
Bytewert bereits fertig in einem Register?

Der Code sieht mir etwas nach einem Mischmasch zwischen "Ansteuerung eines
fertigen UARTS" und "Software-UART, bei dem die Datenbits einzeln
eingelesen werden sollen" aus...

Tom


--

------------------------------------------------------
Bitte beachten - AntiSpam-Filter: *.com, *.cn, *.br, *.kr, *.net, *.pl,
*.ro, *.ru
 

Welcome to EDABoard.com

Sponsor

Back
Top