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
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"?
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
> 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
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ß
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
> 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
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..
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ß
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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.