第二十二期(第22集《比较器》)
比较器清除中断标志位函数为
- CMP_ClearFlag(); //清除比较器中断标志
复制代码
但从函数定义来看CMP_ClearFlag()是将CMPCR1的BIT6置位,而非清除。
- #define CMPCR1_CMPIF_MSK BIT6
- #define CMP_CheckFlag() READ_REG_BIT(CMPCR1, CMPCR1_CMPIF_MSK)
- #define CMP_ClearFlag() SET_REG_BIT(CMPCR1, CMPCR1_CMPIF_MSK)
复制代码
AiCube自动生成的中断函数如下,这会导致一旦进入中断后就跳不出来了。
- ////////////////////////////////////////
- // 比较器中断服务程序
- // 入口参数: 无
- // 函数返回: 无
- ////////////////////////////////////////
- void CMP_ISR(void) interrupt CMP_VECTOR
- {
- //<<AICUBE_USER_CMP_ISR_CODE1_BEGIN>>
- // 在此添加中断函数用户代码
- if (CMP_CheckFlag()) //判断比较器中断
- {
- CMP_ClearFlag(); //清除比较器中断标志
- }
- //<<AICUBE_USER_CMP_ISR_CODE1_END>>
- }
复制代码
|