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, 0x00);

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

补充:

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

 

posted @ 2024-07-17 14:28  SweetTea_lllpc  阅读(2)  评论(0编辑  收藏  举报