




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
STM32 中断优先级以及全局允许和禁止优先级可以被分为高低两个位段,分别是抢占优先级和亚优先级 Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位 AIRC 中 PRIGROUP 的值规定了设置和确定每个外部中断通道优先级的格式。例如,在上面将 0x05 写入了 AIRC 中 PRIGROUP,也就规定了当前系统中只能有 4 个抢先式优先级,相同的抢先式优先级下还可以有 4 个不同级别的子优先级,他们分别为: 位7:6 位5:4 位3:0 00 0 号抢先优先级 00 0 号子优先级 无效 01 1 号抢先优先级 01 1 号子优先级 无效 10 2 号抢先优先级 10 2 号子优先级 无效 11 3 号抢先优先级 11 3 号子优先级 无效 在CortexM3的优先级分配中,较低的优先级值具有较高的优先级。数值小的优先级高, 数值大的优先级低 a 只能高抢先优先级的中断可以打断低抢先优先级的中断服务,构成中断嵌套。 b 当 2(n)个相同抢先优先级的中断出现,它们之间不能构成中断嵌套,但 STM32 首先响应子优先级高的中断。 c 当 2(n)个相同抢先优先级和相同子优先级的中断出现,STM32 首先响应中断通道所对应的中断向量地址低的那个中断。 可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:NVIC_PriorityGroup_0 = 选择第0组NVIC_PriorityGroup_1 = 选择第1组NVIC_PriorityGroup_2 = 选择第2组NVIC_PriorityGroup_3 = 选择第3组NVIC_PriorityGroup_4 = 选择第4组 第0组:所有4位用于指定响应优先级 ( 从不嵌套 )第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级第4组:所有4位用于指定抢占式优先级 ( 最大的嵌套可能性 ) ( 类似于 STR710 )subpriority开始的位号 : 如果从 7 号开始 那么没有 pre-emption priority, b7 b6 b5 b4 全部为 subpriority如果从6 号开始 那么 b7 为pre-emption priority, b6 b5 b4 为 subpriority如果从3 号开始 那么 b7 b6 b5b4为pre-emption priority,没有 subprioritypre-emption priority : subpriority ( STM32 共计 4 位 ) 所以无论如何配置做多只能有 16 级, 数值最小的具有最高的优先级 在程序中合理按排中断优先级可以达到具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。要注意的几点是:1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;2)抢占式优先级别相同的中断源之间没有嵌套关系;3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。#define NVIC_PriorityGroup_0 (uint32_t)0x700) /*! 0 bits for pre-emption priority 4 bits for subpriority */#define NVIC_PriorityGroup_1 (uint32_t)0x600) /*! 1 bits for pre-emption priority 3 bits for subpriority */#define NVIC_PriorityGroup_2 (uint32_t)0x500) /*! 2 bits for pre-emption priority 2 bits for subpriority */#define NVIC_PriorityGroup_3 (uint32_t)0x400) /*! 3 bits for pre-emption priority 1 bits for subpriority */#define NVIC_PriorityGroup_4 (uint32_t)0x300) /*!AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup; /* * brief Initializes the NVIC peripheral according to the specified * parameters in the NVIC_InitStruct. * param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains * the configuration information for the specified NVIC peripheral. * retval None */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 NVIC_IRQChannelSubPriority & tmpsub; tmppriority = tmppriority IPNVIC_InitStruct-NVIC_IRQChannel = tmppriority; /* Enable the Selected IRQ Channels -*/ NVIC-ISERNVIC_InitStruct-NVIC_IRQChannel 0x05 = (uint32_t)0x01 NVIC_IRQChannel & (uint8_t)0x1F); else / if (NVIC_InitStruct-NVIC_IRQChannelCmd = DISABLE) /* Disable the Selected IRQ Channels -*/ NVIC-ICERNVIC_InitStruct-NVIC_IRQChannel 0x05 = (uint32_t)0x01 NVIC_IRQChannel & (uint8_t)0x1F); stm32如何开关中断在STM32/Cortex-M3中是通过改变CPU的当前优先级来允许或禁止中断。PRIMASK位:只允许NMI和hard fault异常,其他中断/异常都被屏蔽(当前CPU优先级=0)。FAULTMASK位:只允许NMI,其他所有中断/异常都被屏蔽(当前CPU优先级=-1)。在STM32固件库中(stm32f10x_nvic.c和stm32f10x_nvic.h) 定义了四个函数操作PRIMASK位和FAULTMASK位,改变CPU的当前优先级,从而达到控制所有中断的目的。下面两个函数等效于关闭总中断:void NVIC_SETPRIMASK(void);void NVIC_SETFAULTMASK(void);下面两个函数等效于开放总中断:void NVIC_RESETPRIMASK(void);void NVIC_RESETFAULTMASK(void);上面两组函数要成对使用,不能交叉使用。例如:第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备生产检修管理制度
- 设备缺陷异常管理制度
- 设备验收安装管理制度
- 设计公司薪资管理制度
- 设计质量安全管理制度
- 诊所人员消毒管理制度
- 诊所科室人员管理制度
- 试剂使用安全管理制度
- 财务统计部门管理制度
- 财政ukey管理制度
- 中国Linux软件行业市场发展现状及前景趋势与投资分析研究报告(2024-2030版)
- 探究大象耳朵秘密:2025年课堂新视角
- 《新能源乘用车二手车鉴定评估技术规范 第1部分:纯电动》
- 下沉式广场结构施工方案
- 《加坡的教育制度》课件
- Windows操作系统及应用期末测试试题及答案
- 《交通事故车辆及财物损失价格鉴证评估技术规范》
- 北师大版二年级数学下册各单元测试卷
- 招生就业处2025年工作计划
- 【MOOC】外国文学经典导读-西北大学 中国大学慕课MOOC答案
- 医院供电合同
评论
0/150
提交评论