您的位置:首页 > 其它

stm32-中断

2014-09-18 17:20 591 查看
STM32的外部中断系统由两个部分组成:一个标准的NVIC,用于提供一级中断,还有个外部中断/事件控制器(EXTI),提供二级中断。所有来自EXTI的中断都要汇集到NVIC中。

EXTI共有19个中断事件请求器,可独立配置为下降,上升或双边沿触发,0~15接到每个端口的16位线上,16接PVD输出,17接RTC闹钟输出,18接USB唤醒。

EXTI由下降沿触发选择寄存器EXTI_RTSR,上升沿触发选择寄存器EXTI_FTSR,软件中断寄存器EXTI_SWISR,请求挂起寄存器EXTI_PR(与事件触发无关,中断(包括软中断)响应后,清除该寄存器避免一直触发中断),中断屏蔽寄存器EXTI_IMR,事件屏蔽寄存器EXTI_EMR。最终的结果送至NVIC进行进一步的处理。

注意:事件或中断触发源是没有区别的,只是在芯片内部分开,一路向CPU产生中断信号,另一路则向其他功能模块发送脉冲触发信号,其他功能模块如何响应这个触发信号,由对应的模块决定。事件表示有触发事件产生,适用于触发特定的外设模块,中断则是表示有某个事件发生,并跳到响应的中断服务函数中。

外部中断配置的步骤:

1.使能复用时钟(0X01) AFIO_ EXTICRn(1-4):如EXTICR0的低四位0~3表示Pn0(0001为PA,0010为PB。。。),4~7表示Pn1

2,EXTI_IMR或EXTI_EMR 清除EXTI_PR(写1清除)

3,EXTI_FTSR或EXTI_RTSR

事件配置就此结束,中断还有进行如下NVIC配置:

4.分组{

u32 temp,temp1;

temp1=(~NVIC_Group)&0x07;//取后三位

temp1<<=8;

temp=SCB->AIRCR; //读取先前的设置

temp&=0X0000F8FF; //清空先前分组

temp|=0X05FA0000; //写入钥匙

temp|=temp1;

SCB->AIRCR=temp; //设置分组

}

NVIC->IP 高四位 设置优先级

5.NVIC_ISER_SETENA0~SENTENA2或NVIC_ICER_CLRENA0~CLRENA2(32位寄存器)

6,对中断的统一屏蔽PRIMASK FAULTMASK

最后在中断里清除EXTI_PR(写1清除)。

另外,NVIC还有几个不常用到的32位寄存器

;8个NVIC_IABR(中断活跃标志)

8个NVIC_ISPR (中断挂起设置寄存器)

写:0:无影响 1:删除挂起状态

读:1:中断正等待处理 0:中断没有挂起

8个NVIC_ICPR:中断挂起清除寄存器

写:0:无影响 1:挂起中断

读:1:中断正等待处理 0:中断没有挂起
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: