Hallo zusammen,
ich möchte einen dsPIC33FJ12MC202 programmieren. Derzeit bin ich daran
die SPI Schnittstelle flott zu machen.
Das ganze funktioniert auch soweit ganz gut. Die einzige Problematik,
die sich mir stellt ist, dass der SDO Pegel nicht auf die (meines
Erachtens) vorgesehenen 3,3V schnellt. sondern lediglich auf ca. 1V. Der
Clock funktioniert völlig normal und erreicht den logischen High-Pegel
von 3,3V.
Habt ihr Tipps, wie ich an diese Problematik herangehen sollte?
Vielen Dank im Vorraus
Christian
Hier der relevante Code :
1 | // ### Basic includes ###
|
2 | #include "p33fxxxx.h"
|
3 | #include "math.h"
|
4 |
|
5 | char test=0;
|
6 | char test2=0;
|
7 |
|
8 | int main(void)
|
9 | {
|
10 |
|
11 | // ## Initialisierung ##
|
12 |
|
13 | // Wählen, welche ANx PINS analog oder digital genutzt werden (0=analog)
|
14 | AD1PCFGL = 0b1111111111111111; // 15...0 : as digital
|
15 |
|
16 | //SPI initialisiert: Mode 00, SDI PinRP0, SDO PinRP1, SCK PinRP2!
|
17 | SPI1CON1bits.CKE=0;
|
18 | SPI1CON1bits.CKP=0;
|
19 | SPI1CON1bits.MSTEN=1; // Master
|
20 | SPI1CON1bits.SPRE=0; // Divide by 8
|
21 | SPI1CON1bits.PPRE=0; // Divide by 64
|
22 | SPI1CON2 = 0x0000;
|
23 | SPI1STAT = 0x8000;
|
24 | __builtin_write_OSCCONL(OSCCON & ~(1<<6)); //Unlock Registers
|
25 | RPINR20bits.SDI1R=0;//SDI
|
26 | RPOR0bits.RP1R=7;//SDO
|
27 | RPOR1bits.RP2R=8;//SCK
|
28 | __builtin_write_OSCCONL(OSCCON | (1<<6)); // Lock Registers again
|
29 |
|
30 | //In der Main Schleife steht folgendes:
|
31 |
|
32 |
|
33 | while(1)
|
34 | {
|
35 | while (test<256)
|
36 | {
|
37 | SPI1BUF = test;
|
38 | while (!SPI1STATbits.SPIRBF);
|
39 | test2 = SPI1BUF;
|
40 | test++;
|
41 | }
|
42 | test=0;
|
43 | }
|
44 | }
|