|
本帖最后由 shipeng 于 2017-11-24 09:13 编辑
最近在编写STM8S207的程序遇到一个看似莫名其妙的问题,外部中断无法切换为上升下降双边沿模式。进入调试状态查原因的时候发现问题出在EXTI_CR1写入无效。明明刚刚执行了EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_RISE_FALL);或者直接赋值EXTI_CR1=0x30;查看寄存器EXTI_CR1的值却还是0x00。无奈只能去检索资料于是发现这条重要内容:
“这些位仅在CC寄存器的I1和I0位都为1(级别3)时才可以写入。这些位定义端口D 的中断触发位”这句是问题的原因所在。通过仿真的时候查看寄存器发现在执行修改EXTI_CR1寄存器的时候I1和I0确实不都为1.那么又是什么原因引起的呢?仿真真是个好工具啊,某些人说他们写程序从来不用仿真我认为都是赤裸裸的嚣张和狂妄自大!查找原因的办法就是从程序第一句开始单步运行并密切关注I1和I0的值,最后发现执行到AD初始化的函数时I1和I0的值不再是11而变为10,复位重新进入AD初始化函数内部单步运行最终发现在AD初始化内部打开了总中断enableInterrupts();总中断一旦打开I1和I0即由11变为10!
最终问题的解决方法是在配置EXTI_CR1前要保证总中断没有打开,否则I1和I0的值就不为11,也就无法写入EXTI_CR1寄存器!
|
|