PIC32 SPI USB CDC

OP #2807342
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.