历史上的今天
今天是:2025年01月15日(星期三)
2019年01月15日 | STM32之NVIC中断优先级的介绍
2019-01-15 来源:eefocus
STM32
1.说在前面
1.中断:中断就是CPU在处理一件事的时候,遇到紧急情况,所以就去响应而处理另外一件事(粗略介绍)
2.对于51而言,只有5个中断源,所以难度不算太大,但是,对于CM3内核支持256个中断(16个内核中断加240个内部中断)
stm32F103而言,有着60会让可屏蔽中断,所以相对来说比较复杂
2.对于中断的部分寄存器的简单介绍
typedef struct
{
__IO uint32_t ISER[8]; /*!< Offset: 0x000 Interrupt Set Enable Register */
uint32_t RESERVED0[24];
__IO uint32_t ICER[8]; /*!< Offset: 0x080 Interrupt Clear Enable Register */
uint32_t RSERVED1[24];
__IO uint32_t ISPR[8]; /*!< Offset: 0x100 Interrupt Set Pending Register */
uint32_t RESERVED2[24];
__IO uint32_t ICPR[8]; /*!< Offset: 0x180 Interrupt Clear Pending Register */
uint32_t RESERVED3[24];
__IO uint32_t IABR[8]; /*!< Offset: 0x200 Interrupt Active bit Register */
uint32_t RESERVED4[56];
__IO uint8_t IP[240]; /*!< Offset: 0x300 Interrupt Priority Register (8Bit wide) */
uint32_t RESERVED5[644];
__O uint32_t STIR; /*!< Offset: 0xE00 Software Trigger Interrupt Register */
} NVIC_Type;
ISER[8]:中断使能寄存器,在stm32F103中使用了ISER[0](bit0-bit31对应着中断0到31),ISER[1](bit0到bit27 对应着中断32到59)
ICER[8]:设置ICER来实现除能操作
ISPR[8]:中断挂起寄存器,每个位和ISER[8]一致,将寄存器置于1则中断挂起,然后实现更高级或同级的中断,写0无效
ICPR[8]:中断解挂控制寄存器,和ISPR[8]进行对应,对相应寄存器进行解挂
IP[240]:中断优先级控制寄存器组
3.STM32的中断分组
1.通过配置SCB->AIRCR来处理

2.关于抢占优先级和响应优先级的介绍
1.对于抢占优先级和响应优先级,相对设置的数值越低,则相对更高
2.对于抢占优先级不同而言,优先级越高,可以在抢占优先级低的位置进行中断、
3.对于抢占优先级相同,但是响应优先级不同而言,响应优先级不能实现嵌套的中断,但是可以实现中断的先后顺序,在响应优先级高的位置则先进行中断
3.关于中断分组的库函数设置方法
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)//ÖжÏÓÅÏȼ¶ÉèÖÃ
{
/* Check the parameters */
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
/* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}
4.中断函数初始化的库函数设置
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
{
uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
{
/* Compute the Corresponding IRQ Priority --------------------------------*/
tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
tmppre = (0x4 - tmppriority);
tmpsub = tmpsub >> tmppriority;
tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
tmppriority = tmppriority << 0x04;
NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
/* Enable the Selected IRQ Channels --------------------------------------*/
NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
}
else
{
/* Disable the Selected IRQ Channels -------------------------------------*/
NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
(uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
}
}
就像设置GPIO口一样,以设置结构体的方法来实现初始化
5.明天准备学习一下外部中断函数,用上今天的知识
上一篇:STM32的EXTI小实验
下一篇:STM32学习笔记-外部中断
史海拾趣
|
生动形象的教学用电子钟[ZT] 笔者在教学中,设计了一套教学实验用“电子钟”电路。此线路包括七段数码显示器BS205和循环彩灯电路,实验显示生动有趣,各部分原理简单,适宜学生直接观察“编码器”、“译码器”、“寄存器”、“计数器”等逻辑 ...… 查看全部问答> |
|
我在驱动程序中加入下面蓝色代码会造成系统蓝屏重启,请问是什么原因呢?是不能直接调用WRITE_PORT_UCHAR这个函数吗?? NTSTATUS WinIoDispatch(IN PDEVICE_OBJECT DeviceObject, & ...… 查看全部问答> |
|
我用的是windows mobile professional模拟器,现在不能连接到网络上(也就是在模拟器上打不开网页),总是提示:无法连接,请确拨号或代理服务器设置是否正确,然后重试),之前还可以,今天公司给我换了个ip就不行了,我把能试的方法都试遍了,还 ...… 查看全部问答> |
|
小弟正学习mobile手机开发, 现在建立一个win32工程, 默认情况下运行程序模拟器上是一个白屏, 现在想一运行就调用自己的一个ID为dialog_main的对话框, 假设他的窗口过程叫MainPro(),请高手指教改在那里修改代码, 望各位能详细指点,很 ...… 查看全部问答> |
|
下载 (108.1 KB) 2011-1-19 15:42 我现在在做微功耗,用的是待机模式,我在看微功耗的待机模式的启动项中,有个启动方式是IWDG,但是这中启动方式我没有办法跟踪,我在手册中看到可以检测复位标记来判断是什么方式复位 ...… 查看全部问答> |
|
#include<msp430x44x.h> interrupt[TIMERA0_VECTOR] void Timer_A(void) { ~~~ } void InitSystem(void) { ~~~ //TIME_A TACTL=ID1+TASSEL1+TACLR+ ...… 查看全部问答> |
|
雷区1、旧货陈货 把使用或销售剩下、堆积的电子元器件产品,收购过来,归类卖出。其中,超过保质期或存储条件不合格的,引脚往往会氧化、发黑,导致可焊性差、无法焊接等严重质量问题; 雷区威力:★★★☆ & ...… 查看全部问答> |




