MC9S08SG32 SPI问题

[复制链接]
 楼主| win2000_li 发表于 2008-9-1 19:35 | 显示全部楼层 |阅读模式
我在用SPI来读写ST95040(EEPROM),搞了一天了,还是不对,SPI有数据输出,而95040一点反应也没有.不知道哪里出错,请搞过的兄弟们帮我看一看.哪里有错<br />误.<br /><br /><br />//三线制,MOSI&nbsp;MISO&nbsp;SCLK&nbsp;&nbsp;<br />void&nbsp;SpiInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIC1&nbsp;=&nbsp;0x5c;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Master&nbsp;mode,&nbsp;SPI&nbsp;enable.&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIC2&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIBR&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;2MHZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PTADD_PTADD7&nbsp;=&nbsp;1;//&nbsp;Out<br />}<br /><br /><br />unsigned&nbsp;char&nbsp;Read_SR(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;Tmp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;0x05;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//M95040&nbsp;Read&nbsp;Stat&nbsp;Register<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPTEF);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp&nbsp;=&nbsp;SPID;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPRF);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tmp;<br />}<br /><br /><br />unsigned&nbsp;char&nbsp;EepromByteRead(unsigned&nbsp;int&nbsp;EepromAddr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;Tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;0x03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//M95040&nbsp;Read&nbsp;Command<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPTEF);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;EepromAddr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;M95040&nbsp;Read&nbsp;Address<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPTEF);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Tmp&nbsp;=&nbsp;SPID;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPRF);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Tmp;<br />}<br /><br />oid&nbsp;EepromByteWrite(unsigned&nbsp;char&nbsp;EepromAddr,&nbsp;unsigned&nbsp;char&nbsp;data)&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//M95040&nbsp;Wrtie&nbsp;Stat&nbsp;Register<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPTEF);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;0x06;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//M95040&nbsp;Write&nbsp;Enable<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPTEF);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;0x02;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//M95040&nbsp;Send&nbsp;Write&nbsp;Command<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPTEF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;EepromAddr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Send&nbsp;Writen&nbsp;Address<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPTEF);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Writen&nbsp;8&nbsp;bit&nbsp;&nbsp;MSB<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!SPIS_SPTEF);<br />}<br /><br />
 楼主| win2000_li 发表于 2008-9-1 19:38 | 显示全部楼层

还有一个问题

在程序出现这样的语句(SPIS;&nbsp;SPID;)是什么意思????<br />voi&nbsp;xxx(xxx)<br />{<br />xxxxxx;<br />xxxxxx;<br />xxxxxx;<br />&nbsp;&nbsp;SPIS;<br />&nbsp;&nbsp;SPID;<br />xxxxxx;<br />xxxxxx;<br />}&nbsp;
张明峰 发表于 2008-9-2 16:08 | 显示全部楼层

没见你有CS的控制

SPI操作必须通过CS控制发起.<br /><br />&nbsp;SPIS;<br />&nbsp;SPID;<br />表示对这两个寄存器进行读操作
 楼主| win2000_li 发表于 2008-9-3 09:15 | 显示全部楼层

谢谢兄弟!!!

您的意思是我必须要接CS了???<br /><br />以下的图是我的昨天晚上抓的,每8个脉冲有一个字节的发出数据,我对照过。<br /><br />都是正确的,但是ST95040就是没有反应。<br /><br />
 楼主| win2000_li 发表于 2008-9-3 09:16 | 显示全部楼层

说明!!

黄色的波形是SCLK时钟输出<br /><br />绿色的波形是MOSI输出的数据
 楼主| win2000_li 发表于 2008-9-3 13:12 | 显示全部楼层

OK

&quot;SPIS;<br />SPID;<br />表示对这两个寄存器进行读操作<br />&quot;<br /><br />写操作,是写什么呢???写0x00;吗???<br />
张明峰 发表于 2008-9-3 23:01 | 显示全部楼层

必须接CS

否则就是瞎掰。<br /><br />“写操作,是写什么呢???写0x00;吗???”<br />这程序是你自己写的吗?居然连寄存器写什么都不知道?你一楼上贴的代码里那些“SPID=xx”都是为吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

718

帖子

1

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