XMEGA SPI string empfangen

Gast #2417436
Lesenswert?
• ▲
▼
Hallo,

ich habe mir eine kleines Programm geschrieben, welches Daten von SPIF 
nach SPIC sendet, diese empfangenen Daten in einem FIFO puffert und dann 
per Usart an den PC schickt. Als Controller verwende ich einen 
Atxmega128A1. Jetzt habe ich aber das Problem, dass immer nur das letzte 
Zeichen des Strings in den FIFO geschrieben wird und ich nur dieses 
letzte Zeichen empfange (In diesem Fall ein 't'). Die Daten werden aber 
ordnungsgemäß vom Master (SPIF) gesendet. Der Fehler muss also beim 
einlesen der Daten liegen. Leider kann ich den Fehler nicht finden. Hat 
jemand einen Hinweis?

Hier mein Code:
1
volatile FIFO_64 fifo;
2

3
int main(void) {
4

5
...//Initialisierungen usw.
6

7
fifo_init(&fifo);
8
usart_init(9600);
9

10
   while(1) {
11
    //Wenn was im Buffer steht, dann über Usart ausgeben
12
    while(fifo_filled(&fifo)) {
13
      usart_putc(fifo_read(&fifo));
14
    }
15

16
    _delay_ms(1000);
17

18
                //Testnachricht
19
    spiF_send_string("Natternest");
20
    }
21
}
22

23

24
ISR (SPIC_INT_vect) {
25
  char c = spiC_read_char();
26
  
27
  fifo_write(&fifo, c);
28
}

Die Spi-Routinen:
1
 
2
char spiC_read_char(void) {
3
  return SPIC_DATA;
4
  
5
}
6

7
void spiF_send_string(char *s) {
8
  PORTF_OUTCLR |= SPIF_SS;  //SS low
9
  
10
  while(*s) {
11
    SPIF_DATA = *s;
12
    s++;
13
    while(!(SPIF_STATUS & SPI_IF_bm));
14
  }
15
  
16
  PORTF_OUTSET |= SPIF_SS; //SS high
17
}

Danke schonmal
Gast #2418466
Lesenswert?
• ▲
▼
Hi,

danke für den Tipp. Das habe ich jetzt korrigiert.

@Gerhard:
Ein kleiner Fehler ist noch in deinem ersten Post:
"Richtig -> PORTF_OUT  |= SPIF_SS;  //SS low"  lässt den Pin high 
werden. Ich denke du meintest:
1
PORTF_OUT  &= ~SPIF_SS;  //SS low

danke und grüße,
jtag

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.