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