Hallo!
Ich habe ein ganz kurioses Problem..
Rahmenbedingungen:
LPC2136
ARM-USB-OCD
Rowley Crossworks
In einem kleinen Testprogramm wird ein Zeichen über die UART0 des ARMs
ausgegeben. Gleichzeitig, damit ich sehe, dass das Programm noch läuft,
blinkt dabei eine LED. Das Programm funktioniert im Debugger
anstandslos. Ich kann es auch flashen und es funktioniert ohne Debugger
genauso. Leider geht über UART nichts mehr, wenn ich den Stecker vom
JTAG entferne.
Also zum verdeutlichen (Programm läuft aus dem Flash und wird nicht
über JTAG gedownloadet):
Szenario 1:
- JTAG dran, Crossworks usw. alles geschlossen
- Debug-Jumper vom Port 1.27 (TDO) entfernt
- Spannung dran
- Programm läuft: ich sehe die Zeichen und LED blinkt.
Szenario 2:
- JTAG nicht angeschlossen
- Debug-Jumper vom Port 1.27 (TDO) entfernt
- Spannung dran
- LED blinkt, es kommt aber nichts an!
Ich kann auch im laufenden Betrieb einfach den JTAG-Stecker einstecken
und entfernen und ich sehe, wie die Zeichen ankommen bzw. nicht.
Die Hardware ist OK. Darauf läuft seit mehreren Jahren ein größeres
Projekt, das aber bisher ohne UART ausgekommen ist.
Das aktuelle Programm ist sehr einfach gehalten. Keine Interrupts. Init
von der LED und Implementierung von _delay_ms habe ich mal weggelassen.
Daran liegt es nicht (schon geprüft). Hat jemand eine Idee wonach ich
suchen soll??
Gruss
Thomas
main()
{
unsigned int divisor =
liblpc2000_get_pclk(liblpc2000_get_cclk(OSCILLATOR_CLOCK_FREQUENCY)) /
(16 * baud);
U0LCR = 0x83; /* 8 bit, 1 stop bit, no parity, enable DLAB */
U0DLL = divisor & 0xFF;
U0DLM = (divisor >> 8) & 0xFF;
U0LCR &= ~0x80; /* Disable DLAB */
PINSEL0 = PINSEL0 & (~0xF)| 0x5;
U0FCR = 1;
for(;;)
{
LEDON;
while(!(U0LSR & U0LSR_THRE));
U0THR='#';
_delay_ms(2);
LEDOFF;
}
}