[SOLVED] spi "freezes"

Status
Not open for further replies.

bignoob

Newbie level 2
Joined
Aug 18, 2014
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Visit site
Activity points
21
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. :sad:
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…