Gast
#3600101
hallo Forum!
Bin gerade dabei mit einen Master(AVR) mit einem SPI-Slave kommunizieren
zu lassen.
Dazu eine Verständnis-Frage. Mal angenommen der Slave antwortet nicht,
dann kann der Master das hardwaremäßig gar nicht feststellen, außer dass
der SLAVE immer nur 0x00 sendet? D.h. das Programm auf dem Master sollte
auch ohne angesteckten Slave laufen!
Anbei der Code:
void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(0<<SPR1)|(1<<SPR0);
//1/8 FCPU
SPSR = 1<<SPI2X;
}
uint8_t SPI_MasterTransmit(uint8_t cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
return SPDR;
}
PORTC &= ~(1<<PC0); //cs auf low
main:
...
PORTC |= (1<<PC0); //cs auf low
USART_Transmit(SPI_MasterTransmit(0x05));
USART_Transmit(SPI_MasterTransmit(0x00));
USART_Transmit(SPI_MasterTransmit(0x00));
PORTC |= (1<<PC0); //cs auf high
...