打印

求助:MSP430与AVR SPI通讯不起来?

[复制链接]
1378|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ATmega32L|  楼主 | 2008-6-17 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}

请问设置对吗?
怎么通讯不起来?

相关帖子

沙发
ATmega32L|  楼主 | 2008-6-17 11:15 | 只看该作者

问题出在哪里?

我用MSP430美0.5s读取SPI一次,用示波器看,主机SPI输入线SOMI和SPI时钟线SCLK:  

1.SCLK电平空闲是低电平,八个方波脉冲,波长4us.  
2.SOMI电平变换在SCLK上升沿的时候  
3.SOMI电平变换不规则  
4.SOMI在SCLK空闲时,可能是高电平,也可能是低电平。  

问题出在哪里? 

使用特权

评论回复
板凳
ATmega32L|  楼主 | 2008-6-17 11:33 | 只看该作者

求助

用示波器 观看SIMO: 

1.SIMO电平在SCLK空闲时为地电平 
2.SIMO电平电平变换不规则 
3.SIMO可能在SCLK第一个上升沿前10us(2.5个SCLK周期)变成高电平 
4.SIMO在SCLK最后一个下降沿后,电平缓慢降低到0.(这里需要下拉电阻吗)? 

使用特权

评论回复
地板
TI_CPIC| | 2008-6-20 09:59 | 只看该作者

是否能把把示波器捕捉的波形贴出来参考一下

SPI模块之间的通信不需要上拉或者下拉电阻。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

376

帖子

0

粉丝