Hallo Forum! Ich habe hier einen Phytec-Kit(lpc2294 auf HD200) und habe ein Problem beim empfangen der Botschaft Hello World aus dem Gleichnamiegen bsp. #include <stdio.h> /* I/O Functions */ #include <LPC22XX.H> /* LPC22XX Peripheral Registers */ extern void init_serial (void); void delay (void) { /* Delay Function */ unsigned long x; for (x = 0; x < 400000; x++); } int main (void) { init_serial(); /* Initialize Serial Interface */ IODIR0 = 0x00000100; /* P0.8 defined as Output */ while (1) { /* Loop forever */ IOCLR0 = 0x00000100; /* Turn LED On (P0.8 = 0) */ printf ("Hello World\n"); /* Print "Hello World" */ IOSET0 = 0x00000100; /* Turn LED Off (P0.8 = 1) */ delay(); /* Delay */ } } Das blinken der LED ist zu beobachten, aber kein "Hello Nerd" im Hyperterminal(br:9600,d.bits:8,parity:none,stopp:1,flussteuerung:keine,e mulation:atum.). Des weiteren habe ich Verständnissproblem mit ausdrücken wie: IODIR0 = 0x00000100; IOSET0 = 0x00000100; Aus initialisierung des seriellen interfaces: PINSEL0 = 0x00050000; /* Enable RxD1 and TxD1 */ U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */ U1DLL = 97; /* 9600 Baud Rate @ 15MHz VPB Clock */ U1LCR = 0x03; /* DLAB = 0 Wo finde ich mal eine auflösung der codierung, eine liste in der steht welche variablen es gibt und welche bedeutung der ihnen zugewiesene HEX-code hat? verzweifelte grüße...
Hallo, Sachen wie IODIRx und PINSELx ... sind Register des Controllers. Deren Definition (Adressen) sind in einem Headerfile zu finden. Die Namen der Ports im Headerfile stimmen üblicherweise mit denen im Usermanual überein. Die Zuordnungen der Bits der Register zu Pins und dgl. sind im Usermanual zu finden. Wenn das alles klar ist, dann nachsehen: - Mit welchem Takt läuft der Rechnerkern Das müßte man aus dem Startupfile entnehmen können? - Ist die UART eingeschaltet (Register PCONP) ? - Welchen Takt hat die UART ( Register PCLKSELx) ? - schreibt printf auf die UART ? MfG
Hallo, vielen dank ersteinmal für die schnelle reaktion! Der rechner arbeitet mit 10mhz. ist die uart eingeschaltet? (auszüge aus der headerdateilpc22xx): #define PCONP (*((volatile unsigned long *) 0xE01FC0C4)) tackt der uart: ein register pckselx ist nicht in der headerdatei lpc22xx vorhanden. U1DLL = 97; /* 9600 Baud Rate @ 15MHz VPB U1DLL ist bei /* Universal Asynchronous Receiver Transmitter 1 (UART1) */ in der headerdatei dabei. Wohin printf schreibt weis ich nicht. zuordnung von bits und adressen sind nicht im manual zu finden...register zu pins sind vorhanden. hier nochmal der volle bsp.code: #include <stdio.h> /* I/O Functions */ #include <LPC22XX.H> /* LPC22XX Peripheral Registers */ extern void init_serial (void); void delay (void) { /* Delay Function */ unsigned long x; for (x = 0; x < 400000; x++); } int main (void) { init_serial(); /* Initialize Serial Interface */ IODIR0 = 0x00000100; /* P0.8 defined as Output */ while (1) { /* Loop forever */ IOCLR0 = 0x00000100; /* Turn LED On (P0.8 = 0) */ printf ("Hello World\n"); /* Print "Hello World" */ IOSET0 = 0x00000100; /* Turn LED Off (P0.8 = 1) */ delay(); /* Delay */ } } ______________________________________________________________________ _ init_serial: #include <LPC21xx.H> /* LPC21xx definitions */ #define CR 0x0D void init_serial (void) { /* Initialize Serial Interface */ PINSEL0 = 0x00050000; /* Enable RxD1 and TxD1 */ U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */ U1DLL = 97; /* 9600 Baud Rate @ 15MHz VPB Clock */ U1LCR = 0x03; /* DLAB = 0 */ } /* implementation of putchar (also used by printf function to output data) */ int sendchar (int ch) { /* Write character to Serial Port */ if (ch == '\n') { while (!(U1LSR & 0x20)); U1THR = CR; /* output CR */ } while (!(U1LSR & 0x20)); return (U1THR = ch); } int getkey (void) { /* Read character from Serial Port */ while (!(U1LSR & 0x01)); return (U1RBR); } beste grüße!
Hallo zusammen, AN Thorsten Heimberg hat der Code so wie du ihn eingegeben hast nun Funktioniert? konntest du das Problem lösen? viele Grüße Sebastian
Guten morgen sebastian, nein leider hat der code so nicht funktioniert, siehe meinen neuen beitrag im forum. es scheint probleme mit der baudrate zu geben sicher ist das aber auch noch nicht.... gruß thorsten
Mir ist nur aufgefallen, dass diese Zeile in Deinem Code vorkommt: U1DLL = 97; /* 9600 Baud Rate @ 15MHz VPB das wuerde bedeuten, dass die CPU mit 60 MHz laufen soll, dann laeuft VPB standardmaessig mit 15 MHz. Das wiederrum waere 6x schneller als angenommen. Hab die Zahlen jedoch nicht mit dem Manual gecheckt. Die meisten Beispiele gehen von 60 MHz CPU-Clock aus, weil das die max. Frequenz fuer diesen Chip ist und auch die meisten Anwender erst mal sehen moechten, was kann das Ding. Robert
Hallo robert, das habe ich mittlerweile auch bemerkt, meine cpu frequenz beträgt 10MHZ und dementsprechend mein U1DLL: 16 bzw 0x10. Dabei kommt man zwar nicht GENAU auf 9600bit/s aber das macht nichts, habe die CPU auch schon auf 9.8304MHZ eingestellt was zu einer baudrate von GENAU 9600 bit/s führen sollte und die gleichen Zeichen empfangen... trotzdem vielen dank für deine Aufmerksamkeit best! thorsten
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.