Hi all,
ich habe ein koisches Problem bei der SPI Datenuebertragung. Und zwar
habe ich in meinem verfassten Code staendig eine printf Ausgabe am ende
des main-loops um einige werte zu kontrollieren. Die SPI uebertragung
hat wunderbar funktioniert, doch als ich das printf rausgenommen habe,
spielen meine Ausganbe werte an den SPI verrueckt: Ich denke wenn ich
den code hier poste, dann ist es am deutlichsten:
1 | ...
|
2 |
|
3 | #define SPICOF 10.73741824
|
4 |
|
5 | int SPIOUT2;
|
6 | float SPISPEED, SPIOUT, SPEED;
|
7 | short SPIVAR1, SPIVAR2;
|
8 |
|
9 | ...
|
10 |
|
11 | SPISPEED = SPEED * 1000;
|
12 | SPIOUT = SPISPEED * SPICOF * 4;
|
13 | SPIOUT2 = (int)SPIOUT;
|
14 | SPIVAR2 = (SPIOUT2 >> 14) & 0x3FFF;
|
15 | SPIVAR2 |= 1 << 14;
|
16 | SPIVAR1 = SPIOUT2 & 0x3FFF;
|
17 | SPIVAR1 |= 1 << 14;
|
18 | while (SPIBUF & 0x20000000);
|
19 | SPIDAT0 = 0x2120;
|
20 | while (SPIBUF & 0x20000000);
|
21 | SPIDAT0 = SPIVAR1;
|
22 | while (SPIBUF & 0x20000000);
|
23 | SPIDAT0 = SPIVAR2;
|
24 | while (SPIBUF & 0x20000000);
|
25 | SPIDAT0 = 0x2028;
|
26 | /*printf("%f \n",SPEED);*/
|
Die Variable SPEED beinhaltet einen Wert der im vorgehendem code
berechnet wird, alle anderen Variablen in dem hier aufgefuehrten Code
werden nicht im vorherigen Codep-teil benutzt.
Das Problem ist nun, wenn ich printf ausgebe, dann werden die richtigen
werte per SPI uebergeben (also SPIVAR1/2 sind richtig). Wenn ich printf
wegnehme, dann sind SPIVAR1/2 nicht nur falsch, sondern springen wild
ueber verschiedene Werte herum.
Kann mir da jemand weiterhelfen?
Gruss
Kai