Koristim atmega88 i nrf24l01 modul, te pokusavam da testiram SPI komunikaciju cisto citajuci STATUS registar medjutim to mi ne polazi za rukom. Pokusao sam "debagirati" stvar konstantnim printanjem stvari na terminal i dosao do zakljucka da se zaglavim u petlji koja se koristi za cekanje dok se transmisija ne izvrsi.
Inicijalizaciju SPI sam provjeravao u "AVR151: Setup And Use of The SPI" http://www.atmel.com/images/doc2585.pdf
Code: Select all
DDRB |= (1<<DDB5) | (1<<DDB3)|(1<<DDB1);
SPCR |= (1<<SPE)|(1<<MSTR);
Code: Select all
char spi_rw(unsigned char x)
{
SPDR = x;
while(!(SPSR & (1<<SPIF)));
//ispis na terminal da je prosao ovaj dio... (nikada se ne desi :( )
return SPDR;
}
uint8_t get_reg(uint8_t reg)
{
_delay_us(10);
CLEARBIT(PORTB, 2); //CSN low nrf slusa komandu
_delay_us(10);
spi_rw(R_REGISTER + reg);
_delay_us(10);
reg = spi_rw(NOP);
_delay_us(10);
SETBIT(PORTB, 2); //CSN IR_High nrf nista ne radi
return reg;
}
//funkcije za setovanje bita
#define BIT(x) (1<<(x))
#define SETBITS(x,y) ((x)|=(y)))
#define CLEARBITS(x,y) ((x) &=(~(y)))
#define SETBIT(x,y) SETBITS((x), (BIT((y))))
#define CLEARBIT(x,y) CLEARBITS((x), (BIT((Y))))
Vjerovantno sam iz nekog meni nepoznatog razloga presao iz master u slave mod... (da li predstavlja problem sto je programator konstantno konektovan? Tako mi je lakse i brze mijenjati kodove nego ponovo spajati pinove.. )
U svakom slucaju, ako neko ima prijedlog da rjesim ovaj problem, unaprijed sam zahvalan
P.S. znam da se od hvala ne zivi al eto