mechray 发表于 昨天 11:17

第二十二期(第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>>
}

页: 1 2 [3]
查看完整版本: 利用普中A2开发板学习AI8051U的心得