Forum: Mikrocontroller und Digitale Elektronik LPC2478 - Problem mit Touch Panel


von Dominik W. (absurdum)


Lesenswert?

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!

von Dominik W. (absurdum)


Lesenswert?

Nach langem Suchen hab ich nun endlich den Fehler gefunden.
Ich hab die CS Leitung für den Touch controller per Software angesteuert 
und ihn mittels der FIO angesprochen. Wenn ich den Code mit Debugger 
rübergespielt habe, hat es funktioniert. Wenn ich den Code aber mit 
FlashMagic rüber gespielt habe, ist die CS Leitung sofort wieder 
richtung "H" geschwommen.

Die Lösung war den CS Pin nicht mit den FIO sondern mit den IO registern 
anzusprechen.

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
Noch kein Account? Hier anmelden.