沁恒蓝牙MCU的中断优先级配置机制

目录

沁恒的RISC-V内核中,常见于BLE芯片中的有青稞V3和V4系列。这两个内核中,均有支持中断优先级配置的功能。

根据青稞V4手册、CH592手册和EVT,有如下几点信息:

1、可配置最高位第7位的抢占优先级,以及第6、5位的响应优先级。

2、CH592在.s启动文件中启用了中断嵌套功能,支持2级中断嵌套(主函数被打断->部分执行1级中断函数;1级中断函数被打断->执行2级中断函数)。

3、CH592的3.3章节中有默认优先级(自然优先级)。

4、EVT工程中有中断优先级配置接口为PFIC_SetPriority()。

 

笔者有两个自问自答:

①问:配置“PFIC_SetPriority(UART1_IRQn, 0);”后,串口1的中断优先级会最高吗?

答:不会。调用PFIC_SetPriority(UART1_IRQn, 0)后,串口1的中断优先级与默认优先级无异。

②问:用户层代码中仅配置串口1的中断优先级,“PFIC_SetPriority(UART1_IRQn, 1<<5);”后,串口1的中断优先级是=1了,比TMR0的默认优先级=2还高了吗?

答:相反,串口1的中断优先级会更低,比3.3章节表格中优先级最低的WDOG_BAT中断,还要低。

 

一言以蔽之,默认的自然优先级,与可配置的优先级,要组合起来作为UINT8数据来对比。

调用PFIC_SetPriority(IRQn_Type, X<<5)后,的实际优先级 为: (X<<5) | 默认优先级。

①高3位的默认优先级为0,故只要配置了IRQn_Type中断的高6/5位的其中任意一位为1,IRQn_Type的优先级就比3.3章节表格中所有的默认优先级还要低了。

②3个可配置位,故0≤X≤7。

 

以下为应用代码中配置了部分代码后的优先级。表格越上方的中断优先级越高。

 

posted @ 2025-03-31 17:31  JayWell  阅读(261)  评论(0)    收藏  举报