Hello,
I have an issue with spi that freezes. I’m using atmega88 with nrf24l01 but when i try to test spi communication i get stuck.
I initialize spi based on atmel specifications:
DDRB |= (1<<DDB5) | (1<<DDB3) | (1<<DDB2) |(1<<DDB1);
SPCR |= (1<<SPE)|(1<<MSTR);
And when I try to test out writing to spi (and print out to terminal ) i get stuck looping… ( i have usart initialized and used without any problems)
char spi_rw(unsigned char x)
{
SPDR = x;
//get stuck in this while loop
while(!(SPSR & (1<<SPIF)));
//printing to terminal after get's out of loop but never go out
return SPDR;
}
I’m trying to read STATUS register:
uint8_t get_reg(uint8_t reg)
{
_delay_us(10);
CLEARBIT(PORTB, 2); //CSN low so nrf start listen for command
_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 do nothing now
return reg;
}
I try calling get_reg(STATUS) and passing it to usart to print out resultand I get nowhere since code stuck in while loop.
P.S. i use this simple functions to set and clear bits
#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))))
Thanks in advance, any help would be greatly appreciated. (sorry if i create thread on wrong place)