[STM8] STM8S的read-modify-write问题

[复制链接]
1880|1
 楼主| gnaijnaoul 发表于 2014-9-13 11:05 | 显示全部楼层 |阅读模式
本帖最后由 gnaijnaoul 于 2014-9-13 11:12 编辑

工作中使用STM8S105C6T6,使用到T1中断、AD中断、EEPROM写完成中断、串口中断!
AD使用单次扫描模式,从通道0扫描到通道7,触发信号来自T1的中断信号,500uS中断一次!
现在遇到的情况是通过LCD和串口查看AD采样电压值一直不变(外面电压值确实在变),其它功能都是正常,重启一次MCU后问题消失了!
现在推测是寄存器的read-modify-write问题引起的,推测问题机理如下。
由于某些原因导致ADC中断被延迟,直到下次AD转换被触发后才运行到中断退出处,
执行ADC_CSR=ADC_CSR&0x7F(清EOC标志,汇编对应使用的是BRES指令),
此时ADC_CSR的低三位已经变为0(初始化为7,扫描0~7通道,此时在转换0通道,所以低3位变为0,这真是ST的扯蛋设计),由于BRES指令是读修改写指令,
导致ADC_CSR的低三位被清为0,只转换0通道,AD其它通道转换值不被更新。
现在改进的方法是不适用T1自动触发AD,在T1中断里使用程序初始化一次ADC_CSR后再触发转换!
查看ST的数据手册后发现有两处对BRES和BSET描述矛盾的地方,截图如下!
希望了解的高手指导一下!
未标题-3.jpg

未标题-2.jpg
此外还有个疑问:如果读修改写指令刚运行完读部分,产生中断,中断是在该指令执行完后跳转还是立即跳转?


zh113214 发表于 2014-9-13 21:14 | 显示全部楼层
这个要多试验几次就知道了:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

181

帖子

2

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