Potrzebuje napisac komunikacje SPI w full-duplex'sie i mam problem bo nie wiem jak to zaimplemenotwac.Otoz aktualnie mam funkcje dostepne w dokumentacji Atmega16 AVR czyli:
//-------------------------------- void SPI_MasterTransmit(char cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))); }
//-------------------------------- char SPI_Master_Receive(void) { /* Wait for reception complete */ while(!(SPSR & (1<<SPIF))); /* Return data register */ return SPDR; }
ale to nie full duplex...Bo transmisje "z" i "do" sa osobno. Znalezlem w ksiazce (BTC) pseudo-kod full-dupleska ale nie wiem jak sie do niego dobrac moze Wy bedziecie miec jakies propozycje:
unsigned char SPI_trans(unsigned char dana_nadana) { unsigned char i,dana_odebrana; dana_odebrana = 0; i = 8; whil (i) { i--; MISO=(dana_nadana>>i)$1; SCK=1; dana_Odebrahna=dana_odebrana|(unsigned char) (MOSI)<<i); SCK = 0; } return dana_odebrana; }
gdzie MISO,MOSI,SCK wyprowadzenia SPI na procku.
Wszytko fajnie ale ten ten kod wyglada mi na wlasna implementacje algorytmu SPI a ja chce wykotrzystac sprzetowy. A wiec czy mozecie jakos doradzic jak to polaczyc ?
Moja propozycja:
char SPI_MasterTransmit(char cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))); return SPDR; }
Pozdrawiam, Rafal k.