求助:AVR和MSP430 SPI通讯不起来
ATmega8从机:void spi_init(void)
{
SPCR = (1<<SPE)|(1<<CPHA);// 从机模式,前沿输出,后沿采样,MSB先,闲置低电平
SPSR = 0x00;
}
uint8 spi_send_byte(uint8 data)//循环等待主机读取读取
{
SPDR = data;
while (!(SPSR & (1<<SPIF)));
data = SPDR; //清SPIF位
return 1;
}
主机MSP430F2012:
void spi_init(void) //SPI初始化
{
USICTL0= USIPE7+USIPE6+USIPE5+USIMST+USIOE+USISWRST; // SPI Port使能,SPI输出使能, SPI master
USICTL1= 0; // 前沿输出,后沿采样
USICKCTL = USIDIV_5 + USISSEL_2; // 时钟源SMCLK,32分频 250k
TI_CC_SPI_USART0_PxSEL |= TI_CC_SPI_USART0_SIMO | TI_CC_SPI_USART0_SOMI | TI_CC_SPI_USART0_UCLK; // SPI option select
TI_CC_SPI_USART0_PxDIR |= TI_CC_SPI_USART0_SIMO + TI_CC_SPI_USART0_UCLK;
USICTL0 &= ~USISWRST;
}
uint8 spiReadByte(void)
{
uint8 rByte;
P2OUT &= ~Test_cs;
USICNT=8;
while(!(USICTL1 & USIIFG)) ; //等接收完
rByte = USISRL; //接收数据
P2OUT |= Test_cs;
return rByte;
}
请问设置对吗?
怎么通讯不起来? 哪位能否给个SPI双机通讯实例? 我以前做过一个m16双机的,家里找不到,明天到公司找找,找到了发给你参考参考。 多谢楼上。
已经郁闷了好几天。 点击此处下载 ourdev_313602.rar(文件大小:9K) (原文件名:m16spi.rar)
来了,我花了点时间整理了一下,希望对你有用。 示波器!当年学校学串口。。我硬是读bit来着。。。 我用MSP430美0.5s读取SPI一次,用示波器看,主机SPI输入线SOMI和SPI时钟线SCLK:
1.SCLK电平空闲是低电平,八个方波脉冲,波长4us.
2.SOMI电平变换在SCLK上升沿的时候
3.SOMI电平变换不规则
4.SOMI在SCLK空闲时,可能是高电平,也可能是低电平。
哪里不对? 用示波器 观看SIMO:
1.SIMO电平在SCLK空闲时为地电平
2.SIMO电平电平变换在SCLK下降沿的时候。
3.SIMO可能在SCLK第一个上升沿前10us(2.5个SCLK周期)变成高电平
4.SIMO在SCLK最后一个下降沿后,电平缓慢降低到0(约1ms).(这里需要下拉电阻吗)? 你ATmega8和MSP430之间各个引脚是怎么接的,特别是SCLK,中间有没有电阻,阻值多大?
可能是时钟信号SCLK不稳定造成的
SCLK对高低电平比MISO MOSI要敏感
也就是说你要保证SCLK信号在高电平的时候足够高,低电平的时候拉到地
希望对你有帮助 回复【5楼】mljda 技术是人性
-----------------------------------------------------------------------
找到通道中人了,示波器看串口数据,还TM的是一位一位的数的!!
页:
[1]