沁恒蓝牙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。
以下为应用代码中配置了部分代码后的优先级。表格越上方的中断优先级越高。

                    
                
                
            
        
浙公网安备 33010602011771号