[ZLG-ARM] 关于VIC中,强制软中断的使用

[复制链接]
2555|4
 楼主| leon0001 发表于 2007-12-11 14:32 | 显示全部楼层 |阅读模式
ic, vi, spi, pi, AD
在VIC中,可以实现强制软中断。<br />由于,整个系统任务较多,而且有好几级中断。<br />那么,比如,AD采集,采用SPI口,ARM为主机<br />当ARM&nbsp;通过SPI口向AD发送控制转换命令时,若此时有其他任务产生中断,<br />那么,则会出现一下情况:<br />&nbsp;&nbsp;(1)停止SPI口发送数据<br />&nbsp;&nbsp;&nbsp;(2)响应中断<br />&nbsp;&nbsp;则:由于AD通过SPI口只接受了不到一个字节数据,此时,主程序要停止SPI发送,去响应中断,那么,明显地,此时AD就不能按照ARM要求进行相应通道的数据采集,造成AD采集误差。<br /><br />解决方法:可以使用软中断。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置一个标志位,比如,SPI_FLAG,当需要发送AD转换控制命令时或者需要读取AD转换结果值时,令SPI_FLAG=1,此时,可以采用以下语句,令进入软件中断,在中断中,不受打扰情况下(禁止中断嵌套),完成AD转换或AD数据接受。<br />&nbsp;<br />if(SPI_FLAG==1)//Vol_Dem为1,表示仍为标定过程<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable|=0x00000800;//使能SPI1中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VICSoftInt|=0x00000800;//强制产生SPI1中断<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />请问,周工,我这样分析对吧?
 楼主| leon0001 发表于 2007-12-13 11:47 | 显示全部楼层

周工,这样没问题吧?

  
zlgarm 发表于 2007-12-13 17:43 | 显示全部楼层

re

不需要这么复杂<br />如果您不想让一个过程被别的任务打断,那你可以在做这个操作前先调用操作系统的关中断函数就可以了,等你操作结束再开中断就可了!
 楼主| leon0001 发表于 2007-12-14 16:46 | 显示全部楼层

多谢啊

我还想再问一下,如果按照我上面说的,<br />强制进入软中断,也是可以的吧?<br />
 楼主| leon0001 发表于 2007-12-14 16:54 | 显示全部楼层

说软中断不确切

确切就是,利用VIC控制器,强制产生一个中断,在此中断中,执行比如AD采样等
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

139

帖子

0

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