前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全志XR806芯片 如何修改中断优先级?

全志XR806芯片 如何修改中断优先级?

作者头像
阿志小管家
发布2024-02-02 15:59:46
720
发布2024-02-02 15:59:46
举报

1.问题背景 XR809/XR871/XR808/XR872上如何修改中断的优先级。

2.问题描述 很多模块都会使用到中断,但中断的优先级在模块的初始化或者在使能中断时就设定了,那么如何修改中断的优先级呢?

3.解决办法

3.1 中断是如何设定优先级的 中断的优先级是在下面这个函数设定的,每个带中断的模块都会调用到这个函数 HAL_NVIC_ConfigExtIRQ(GPADC_IRQn, GPADC_IRQHandler, NVIC_PERIPH_PRIO_DEFAULT);(第二个参数代表的是优先级) 这个HAL_NVIC_ConfigExtIRQ会调用到HAL_NVIC_SetPriority函数 HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)函数的2个参数分别是中断类型以及中断优先级。 最终是HAL_NVIC_SetPriority进行了中断优先级的设定的。

3.2如何设定中断优先级 (1).本来修改模块的优先级通过修改这个模块的HAL_NVIC_ConfigExtIRQ函数即可,但大部分模块的初始化函数都已经rom化了,直接修改rom化的初始化函数是无法生效的。

(2).所以首先我们需要找到模块中哪里调用了HAL_NVIC_ConfigExtIRQ函数,然后在应用层代码中添加HAL_NVIC_SetPriority函数重新设定优先级 例如: GPIO模块在HAL_GPIO_EnableIRQ模块中调用到了HAL_NVIC_ConfigExtIRQ函数,那么需在上层应用代码中再次调用HAL_NVIC_SetPriority 函数来进行重新设定中断的优先级

代码语言:javascript
复制
HAL_GPIO_EnableIRQ        --->   这个接口里面的代码已经rom化,不能进行优先级设定
HAL_NVIC_SetPriority      --->   重新设定优先级,覆盖HAL_GPIO_EnableIRQ函数里设定的默认值

ADC模块在HAL_ADC_Init模块中调用到了HAL_NVIC_ConfigExtIRQ函数,那么需在上层应用代码中再次调用HAL_NVIC_SetPriority 函数来进行重新设定中断的优先级

代码语言:javascript
复制
HAL_ADC_Init              --->   这个接口里面的代码已经rom化,不能进行优先级设定
HAL_NVIC_SetPriority      --->   重新设定优先级,覆盖HAL_ADC_Init函数里设定的默认值

(3).需要注意HAL_NVIC_SetPriority函数的2个参数

代码语言:javascript
复制
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
IRQn_Type IRQn     --->   中断类型,在应用层需要根据具体的模块进行填写,例如GPIO需要填GPIOA_IRQn/GPIOB_IRQn,ADC需要填GPADC_IRQn
uint32_t priority  --->   优先级,根据具体所需进行填写,数字越小优先级越低

原贴链接:https://bbs.aw-ol.com/topic/724

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档