打印
[STM8]

STM8S的read-modify-write问题

[复制链接]
1642|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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描述矛盾的地方,截图如下!
希望了解的高手指导一下!



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


沙发
zh113214| | 2014-9-13 21:14 | 只看该作者
这个要多试验几次就知道了:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

181

帖子

2

粉丝