SPI-Problem mit SiLabs C8051F320

OP #1554335
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren