Forum: Mikrocontroller und Digitale Elektronik UART Problem beim M32C StarterKit - keine Übertragung


von Timo (Gast)


Lesenswert?

Hallo zusammen,
ich verzweifle nun schon 2 Tage am folgenden Problem.
Ich bekomme einfach keine Verbindug zwischen PC und uC hin.
Mein Programm sieht folgendermaßen aus:

void main(void)
{
  asm("FCLR I");  /* Global Interrupt disabled */

  init_Ports();   /* Ports Initialization */

  init_UART0();

  asm("FSET I");  /* Global Interrupt enable */

  te_u0c1 |= 1;   /* Transmit operation enabled */
  re_u0c1 |= 1;   /* Receive operation enabled */

  u0tb = 97;      /* a */

  ti_u0c1 &= 0;

  while(1)
  {

  }
}

void init_Ports(void)
{

  /* Port 6 (UART0) Initialization */
     pd6_2 &= 0;  /* Port Direction: 0=Input  1=Output */
                  /* P6.2 = Input (RxD0) */
     pd6_3 |= 1;  /* P6.3 = Output (TxD0) */
}

void init_UART0(void)
{
   u0mr = 0x05;  /* UART mode, 8 bit data length */
    /* Internal Clock */
                  /* 1 Stop Bit */
           /* no Parity  */
   u0smr  = 0x00;
   u0smr2 = 0x00;
   u0smr3 = 0x00;
   u0smr4 = 0x00;

   u0c0 = 0x00;  /* f1 selected */
   crd_u0c0 |= 1;  /* CTS function disabled */

   u0brg = 0xCF;  /* Baudrate: 9615 */

   u0c1 = 0x00;

 // u0irs_u0c1 |= 1; /* transmit interrupt is generated */

   s0tic = 0x06;  /* Interrupt priority level */
   s0ric = 0x06;  /* Interrupt priority level */
}


Immoment versuche ich erst einmal das Zeichen a an den Pc zu senden .. 
Da ich mich mit der UART Verbindung vertraut machen will...
Mir fällt auf, dass die Register u0brg und u0tb einfach nicht de Wert 
zugeordnet bekommen ... bei ausführung der befehle tut sich einfach 
nichts und ich weiß nicht wieso.

Hoffe nun einfach auf Hilfe
Gruß Timo

von Nicolas G. (glurus)


Lesenswert?

Hallo

Scheint das selbe Problem zu sein wie ich habe (Titel: I2C auf dem 
R8C1B)
Bei mir hat auch noch niemand genantwortet..
der M32 ist doch auch ein Renesas?

Steht bei dir auch "Use the MOV instruction"?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Funktioniert UART überhaupt nicht, d.h. kommt nichts aus dem TX-Pin des 
µC raus oder geht es unterwegs verloren oder versteht der PC das Signal 
nicht?

Hast du Möglichkeiten mit einem LED-Vorwiderstand-Spion oder gar mit 
einem Oszilloskop die TX-Leitung zu beobachten?

Dabei nicht nur ein zeichen schicken, sondern dauerhaft Zeichen schicken 
und zwischendurch immer schön warten, bis die UART das nächste Zeichen 
auf den Weg bringen kann.

Vgl. auch Codebeispiel "Serielle Übertragung beim R8C"
http://www.mikrocontroller.net/articles/R8C_Codebeispiele#Serielle_Daten.C3.BCbertragung_.28Polling-Verfahren.29

von Olaf (Gast)


Lesenswert?

> Scheint das selbe Problem zu sein wie ich habe (Titel: I2C auf dem
> R8C1B)

Naja, zwischen I2C und UART gibt es in den Dingern doch mal grosse
Unterschiede.

Ich kenne weder den M32 noch habe ich bisher was mit dem R8C1B gemacht,
aber ich habe beim M16 weder mit I2C, SPI noch UART irgendein Problem
gehabt.
Man muss halt nur das Datenblatt sehr aufmerksam lesen und wirklich
alle Register durchgehen.

Und nicht vergessen das Kleingedruckte zu lesen. Es kann sein das man
bei manchen Registern ein PRC Bits setzen bevor man da reinschreiben
kann. Und ich wuerde beim Uart noch empfehlen sich genau Gedanken zu 
machen
aus welcher der vielen moeglichen Quellen der Basistakt fuer die 
Baudrate
herkommt. Nicht das man da einen Oszillator benutzt der garnicht 
laeuft...

Und bei manchen Prozessoren, z.B bei meinem M16C kann man auch noch 
ueber
ein Bit festlegen welche Ausgangspins der UART verwenden soll. Waere
natuerlich dumm wenn alles geht aber aus dem falschen Pin rauskommt. :-)


Olaf

von Timo (Gast)


Lesenswert?

Hallo,
ja M32C ist auch von Renesas.
Ich habe mir nun ein Oszi besorgt und wollte nun auch mal testen ob aus 
Tx etwas rauskommt.
Gruß

von Timo (Gast)


Lesenswert?

Am Oszi bekomm ich nichts angezeigt ...

mich wundert ja echt wieso bei
1
u0brg = 0xCF;  /* Baudrate: 9615 */
einfach nichts ins Register geschrieben wird.
Habe auch Assemblercode (MOV.B #CFH,369H) überprüft. DIe Zieladresse 
0369h stimmt.

Auch bei dem Befehl schreibt er nichts rein
1
u0tb = 0x55;  /* Sendepuffer beschreiben */
  Geht das nur unter bestimmten Vorraussetzungen?!

Aber bei der Baudrate des wundert mich echt und Protection liegt meines 
Wissens auch net drauf.

Gruß Timo

von Olaf (Gast)


Lesenswert?

> einfach nichts ins Register geschrieben wird.

Woher weisst du das?

Kann man das Register lesen? Ich weiss jetzt nicht wie es bei genau
deinen Registern ist, aber man muss nicht aus allen Registern lesen
koennen und wie schon gesagt, manche muessen zum schreiben
erstmal freigeschaltet werden.

Olaf

von PS (Gast)


Lesenswert?

Function Select Register PS0 und PSL0

von Nicolas (Gast)


Lesenswert?

Ja bei der HEW umgebung kann man per IO maps alle Register des uC in 
echtzeit beobachten.. Ich habe das selbe Problem beim I2C, mir ist klar, 
dass das nicht das selbe ist, aber es geht ja hier um das Problem dass 
sich die Register zum Teil nicht so beschreiben lassen wie sie sollten..

von Timo (Gast)


Lesenswert?

Function Select Register habe ich mir nun noch einmal angeschaut ....

Ja die Reg. kann man Echtzeit auslesen...Oder kann es eben sein, da das 
Register nur write only ist, dass man deswegen den wert nicht sieht?
Dafür kenn ich Renesas zu wenig. Habe des Board erst die Woche und zuvor 
immer TI MSP430

Gruß

von Timo (Gast)


Lesenswert?

Bin nun immerhin etwas weiter...hatte ein Special Function Register 
vergessen...nun kommt zumindest schon etwas an.
Nur egal ob ich 'A' oder 'a' übertrage es kommt immer ein ö an.
Denk zwar die Einstellungen sind korrekt aber werde noch einmal drüber 
schaun...

Anscheinend ist es echt so, dass die write only Register dann einfach 
net ausgelesen werden von der HEW Software .. oder die Übertragungsrate 
ist nun einfach falsch und deswegen kommt das falsche Zeichen an, das 
kann nat+rlöich auch gut sein, da das brg reg mit 0x01 init. ist und ich 
ja 0xCF reinschreiben muss.

Gruß

von Timo (Gast)


Lesenswert?

Problem gefunden ... im Datenblatt war falscher Quarz abgebildet ... 
Baudrate neu ausgerechnet und nun geht alles...
Und HEW kann den Wert einfach nicht auslesen ... des hat mich ja am 
meisten verwundert, da ich immer dachte, der schreibt es nicht rein
Gruß an alle

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.