打印

EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;的疑惑

[复制链接]
7908|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
williamt|  楼主 | 2011-7-4 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 williamt 于 2011-7-4 11:24 编辑

GPIOmain.c测试程序内有这样一段代码:
EXTI_InitStructure.EXTI_Line = EXTI_Line9;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
设置中断寄存器,而EXTI_Init()的函数中有如下代码:
if (EXTI_InitStruct->!= DISABLE
  {
   
/* Clear EXTI line configuration */


EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;


EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;

   .................................................
在定义文件中,

#define EXTI_Line9       ((u32)0x00200)  /* External interrupt line 9 */

因此:EXTI->IMR &=~EXTI_InitStruct->EXTI_Line; 也就是:

EXTI->IMR &=~((u32)0x00200);

IMR MR9应该是0,而在实际仿真中,MR9=1

请教高手,其中原因
[/fly]

沙发
fchlong| | 2012-12-17 14:18 | 只看该作者
其实在EXTI_Init(&EXTI_InitStructure)里面的
      EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;
         EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;
后面还有两句:
      tmp += EXTI_InitStruct->EXTI_Mode;
         *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
是用来置1的,仔细推敲一下就知道了。

使用特权

评论回复
板凳
uet_cache| | 2012-12-17 15:47 | 只看该作者

使用特权

评论回复
地板
woshiftt| | 2015-5-20 23:05 | 只看该作者
本帖最后由 woshiftt 于 2015-5-21 17:25 编辑

下面两行程序也没有做赋值给寄存器的操作啊,谈何置位呐!!!

使用特权

评论回复
5
周董| | 2015-5-21 09:53 | 只看该作者
EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;
         EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;

使用特权

评论回复
6
qin1205| | 2015-12-17 10:28 | 只看该作者
我是这样理解的,
    EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line; // EXTI->IMR偏移地址0x00
    EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line; // EXTI->IMR偏移地址0x04
   
    tmp += EXTI_InitStruct->EXTI_Mode;      //  EXTI_Mode定义0x00或0x04

    *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;// 选中当前的偏移地址赋值
//当tmp =0x00时, *(__IO uint32_t *) tmp就是选中偏移地址为0x00的寄存器赋值,即 EXTI->IMR寄存器
//当tmp =0x04时, *(__IO uint32_t *) tmp就是选中偏移地址为0x04的寄存器赋值,即 EXTI->EMR寄存器
这样写的好处就是优化代码,根据偏移地址给不同的寄存器赋值

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

41

帖子

0

粉丝