EXTI_Init函数中为什么要先清除IMR与EMR的标志位呢?

2019-07-21 07:30发布

刚才学习中断函数
查看库函数对中断的初始化,除了将结构体参数写入寄存器外,还在函数第一步将IMR与EMR的标志位置0,屏蔽线上中断
if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)
  {
    /* Clear EXTI line configuration */
    EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;
    EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;
    但是后来我查看库函数,并没有再次将这两位置1,既然屏蔽了那么中断怎么响应呢??求解

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
zc123
1楼-- · 2019-07-21 12:03
tmp = (uint32_t)EXTI_BASE;
 //....
 tmp += EXTI_InitStruct->EXTI_Mode;
 *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
这三句话不就是配置中断/或者事件寄存器吗
最珍贵年轻的心
2楼-- · 2019-07-21 15:26
回复【2楼】zc123:
---------------------------------
操作地址的!3Q!忘记去看地址偏移了
wang521000
3楼-- · 2019-07-21 17:55
不应该是位操作么
qhm
4楼-- · 2019-07-21 23:29
EXTI->IMR配置那条线,有没有什么要求

一周热门 更多>