Forum: Mikrocontroller und Digitale Elektronik SPI-Problem bei ADuC812


von Schoasch (Gast)


Lesenswert?

Hi

Ich Versuche momentan das SPI-Modul des ADuC812 zum laufen zu bekommen,
doch irgendwie funktioniert es nicht. Das Beispielprogramm von Analog
devices funktioniert auch nicht. hat jemand eine Idee woran das liegen
kann?

Hier der Code:
1
#include <stdio.h>                /* prototype declarations for I/O
2
functions */
3
#include <ADuC812.h>              /* ADuC812 header file            */
4
5
sbit LED = P3 ^ 4;                                
6
7
void wait_ms(int time)
8
{
9
 int delay_time,delays;
10
 for (delay_time=0; delay_time<time; delay_time++)
11
  {
12
  for( delays=0;delays<500;delays++);
13
  }
14
}
15
16
void interrup_0 () interrupt 7    // SPI Interrupt Vector Address
17
{
18
  ISPI=0;  
19
  P2=~P2;
20
}
21
void main (void)
22
{
23
  EA=1;                           // Enable global interrupts
24
25
  SCON = 0x52 ;       // UART configuration
26
  TMOD = 0x20 ;      //9600 bauds
27
  TH1 = 0xFD ;      //1 stop bit 
28
  TR1 = 1 ;      //no parity bit
29
30
  SPICON = 0x30 ;      //master mode
31
  IE2 = 0x01 ;
32
33
  SPE=1;                          // enable SPI interrupt
34
  while (1)                       // Wait for ADC interrupt
35
  {
36
          SPIDAT = 0x55;
37
      LED = 1;
38
      wait_ms(500);
39
      LED = 0;
40
      wait_ms(500);
41
42
  }
43
}

ICh programmiere mit µVision3. Wenn ich es simulier merke ich, dass nie
ein wert im SPIDAT-Register steht. Warum ist das so?

Achja.... ich benutze das ADuC812QS Evalboard.

PS.: Ich hab mit dem Oszi auch schon die SPI-Pins nachgemessen... tat
tut sich nichts :-(

Kann mir bitte jemand helfen?

mfg SChoasch

von Klausi (Gast)


Lesenswert?

Hallo, was machst du jetzt UART oder SPI?

Bei SPI gibt es jedenfalls kein Stopbit usw.
Das ist ein Ringbus. Vorne reinschieben und hinten abholen.

von Schoasch (Gast)


Lesenswert?

UART ist nur schon konifugriert, da ich es für eine Ausgabe dann
benutzen will.

Aber mit:
SPICON = 0x30 ;
Stelle ich ja das SPI-Modul ein.

SPICON SPI CONTROL REGISTER

ISPI    SPI INTERRUPT
       (SET AT END OF SPI TRANSFER)
WCOL    WRITE COLLISION ERROR FLAG
SPE     SPI ENABLE
        (0 = DISABLE, ALSO ENABLES SPI)
SPIM    MASTER MODE SELECT (0 = SLAVE)
CPOL    CLOCK POLARITY SELECT
        (0 = SCLK IDLES LOW)
CPHA    CLOCK PHASE SELECT
        (0 = LEADING EDGE LATCH)

SPR1    SPI BITRATE SELECT BITS
SPR0    BITRATE = FOSC / [4, 8, 32, 64]

von Mattias (Gast)


Lesenswert?

Du mußt die PINs entsprechend konfigurieren. Einfach immer einen Wert in
das Register schreiben geht auch nicht. Du mußt warten bis das transfer
ready flag erscheint.

Aber in jedem fall müssen die PINs richtig auf input und output
stehen.

Mattias

von Schoasch (Gast)


Lesenswert?

@MAttias: Nichts für ungut... Aber weist du wovon du redest?
Der ADuC812 ist ein 8051er... und da muss man nicht in die
Tristate-Register schreiben. Ausserdem können die SPI bzw I²C-Pins
nicht direkt angesprochen werden, da sie nur fürs SPI und I²C modul zur
verfügung stehen.

von Schoasch (Gast)


Lesenswert?

Und ausserdem... ich nehme mal an, das nach ca. 1Sekunde die SPI
übertragung abgeschlossen sein sollte oder glaubst du nicht ;-)

von Mattias (Gast)


Lesenswert?

Tschuldigung, ich dachte das ist ein arm.
Dann kenn ich mich nicht aus.

Mattias

von Schoasch (Gast)


Lesenswert?

:-) nein... aber ist eh verwirrend mit den namen von Analog.

von Schoasch (Gast)


Lesenswert?

Hat denn keiner von euch mit diesem µC was getan?

von Kafelnikov (Gast)


Lesenswert?

Wo ist 'Enable all interrupts'?


oder hab ichs übersehen?

von Schoasch (Gast)


Lesenswert?

Gleich am anfang ist es:
  EA=1;                           // Enable global interrupts

Was mich iritiert ist die Tatsache, das nie ein Wert im SPIDAT steht.

von Kafelnikov (Gast)


Lesenswert?

> EA=1;  // Enable global interrupts

Das ist doch enable extern Interrrupt0


mov IE, #80h ist enable global Interrupt(in assembler)


Ich arbeite zwar auch mit dem ADuC812, habe die SPI jedoch noch nicht
benutzt.
Ich lese das nur aus den Apps ab.

von Schoasch (Gast)


Lesenswert?

EA ist ein Bit, welches sich im IE-Register befinden (7Bit).

Hier ein Auszug aus dem Datenblatt:

EA    Written by user to enable &#8220;1&#8221; or disable
&#8220;0&#8221; all interrupt sources.

(ist auf Seite 38 zu lesen)

Das komische ist ja, dass Keil beim debuggen in die ISR springt, jedoch
nie etwas im SPIDAT drin steht. Wenn ich es so Teste, tut sich auch
nichts an den Pins. Weder an MOSI noch an SCLOCK.

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.