[ZLG-MCU] LM3S8962 的SPI时序问题

[复制链接]
3296|6
 楼主| JOHN78 发表于 2009-3-22 21:23 | 显示全部楼层 |阅读模式
用SSI模块实现SPImaster功能,用逻辑分析仪查看,发现一个字节中的CLK会停止一断时间,不知道是什么影响了
zlgmcu 发表于 2009-3-23 08:41 | 显示全部楼层

老兄真强,还用了逻辑分析仪!

建议先断开外设,单独测量LM3S8962的SSI接口,看是否正常。<br />可能的原因分为软件和硬件两个方面,要仔细排查。<br />看其它同型号板子是否出现同样的情况,也好做个对比。
john78 发表于 2009-3-23 09:54 | 显示全部楼层

不理解

有点不理解<br />只要一个数据写入SPI缓冲,不就由硬件自动完成一个字节数据的数据。时钟信号不应该被中断。和软件好象没有关系<br />如果和硬件有关,居然还能够成功完成数据传输。(这个SPI的时钟会被什么中断,是否和使用什么功能模块相关?)<br />slave是FRAM。
john78 发表于 2009-3-23 20:31 | 显示全部楼层

郁闷

还是想不明白<br /><br />既然是硬件SPI,CLK怎么会中断呢?&nbsp;-----&nbsp;&nbsp;这个模块不会有什么缺陷吧&nbsp;<br /><br />把SLAVE芯片拿掉也这样.不明白了.<br /><br /><br />软件部分<br /><br />U8&nbsp;SPI_FRAM_SendByte(U8&nbsp;byte)<br />{<br />&nbsp;&nbsp;U32&nbsp;rdata;<br />&nbsp;&nbsp;SSIDataPut(SSI_BASE,byte);<br />&nbsp;&nbsp;SSIDataGet(SSI_BASE,&rdata);<br />&nbsp;&nbsp;return&nbsp;(U8)rdata;<br />}<br /><br /><br />void&nbsp;FW_data(U16&nbsp;addr,U16&nbsp;val)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U16&nbsp;bvn;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr&nbsp;*=2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSI_CS_OFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte(0X06);&nbsp;&nbsp;&nbsp;//写使能&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSI_CS_ON;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSI_CS_OFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte(0X02);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bvn&nbsp;=&nbsp;addr&nbsp;&&nbsp;0xFF00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bvn&nbsp;=&nbsp;bvn&nbsp;&gt&gt8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte((u8)(bvn));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte((u8)(addr&nbsp;&&nbsp;0xFF));&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bvn&nbsp;=&nbsp;val&0xFF00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bvn&nbsp;=&nbsp;bvn&gt&gt8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte((u8)(bvn));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte((u8)(val&nbsp;&&nbsp;0xFF));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSI_CS_ON;<br />}<br />u16&nbsp;FR_data(u16&nbsp;addr)<br />{<br />&nbsp;&nbsp;&nbsp;U16&nbsp;vh,vl;<br />&nbsp;&nbsp;&nbsp;U16&nbsp;bvn;<br />&nbsp;&nbsp;&nbsp;addr&nbsp;*=2;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;SSI_CS_OFF;<br />&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte(0X03);<br />&nbsp;&nbsp;&nbsp;bvn&nbsp;=&nbsp;addr&0xFF00;<br />&nbsp;&nbsp;&nbsp;bvn&nbsp;=&nbsp;bvn&gt&gt8;<br />&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte((u8)bvn);<br />&nbsp;&nbsp;&nbsp;SPI_FRAM_SendByte((u8)((addr)&nbsp;&&nbsp;0xFF));&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;vh&nbsp;=&nbsp;SPI_FRAM_SendByte(0XFF);<br />&nbsp;&nbsp;&nbsp;vl&nbsp;=&nbsp;SPI_FRAM_SendByte(0XFF);<br />&nbsp;&nbsp;&nbsp;SSI_CS_ON;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(vh*0x100+vl);<br />}<br /><br />U16&nbsp;fdata[100];<br />void&nbsp;main(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;//初始化<br />&nbsp;&nbsp;SSIConfig(SSI_BASE,SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,SSI_SPEED,8);<br />&nbsp;&nbsp;&nbsp;SSIEnable(SSI_BASE);<br />&nbsp;&nbsp;&nbsp;GPIOPinTypeSSI(GPIO_PORTA_BASE,&nbsp;SSI_CLK|SSI_TX&nbsp;|&nbsp;SSI_RX);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;GPIODirModeSet(GPIO_PORTA_BASE,SSI_CS,GPIO_DIR_MODE_OUT);<br />&nbsp;&nbsp;&nbsp;GPIOPadConfigSet(GPIO_PORTA_BASE,&nbsp;SSI_CS,&nbsp;GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD);&nbsp;<br />&nbsp;&nbsp;&nbsp;SSI_CS_ON;<br />&nbsp;&nbsp;&nbsp;....<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;for(i=0;i&lt10;i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FW_data(i*10,7990+i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fdata[100+i]&nbsp;=&nbsp;FR_data(10*i);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;<br /><br />while(1)<br />{<br />;<br />}<br />&nbsp;}&nbsp;&nbsp;
john78 发表于 2009-3-25 21:53 | 显示全部楼层

挂了几天了,没有人理会

ZLG,是否能在你们的开发板上测试一下,<br />是不是这个现象,给个答复可以?
平常人 发表于 2009-3-25 22:01 | 显示全部楼层

从波形上看好像是时钟突然停顿了

好一点的情况是SPI的时钟停顿,坏一点的情况是系统的时钟停顿,最坏的情况是晶振暂时停顿过一会儿又恢复了。不管那种情况,时钟停顿总是很危险。<br /><br />LZ有没有注意它停了多长时间后又恢复了?时间越长,情况越不好。
xiaoxin1986 发表于 2009-3-30 00:10 | 显示全部楼层

学习了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

220

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部