Hallo,
ich arbeite gerade an einem Projekt, in dem wir auch einen LPC2478 mit
dem QVGA Base Board von Embedded Artists verwenden.
Soweit funktioniert alles, bis auf eine Kleinigkeit, für die ich bislang
keine Lösung gefunden habe.
Auf dem Baseboard ist ein LCD mit Touchpanel. Die Daten vom Touch Panel
liefert ein Touch Screen Controller (TSC2046), welcher über SPI mit dem
LPC verbunden ist.
Habe die Touch Panel Funktionen implementiert und mit JTAG Debugger auf
den Controller gespielt und getestet, funktioniert einwandfrei.
Jetzt habe ich die Software mittels Flash Magic (Version 6.95.2823) auf
das Target gespielt und es funktioniert wieder alles einwandfrei, bis
auf das Touch Panel. Der Touch Panel Controller liefert für alle Werte
immer den maximalwert (sieht also so aus, als wär die MISO Leitung immer
auf "H").
Code der SPI-Übertragung:
1 | BYTE SPI_sendByte (BYTE data)
|
2 | {
|
3 | WORD failsafe = 0;
|
4 |
|
5 | S0SPDR = data;
|
6 | while(((S0SPSR & (1 << SPI_SPSR_SPIF)) == 0) && (failsafe < 5000))
|
7 | failsafe++;
|
8 |
|
9 | if(failsafe < 5000) return S0SPDR;
|
10 | else return 0;
|
11 | }
|
Code der Touch Panel Auswerteroutine:
1 | WORD TOUCH_SPI_transfer (BYTE command)
|
2 | {
|
3 | BYTE temp_low,temp_high;
|
4 |
|
5 | clrFIO(TOUCH_SPI_CS_PORT,TOUCH_SPI_CS_PIN);
|
6 | SPI_sendByte(command);
|
7 | delayMs(SPI_WAIT_BETWEEN_BYTES);
|
8 | temp_high = (SPI_sendByte(0x00) & 0x7F);
|
9 | delayMs(SPI_WAIT_BETWEEN_BYTES);
|
10 | temp_low = (SPI_sendByte(0x00) & 0xF8);
|
11 | setFIO(TOUCH_SPI_CS_PORT,TOUCH_SPI_CS_PIN);
|
12 |
|
13 | return (((WORD)(temp_high) << 5) | ((WORD)(temp_low) >> 3));
|
14 | }
|
Hat jemand eine Idee, an was es liegen kann, dass die Software mit JTAG
Debugger funktioniert, und mit Flash Magic nicht?
EDIT:
Noch eine kleine Anmerkung: Der LCD Controller wird auch mittels SPI
initialisiert, dass funktioniert aber in beiden Varianten!