www.mikrocontroller.net

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

Autor: Timo (Gast)
Datum: 10.03.2008 11:29

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: 10.03.2008 11:34

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 "stefb" B. (stefan) Benutzerseite
Datum: 10.03.2008 12:07

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: 10.03.2008 12:18

> 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: 10.03.2008 12:19

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: 10.03.2008 13:08

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: 10.03.2008 14:09

> 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: 10.03.2008 14:20

Function Select Register PS0 und PSL0
Autor: Nicolas (Gast)
Datum: 10.03.2008 14:25

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: 10.03.2008 14:30

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: 10.03.2008 14:50

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: 10.03.2008 15:45

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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net