STM32NVIC嵌套向量中断控制器函数分析.docx
- 文档编号:6659726
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:6
- 大小:755.37KB
STM32NVIC嵌套向量中断控制器函数分析.docx
《STM32NVIC嵌套向量中断控制器函数分析.docx》由会员分享,可在线阅读,更多相关《STM32NVIC嵌套向量中断控制器函数分析.docx(6页珍藏版)》请在冰豆网上搜索。
STM32NVIC嵌套向量中断控制器函数分析
STM32NVIC嵌套向量中断控制器函数分析
中断管理函数
CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。
STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。
而我们常用的就是这60个可屏蔽中断,所以我们就只针对这60个可屏蔽中断进行介绍。
在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:
typedefstruct
{
vu32ISER[2];
u32RESERVED0[30];
vu32ICER[2];
u32RSERVED1[30];
vu32ISPR[2];
u32RESERVED2[30];
vu32ICPR[2];
u32RESERVED3[30];
vu32IABR[2];
u32RESERVED4[62];
vu32IPR[15];
}NVIC_TypeDef;
ISER[2]:
Interruptsetenableregisters中断使能寄存器组
ICER[2]:
interruptclearenableregisters中断除能寄存器组
ISPR[2]:
interruptsetpendingregisters中断挂起寄存器组
ICPR[2]:
interruptclearpendingregisters中断解挂寄存器组
IABR[2]:
interruptactivebitregisters中断激活标志寄存器组
主要分析
IPR[15]:
interruptpriorityregisters中断优先级控制寄存器组
使用函数实现中断分组:
可选分组0--4
MY_NVIC_PriorityGroupConfig(u8NVIC_Group)
{
u32temp,temp1;
//设置中转变量
temp1=(~NVIC_Group)&0x07;//取后3位
temp1;AIRCR;//读取先前设置
temp&=0x0000F8FF;//清空先前设置
temp|=0x05FA0000;//插入密钥
temp|=temp1;//分组设置赋值进
SCB->;AIRCB=temp;//设置完的值赋值给中断分组寄存器
}
语句解读:
temp1=(~NVIC_Group)&0x07;由于
所以组号取反与111即得到分组所需寄存器值
temp|=0x05FA0000;
密钥
使用函数实现中断优先级设置:
voidMY_NVIC_Init(u8NVIC_PreemptionPriority,u8NVIC_SubPriority,u8NVIC_Channel,u8NVIC_Group)
{
u32temp;
u8IPRADDR=NVIC_Channel/4;//每组只能存4个得到组地址
u8IPROFFSET=NVIC_Channel%4;//得到组内偏移地址
IPROFFSET=IPROFFSET*8+4;//得到确切地址
MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
temp=NVIC_Preemptionpriority;>;NVIC_Group);//设置响应优先级
temp&=0xf;//取低4位
if(NVIC_Channel;ISER[0]|=1;ISER[1]|=1;IPR[IPRADDR]|=temp
temp=NVIC_Preemptionpriority;>;NVIC_Group);//响应优先级在右边,根据响应位多少进行右移
temp&=0xf;//得到分组值
外部中断配置函数:
STM32的EXTI控制器支持19个外部中断/事件请求。
每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。
STM32的19个外部中断为:
线0~15:
对应外部IO口的输入中断。
线16:
连接到PVD输出。
PVD(ProgrammableVoltageDetector),即可编程电压监测器。
应用于STM32ARM芯片中,作用是监视供电电压,在供电电压下降到给定的阀值以下时,产生一个中断,通知软件做紧急处理。
当供电电压又恢复到给定的阀值以上时,也会产生一个中断,通知软件供电恢复。
线17:
连接到RTC闹钟事件。
RTC是多种名词的缩写,如:
实时时钟(Real-TimeClock)
线18:
连接到USB唤醒事件。
对于外部中断EXTI控制MDK定义了如下结构体:
typedefstruct
{
vu32IMR;
vu32EMR;
vu32RTSR;
vu32FTSR;
vu32SWIER;
vu32PR;
}EXTI_TypeDef;
IMR:
中断屏蔽寄存器InterruptMaskRegister32位寄存器前19位有效
EMR:
事件屏蔽寄存器Eventmaskregister
32位寄存器前19位有效
RTST:
上升沿触发选择寄存器Risingedgetriggerselectregister
FTSR:
下降沿触发选择寄存器Fallingedgetriggerselectregister
SWIER:
软件中断事件寄存器Softwareinterrupteventregister
PR:
挂起寄存器PendingRegister
I/O口复用里的配置寄存器EXTICR每个I/O口可以配置成中断输入
STM32任何一个IO口都可以配置成中断输入口,但是IO口的数目远大于中断线数(16个)。
于是STM32就这样设计,GPIOA~GPIOG的[15:
0]分别对应中断线15~0。
这样每个中断线对应了最多7个IO口,以线0为例:
它对应了GPIOA.0、PIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。
而中断线每次只能连接到1个IO口上,这样就需要EXTICR来决定对应的中断线配置到哪个GPIO上了。
EXTICR在AFIO的结构体中定义如下
typedefstruct
{
vu32EVCR;
vu32MAPR;
vu32EXTICR[4];
}AFIO_TypeDef;
EXTIRC寄存器总共4个,因为编译器的寄存器都是从0号开始的,所以EXTICR[0]---EXTICR[3]对应
;>;中的EXTICR1---EXTICR4每个EXTICR用了其中低16位.
外部中断配置函数:
voidEx_NVIC_Config(u8GPIOx,u8BITx,u8TRIM)
{
u8EXTADDR;
u8EXTOFFSET;
EXTADDR=BITx/4;//得到中断寄存器组编号
EXTOFFSET=(BITx%4)*4;//得到偏移量具体哪个I/O口进行设置
RCC->;APB2ENR|=0x01;//使能复用I/O口
AFIO->;EXTICR[EXTADDR]|=GPIOx;IMR|=1;EMR|=1;FTSR|=1;RTSR|=1< } 注: TRIM为触发方式选择变量;0x01下降沿触发0x02上升沿触发0x03任意电平触发.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32NVIC 嵌套 向量 中断 控制器 函数 分析