Forum: Mikrocontroller und Digitale Elektronik SPI-Problem mit SiLabs C8051F320


von Mario G. (suicided)


Lesenswert?

Hallo Forum,

ich arbeite momentan an einer Verbindung eines Drahtlosnetzwerkes mit 
einem PC mit folgender Konfiguration:

Netzwerk bestehend aus CC2431
|
| SPI
|
USB-Controller (SiLabs C8051F320)
|
| USB (12 Mbps)
|
PC

Die SPI-Übertragung findet mit 250 kbps statt. Allerdings muss ich 
zwischen den einzelnen Bytes eine Pause machen, die der C8051F320 
braucht, um das Byte aus dem Register zu laden. Diese Pause verringert 
die Übertragungsrate auf unter 100 kbps was äußerst ungünstig ist, da 
die Funkdaten im schlimmsten Fall mit 250 kbps ankommen. Selbst 1 Mbps 
aufm SPI wird zu 140 kbps durch die Pause (57 µs) und durch eine kürzere 
Pause gehen Bytes verloren. DMA hat der C8051F320 nicht und die 
auslesende ISR ist so kurz wie möglich:
1
#pragma vector=SPIF_int
2
__interrupt void SPI_ISR(void) {
3
  SPI0CN &= ~0xF0; // alle Flags löschen
4
  if (!count) { // erstes ankommendes Byte (Länge)
5
    count = SPI0DAT;
6
  }
7
  else {
8
    SPIbuffer[--count] = SPI0DAT;
9
  }
10
  if (!count) { // am Ende des Paketes
11
    txLock = 0; // freigeben für USB
12
  }
13
}

Gibt es irgendeine elegante Möglichkeit sowas zu erledigen oder ist der 
USB-Controller einfach ungeeignet?

VG mario

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.