Zdravím. Mám takový dotaz na programování rozhraní SPI pro AVR v jazyce C.
[code]unsigned char SPI_WriteRead(unsigned char dataout)
{
SPDR = dataout; //zapis do prenosoveho registru
while(!(SPSR & (1<<SPIF))); //cekani na dokonceni prenaseni
PORTB = (1<<PB2); //SS pin log 0
_delay_us(1); //zpozdeni 1us
PORTB = ~(1<<PB2); //SS pin log 1
}[/code]
V kódu výše je jednoduchá metoda zápisu přes SPI do slave zařízení (samotné nastavení SPI registrů řeším v metodě main).
A teď mám pár otázek. PB2 je pin slave select, čili když chci zapisovat musím jej nastavit na log 0. Proč se toto děje až po zápisu do přenosového registru SPDR? Proč mi nefunguje, když PB2 nastavím na log 0 již před samotným zápisem do registru? Dále proč je tam to zpoždění 1us a proč to bez něj někdy funguje a někdy ne? Je to tak, že se SPDR funguje jako nějaká cache do zařízení se data odešlou až po nastavení SS na log0? Za každou odpověď díky.
administrator: přejmenováno z "SPI, AVR a C"