Forum: Mikrocontroller und Digitale Elektronik Wieder mal ein Problem.


von TheMason (Gast)


Lesenswert?

Hallo Leute,

ich versuche nun schon seit stunden das SPI Interface des LPC2106 ans 
rennen zu bringen. Vergeblich ...

Hier die initialisierung :


void  vSPIInit            (void)
{
  SPCR    = 0x00;
  SPCCR   = 8;
  SPCR    = 0x20;
  PINSEL0 &= ~0x3f00;
  PINSEL0 |=  0x1500;
  IODIR   |= 0x100;
  IOSET   = 0x100;
}

und hier die Sende-Routine :

UCHAR vSPITransceiveByte  (UCHAR ucData)
{
  UCHAR ucTemp;
  SPDR = ucData;
  while (!(SPSR & SPSR_SPIF));
  ucTemp = SPDR;
  return ucTemp;
}

Es passiert nix auf deb Leitungen (weder Clock, noch Data-Out).

Hat jemand eine Idee ?

Gruß
Rene

von holger (Gast)


Lesenswert?

Versuchs doch mal so:

  SPCR    = 0x00;
  PINSEL0 &= ~0x3f00;
  PINSEL0 |=  0x1500;
  IODIR   |= 0x100;
  IOSET   = 0x100;
  SPCCR   = 8;
  SPCR    = 0x20;

SPI Modul erst einschalten wenn alle Einstellungen
getan sind.

von TheMason (Gast)


Lesenswert?

hallo holger,

danke für den tip. aber es will noch nicht so recht klappen.
ich kann im moment nur per multimeter den clock "feststellen", sollte 
aber in einer endlosschleife vSPITransceiveData aber trotzdem messbar 
sein.
ich messe aber an sck und mosi immer 0V statt etwa 1.6V.

gibt es irgendeine möglichkeit herauszufinden ob ports kaputt sind ?!
ich habe langsam diesen verdacht, denn ich habe für die CS leitung 
vorher P0.3 verwenden wollen. es hat sich aber absolut gar nichts auf 
dieser leitung tun wollen (ich benutze kein I2C, daran kann es wohl 
nicht liegen, und wenn mir das datenblatt sagt das der port reset-mässig 
als gpio definiert wird, gehe ich davon aus das man mit IODIR und 
IOSET/IOCLR etwas port-gezappel sehen/messen müsste). verwende ich 
hingegen P0.8 funktioniert es sofort.

irgendwie merkwürdig ... :-(

von holger (Gast)


Lesenswert?

>ich kann im moment nur per multimeter den clock "feststellen", sollte
>aber in einer endlosschleife vSPITransceiveData aber trotzdem messbar
>sein.
>ich messe aber an sck und mosi immer 0V statt etwa 1.6V.

Mit einem Multimeter misst du bei z.B. 7.5MHz SPI Speed
gar nichts vernünftiges mehr an SCK oder MOSI. Dafür
brauchst du ein Osci.

>gibt es irgendeine möglichkeit herauszufinden ob ports kaputt sind ?!

Ja, schreib ein Programm das diesen Port nur ganz langsam
im 1-5 Sekunden Takt toggelt.

von TheMason (Gast)


Lesenswert?

>Mit einem Multimeter misst du bei z.B. 7.5MHz SPI Speed
>gar nichts vernünftiges mehr an SCK oder MOSI. Dafür
>brauchst du ein Osci.

wenn ich aber doch in einer endlosschleife permanent daten ausgebe (und 
sei es nur 0xff oder 0x55) dann muß man doch etwas richtung 50% von vcc 
messen, da die meiste zeit ja zwischen 0 und 1 getoggelt wird.
klar ist ein scope besser, aber das habe ich leider momentan nicht hier 
:-(

auf den tipp mit den ports einzeln toggeln hätte ich auch selbst drauf 
kommen können :-(( *grmpf.
danke nochmal fürs wachrütteln ....

von TheMason (Gast)


Lesenswert?

also die port pins habe ich mal getestet. es scheint so als wenn P0.2 
und P0.3 tatsächlich kaputt sind. nach dem der IODIR auf ausgang gesetzt 
wurde und mit IOSET alle pins auf 1 gesetzt waren, waren diese beiden 
pins 0.
scheinen also kaputt zu sein (falls ich nicht noch irgendetwas vergessen 
habe zu initialisieren, sollte aber nicht) ...
der spi tuts allerdings immer noch nicht (werde aber sobald ich ein 
scope da habe es nochmal testen). solange muß ich mich dann wohl mit 
einem software spi behelfen.

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.