Hallo, hab ein USB Starterkit II das Daten von einem
Beschleunigungsensor über SPI einliest. Die SPI funktioniert soweit.
Die Daten von der SPI sollen über USB (RS232 emuliert) eingelesen
werden.
Wenn ich jedoch die API "USB Device - CDC Basic Demo" von Microchip
nehme und dort mein SPI-Code einbinde funktioniert die übertragung über
USB nicht.
Womöglich wegen der while-Schleifen in meinem SPI-Code?
Wie krieg ich die while-Schleifen raus? HILFE!!!
1 | /*=============SPI1 Accelerometer====================*/
|
2 |
|
3 | #include <p32xxxx.h>
|
4 |
|
5 | // Configuration Bit settings
|
6 | // SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
|
7 | // PBCLK = 40 MHz
|
8 | // Primary Osc w/PLL (XT+,HS+,EC+PLL)
|
9 | // WDT OFF
|
10 | // Other options are don't care
|
11 | //
|
12 |
|
13 | #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1
|
14 | #pragma config FPLLMUL = MUL_15, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
|
15 |
|
16 |
|
17 |
|
18 | int writeSPI1(int i);
|
19 | void delay();
|
20 | void SPI_init();
|
21 | int SensorSetSamplingrate();
|
22 | int j=0;
|
23 | int k=0;
|
24 | int l=0;
|
25 | int m=0;
|
26 |
|
27 | main(){
|
28 | SPI_init();
|
29 | SensorSetSamplingrate();
|
30 | //application main loop
|
31 |
|
32 | PORTBbits.RB0=0; //select
|
33 | writeSPI1(0b10000000 | 0x28);
|
34 | l=writeSPI1(0);
|
35 | PORTBbits.RB0=1; //de-select
|
36 | delay();
|
37 | PORTBbits.RB0=0; //select
|
38 | writeSPI1(0b10000000 | 0x29);
|
39 | m=writeSPI1(0);
|
40 | PORTBbits.RB0=1; //de-select
|
41 | delay();
|
42 |
|
43 |
|
44 | }//main loop
|
45 | }//main
|
46 |
|
47 |
|
48 | int writeSPI1(int i){
|
49 | SPI1BUF = i;
|
50 | while(!SPI1STATbits.SPIRBF);
|
51 | return SPI1BUF;
|
52 |
|
53 | }
|
54 |
|
55 |
|
56 | void SPI_init(){
|
57 | TRISBbits.TRISB0=0; //Ausgang
|
58 | PORTBbits.RB0=1; //de-select
|
59 | SPI1CON |= ( (1<<5) | (1<<6) | (1<<15) );
|
60 | SPI1CON &= ~( (1<<10) | (1<<11) | (1<<8) );
|
61 | SPI1BRG =2; //10MHz
|
62 | }
|
63 |
|
64 | void delay(){
|
65 | while(k<10){
|
66 | k++;
|
67 | }
|
68 | }
|
69 |
|
70 |
|
71 | int SensorSetSamplingrate(){
|
72 | int j;
|
73 | PORTBbits.RB0=0; //select
|
74 | writeSPI1(0b00000000 | 0x20); //schreiben auf CTRL_REG1_A
|
75 | writeSPI1(0b01010111); //100Hz
|
76 | PORTBbits.RB0=1;
|
77 |
|
78 | delay();
|
79 | PORTBbits.RB0=0; //select
|
80 | writeSPI1(0b10000000 | 0x20);
|
81 | j=writeSPI1(0);
|
82 | PORTBbits.RB0=1; //de-select
|
83 | delay();
|
84 | return j;
|
85 |
|
86 | }
|