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