中级会员
- 积分
- 378
- 金钱
- 378
- 注册时间
- 2017-11-29
- 在线时间
- 135 小时
|
1金钱
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 //中断最低优先级
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 //系统可管理的最高中断优先级
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
/*-----------------------------------------------------------*/
static portFORCE_INLINE void vPortRaiseBASEPRI( void )
{
uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;
__asm
{
/* Set BASEPRI to the max syscall priority to effect a critical
section. */
msr basepri, ulNewBASEPRI
dsb
isb
}
}
/*-----------------------------------------------------------*/
左老师:
240个外部中断优先级设置寄存器(0xE000_E400 – 0xE000_E4EF)我看到确实是8位,即NVIC_Type结构体里面的成员变量“__IO uint8_t IP[240];”,高四位是用于设置优先级,这方面的描述很清楚。
BASEPRI这个寄存器也是高四位用来设置优先级的吗?(和240个外部中断优先级设置寄存器一样都是高四位有效?)在M3内核文档里怎么没有明确这么说呢?
这个寄存器是多少位的(视频讲的时候隐含的意思就是8位)?我想知道M3内核文档里怎么没有看到说明呢?
|
最佳答案
查看完整内容[请看2#楼]
BASEPRI是根据8位的,具体那几位有效取决于实现的优先级位数,比如STM32是4位的,所以BASEPRI就是高四位有效。《ARM Coretx-M3和Coretx-M3权威指南》里面有讲的
|