|
SPI多机通信主机收从机数据不稳定???????
一块m16做主 ,6块m48,主机发送给从机很正常,从机发送给主机的数据不稳定,有时正确,有时错误,请教各位大神什么原因呢?
一个m16,一个m48部分程序,每5秒启动一次数据交换。
主机::::
void spi_init(void)
{
unsigned char temp;
DDRB |= (1<<DDR_SCK)|(1<<DDR_MOSI);
DDRB &=~(1<<DDR_MISO);
PORT_SPI |= (1<<DDR_MISO);
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0); //SMSB,允许SPI中断,极PI允许,主机模式,性方式01,1/16系统时钟速率
SPSR = 0x00;
temp = SPSR;
temp = SPDR; //清空SPI,和中断标志,使SPI空闲
}
#pragma interrupt_handler spi_stc_isr:iv_SPI_STC
void spi_stc_isr(void)
{
SPI_rx_buff= SPDR; //从ISP口读出收到的字节
NOP();NOP();NOP();NOP();
SPI_rx_buff=0;
if(t<9) {SPDR=0x8f;t++;}
else {CS1;t=0;}
}
#pragma interrupt_handler timer1_compa_isr:iv_TIM1_COMPA//1s中断
void timer1_compa_isr(void)
{
//compare occured TCNT1=OCR1A
if(c_c<249)c_c++;
else c_c=0;
if(c_c%5==0)
}
从机:::
void spi_init(void)
{
unsigned char temp;
DDR_SPI &=~((1<<DDR_SCK)|(1<<DDR_MOSI));
DDR_SPI |= (1<<DDR_MISO);
SPCR = (1<<SPIE)|(1<<SPE)|(1<<CPOL)|(1<<CPHA);
SPSR = 0x00;
temp = SPSR;
temp = SPDR; //清空SPI,和中断标志,使SPI空闲
}
#pragma interrupt_handler spi_stc_isr:iv_SPI_STC
void spi_stc_isr(void)
{
SPI_rx_buff = SPDR; //从ISP口读出收到的字节
SPDR = 0xaa;
}
有哪位大小有SPI多机通信的例子给参考一下也行啊,谢谢大家了 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|