www.mikrocontroller.net

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


Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nicolas Glur (glurus)
Datum:

Bewertung
0 lesenswert
nicht 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"?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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_Codebe...

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am Oszi bekomm ich nichts angezeigt ...

mich wundert ja echt wieso bei
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
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

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: PS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Function Select Register PS0 und PSL0

Autor: Nicolas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.