RISCV内核中断优先级/Priority

一、讲解

中断优先级分为抢占优先级和响应优先级。配置参数越小,则说明其优先级别越高。

  • 抢占:是指可以打断其他中断函数的属性。出现该属性时会出现中断嵌套;
  • 响应:是指抢占优先级相同情况下,则优先执行响应优先级高的中断;

二、举例

序号 中断名称 抢占优先级
1 TMR1 1
2 TMR2 2
3 UART0 3
4 UART1 4

如上表,TMR2抢占优先级低于TMR1。如果在执行TMR2中断服务函数时,则TMR1中断可以打断TMR2中断。同理,TMR2可以打断正在执行的UART0/UART1中断。

三、操作

①中断嵌套

启动文件startup.s默认有开启,建议不要手动关闭。

/* 打开嵌套中断、硬件压栈功能 */
li t0, 0x3
csrw 0x804, t0

②配置嵌套

/*******************************************************************************
* @fn PFIC_SetPriority
*
* @brief Set Interrupt Priority
*
* @param IRQn - Interrupt Numbers
* @param priority - bit7: pre-emption priority
* bit6-bit4: subpriority
*/
RV_STATIC_INLINE void PFIC_SetPriority(IRQn_Type IRQn, uint8_t priority)
{
PFIC->IPRIOR[(uint32_t)(IRQn)] = priority;
}

中断优先级配置接口函数:PFIC_SetPriority(IRQn_Type IRQn, uint8_t priority)

参数1是配置需要操作的中断函数。

参数2是配置抢占和响应优先级。根据注释,只有高4位具有意义,低4位无意义。其中高4位的最高位代表抢占优先级,高4位的次3位代表响应优先级。配置为0则代表优先级最高。

例如配置UART0/UART1的抢占优先级最高,且UART0的响应优先级高于UART1:

PFIC_SetPriority(UART0_IRQn, 0x00);

PFIC_SetPriority(UART1_IRQn, 0x10);

这样配置,则UART0/UART1可以打断TMR1/TMR2中断。

补充:

stm32的抢占优先级和响应优先级(也叫子优先级)

 

posted @   SweetTea_lllpc  阅读(294)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
点击右上角即可分享
微信分享提示