SPI "freezes"

Status
Not open for further replies.

thebignoob

New Member
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:

Code:
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)

Code:
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:

Code:
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

Code:
#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.
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…