关于SPI

[复制链接]
4958|5
 楼主| linyi2007 发表于 2007-10-13 11:40 | 显示全部楼层 |阅读模式
spi, TE, pic, ic, tc
请问关于8位机SPI初始化问题:<br /><br />请问以下我的SPI初始化程序有错吗?怎样才能请SPIS_SPTEF?<br /><br />谢谢~<br /><br />void&nbsp;SPI_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIC1&nbsp;=&nbsp;0x54;&nbsp;//禁止SPI中断;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能SPI功能;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//作为主机;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIC2&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIBR&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;//波特率&nbsp;10M/1/2=5M<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(SPIS_SPTEF&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__RESET_WATCHDOG();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PTEDD_PTEDD2&nbsp;=&nbsp;1;&nbsp;//释放SPI模块的SS脚,并作为FM25L26的片选脚;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPI_CS&nbsp;=&nbsp;1;&nbsp;//先置高电平<br /><br />
张明峰 发表于 2007-10-14 21:51 | 显示全部楼层

清SPIS_SPTEF

唯一的办法是往数据寄存器SPI1D填数据。不过填入的数据一旦发送完毕,SPIS_SPTEF就立即变1。<br />和另外一贴的SCI发送中断标志一样的问题。怎么这么多人喜欢清这些硬件标志呢?不会变通一点点来处理?
 楼主| linyi2007 发表于 2007-10-15 08:29 | 显示全部楼层

关于清SPIS_SPTEF

呵呵:)&nbsp;谢过张大侠指教。<br /><br />但是&nbsp;我也是情非得已啊。我在在线仿真时,该标志位一直为1啊。如果使能了<br /><br />该SPIE,那不是永远都跳不出中断程序了?<br /><br />再向您请教一个问题:<br /><br />在进行SPI传输时,如果没有接SPI从机,SPI主机是不是也行接收到数据(即<br /><br />SPRF被置1)?
 楼主| linyi2007 发表于 2007-10-15 08:50 | 显示全部楼层

关于清SPIS_SPTEF

呵呵,看了一下&quot;SCI发送中断标志&quot;这个贴,<br /><br />我平常用SCI时,发送都是采用查询的方法,接收才用到中断,进中断的时候<br /><br />第一步一般是关闭中断使能,所以没有碰到那位仁兄的问题。<br /><br />我的SPI程序是:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(SPIS_SPTEF&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__RESET_WATCHDOG();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SPID&nbsp;=&nbsp;XX;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(SPIS_SPRF&nbsp;==&nbsp;0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__RESET_WATCHDOG();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIData&nbsp;=&nbsp;SPID;
张明峰 发表于 2007-10-15 19:14 | 显示全部楼层

SPI

在SPI主模式下,只要数据寄存器SPI1D为空,SPIS_SPTEF标志就永远为高,只是为了告诉现在你可以往外发送数据。另外在主模式下只要一个字节发送完毕,一定会有一个字节收到就绪,不管你要还是不要。<br /><br />另外上面的代码并不是中断驱动的写法。现在你用查询方式,又关中断何事?<br /><br />再另外,等一件事情时最好不要一天到晚RESET_WATCHDOG,这样不好。
 楼主| linyi2007 发表于 2007-10-22 13:51 | 显示全部楼层

spi

谢谢,张教主的指导,在下铭记在心啊。<br /><br />小弟愚见:SPI发送或接受是不是用查询比较好,反正速度够快。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

46

帖子

1

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