[ZLG-ARM] SPI从机模式基于中断的连续数据发送问题

[复制链接]
 楼主| ponshm 发表于 2008-1-15 13:31 | 显示全部楼层 |阅读模式
您好!<br /><br />我利用SMARTARM2200控制一个短距离传输芯片,实现无线数传。数据传输接口采用SPI1接口。<br />SPI的配置如下:<br />uint32&nbsp;SPIMode&nbsp;=&nbsp;_CPHA&nbsp;|&nbsp;_CPOL&nbsp;|&nbsp;_SPIE;//SPIMode=10011000<br />PINSEL1=(PINSEL1&nbsp;&&nbsp;0xFFFFFC03)&nbsp;|&nbsp;0x2A8;<br />S1PCR&nbsp;=&nbsp;SPIMode;<br />VICVectAddr4&nbsp;=&nbsp;(uint32)SPI_Tx_Exception;<br />VICVectCntl4&nbsp;=&nbsp;(0x20&nbsp;|&nbsp;0x0B);<br />VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;11;<br /><br />void&nbsp;SPI_Exception(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;temp,rValue;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;S1PSR;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if((temp&nbsp;&&nbsp;0x80)&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rValue&nbsp;=&nbsp;S1PDR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S1PDR&nbsp;=&nbsp;0x27;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;S1PINT&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />该段程序实现连续时钟输入时的连续0x27输出。时钟速率在9.6kHz<br />单步调试时,程序能成功进入中断服务程序,但用综测看MISO口时,无数据输出。同时通过观察内存,当对S1PDR进行赋值后,0x300e0008的值没有改变,仍然是0x00。<br /><br />当在主函数中关闭中断后,调用如下代码,MISO可以看到连续的0x27输出。<br />while(1)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;S1PDR&nbsp;=&nbsp;0x27;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((S1PSR&nbsp;&&nbsp;0x80)&nbsp;==&nbsp;0);<br />}<br />证明SPI的配置应该没有问题。<br /><br />请问是否不能在中断服务中对SPI的数据写入寄存器进行写入操作?<br /><br />还有另一个问题,SPI1口在从模式下,给9.6kHz时钟时能输出数据,但把时钟提高到19.2kHz后就没有数据输出了,通过综测观察,时钟的时序是没有错误的。
zlgarm 发表于 2008-1-15 14:40 | 显示全部楼层

回复如下:

ponshm,您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;对于您的问题作如下回答:<br />&nbsp;&nbsp;&nbsp;&nbsp;1、您单步调试的时候看是否能执行到S1PDR&nbsp;=&nbsp;0x27;这条代码;<br />&nbsp;&nbsp;&nbsp;&nbsp;2、如果您还没有找出问题的原因的话,请您把您的源代码发送到我公司邮箱ARM@zlgmcu.com。我们给您调试一下。<br /><br /><br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;zlgarm_wzj
huangbingg 发表于 2008-2-26 13:30 | 显示全部楼层

是程新有问题吧

在你的SPI_Exception中,((temp&nbsp;&&nbsp;0x80)&nbsp;!=&nbsp;0)满足时,表示SPIF位置位,即spi传输已经结束,这时你用&nbsp;S1PDR&nbsp;=&nbsp;0x27写S1PDR&nbsp;寄存器又有何意义呢?所以你单步调试时,程序能成功进入中断服务程序,但用综测看MISO口时,无数据输出。同时通过观察内存,当对S1PDR进行赋值后,0x300e0008的值没有改变,仍然是0x00。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

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

2

主题

3

帖子

0

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