Forum: Mikrocontroller und Digitale Elektronik PIC32 SPI USB CDC


von Thomas S. (seitzo)


Lesenswert?

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
}

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.