Hallo Leute,
habe ein kleines Problem mit dem SPI beim AVR32. Nach der
Initialisierung des SPI0 ist erst mal wie gewünscht MOSI und SCK auf
High, wenn ich jedoch daten in das TDR Register schreibe passiert
einfach nichts. Auch im Statusregister SR ist immer nur zu entnehmen,
dass die Daten nicht gesendet worden sind.
Hier mal mein c-code.
1 | ...
|
2 | void SPI_Configuration()
|
3 |
|
4 | {
|
5 |
|
6 | AVR32_PM.pbamask |= (1<<5);
|
7 |
|
8 |
|
9 |
|
10 | AVR32_GPIO.port[0].gper &= ~((1 << 11)|(1 << 12)|(1 << 13)); //Set IO Pins disable for the GPIO Controller
|
11 |
|
12 | //Set The Periperial Multiplexer for SPI0
|
13 |
|
14 | AVR32_GPIO.port[0].pmr0 &= ~((1 << 11)|(1 << 12)|(1 << 13));
|
15 |
|
16 | AVR32_GPIO.port[0].pmr1 &= ~((1 << 11)|(1 << 12)|(1 << 13));
|
17 |
|
18 |
|
19 |
|
20 | AVR32_SPI0.mr |= ((1<<0) ); //Master mode),
|
21 |
|
22 | AVR32_SPI0.csr0 |= ((1<<0)|(1<<3) | (1<<8));
|
23 |
|
24 | AVR32_SPI0.cr |= (1<<0); //Enable SPI0
|
25 |
|
26 |
|
27 |
|
28 | int i=0;
|
29 |
|
30 | i= AVR32_SPI0.csr0;
|
31 |
|
32 | }
|
33 |
|
34 |
|
35 |
|
36 | int main(void)
|
37 |
|
38 | {
|
39 |
|
40 | fcpu_fpba_configure();
|
41 |
|
42 |
|
43 |
|
44 | SPI_Configuration();
|
45 |
|
46 |
|
47 |
|
48 | unsigned int i=0;
|
49 |
|
50 |
|
51 |
|
52 | while(1)
|
53 |
|
54 | {
|
55 |
|
56 | while( !(AVR32_SPI0.sr & (1<<1)))
|
57 |
|
58 | {
|
59 |
|
60 |
|
61 |
|
62 | }
|
63 |
|
64 |
|
65 |
|
66 | AVR32_SPI0.tdr = 0x000000ff;
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 | }
|
73 |
|
74 |
|
75 |
|
76 | return 0;
|
77 |
|
78 | }
|
Vermute mal das es an den Teilern für MCK liegt, aber andere Werte für
größere Teiler bringen leider auch keine änderung.
Wäre nett wenn mir jemand sagen kann was ich bei den Registern falsch
gemacht habe.
Gruß
Stefan