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>>
}