打印
[AVR单片机]

求助:AVR和MSP430 SPI通讯不起来

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


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

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

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

哪里不对? 

相关帖子

沙发
machunshui| | 2008-6-17 17:16 | 只看该作者

先保证一边正确

先保证一边正确,
最好确保从机无误.

写个IO模拟spi主,读从avr,这个比较简单.

如果模拟spi主,不行,检查电平是否匹配,avr从设置问题.
模拟spi主可以,检查430的spi设置,就几个参数,试试也试的出来.

其实如果读取少量的数据,用spi主模块,还真不如模拟主来的方便.

使用特权

评论回复
板凳
RTEMS| | 2008-6-18 13:28 | 只看该作者

为什么不用UART通讯呢

使用特权

评论回复
地板
qjy_dali| | 2008-6-22 14:09 | 只看该作者

用逻辑分析仪

使用特权

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

本版积分规则

144

主题

376

帖子

0

粉丝