Hallo.
Ich habe einen ATMEGA128 mit dem CAN-Controller MCP2515 verbunden.
Nun, peinlicherweise habe ich solche Probleme das SPI zum Laufen zu bringen!
Das Programm hängt immer am zweiten SPI-transmit Versuch, weil es darauf wartet bis SPIF im SPSR-Register logisch 1 ist. Die Übertragung wird also nicht fertig...?
Das Problem hatte ich beim Mega32 mit MCP2515 nochnie!
Hier der Code:
UART_transmit_string("\rTransmit");Code:// -=> SPI initialisieren <=- void SPI_init(void){ // Setze CS, SCK und MOSI als Ausgang; MISO als Eingang; Pullup auf CS SPI_DDR |= (1<<SPI_CS)|(1<<SPI_SCK)|(1<<SPI_MOSI); // Ausgang SPI_DDR &= ~(1<<SPI_MISO); // Eingang //SPI_PORT |= (1<<SPI_MISO); // Pullup ein //SPI_PORT &= ~(1<<SPI_CS)|(1<<SPI_SCK)|(1<<SPI_MOSI); // Pullup aus // Aktiviere SPI; Master Interface; Rate = F_CPU / 4 SPCR = (1<<SPE)|(1<<MSTR); } // -=> SPI Transmit <=- uint8_t SPI_transmit( uint8_t data ){ UART_transmit_string("\rTransmit"); SPDR = data; // Starte Transmission while( !( SPSR & (1<<SPIF) ) ); // Warte bis Transmission beendet ist UART_transmit_string("\rTransmit finished"); return SPDR; // Return Daten-Register } // -=> CS auf Low <=- void SPI_cs_low(void){ SPI_PORT &= ~(1<<SPI_CS); } // -=> CS auf High <=- void SPI_cs_high(void){ SPI_PORT |= (1<<SPI_CS); }
UART_transmit_string("\rTransmit finished");
Durch sie kann ich ermitteln wo es hängt.
Eserscheint im Terminal:
"Transmit
Transmit finished
Transmit"
Das bedeutet er hängt beim zweiten Transmittversuch:
while( !( SPSR & (1<<SPIF) ) ); // Warte bis Transmission beendet ist
An was kanndas liegendass die Transmission nicht beendet wird?
bzw. SPIF-Flag in SPSR nicht gesetzt wird?!?!?







Zitieren

Lesezeichen