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:

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");
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?!?!?