金牌会员
- 积分
- 1279
- 金钱
- 1279
- 注册时间
- 2017-7-18
- 在线时间
- 257 小时
|
1金钱
在学习6ull的裸机中断和EPIT中断时,发现只要把中断优先级设置为31就会出错,中断无法执行,设置为30或者其他优先级时可以正常执行。程序没有死机,只是设置了31优先级的这个中断没法正常执行。
//EPIT1的中断配置
//配置对应的中断
GIC_SetPriority(EPIT1_IRQn, 31); //设置优先级为31
GIC_EnableIRQ(EPIT1_IRQn); //使能对应的中断 GPIO1->IO18
system_register_irqhandler(EPIT1_IRQn,EPIT1_irq_handler,NULL);//注册对应的中断函数
EPIT1->CR |= (1 << 0); //EPIT1 ENABLE
-------------------------------------------------------------------------------------------------------------------------
/*
* GIC初始化
* 为了简单使用GIC的group0
*/
FORCEDINLINE __STATIC_INLINE void GIC_Init(void)
{
uint32_t i;
uint32_t irqRegs;
GIC_Type *gic = (GIC_Type *)(__get_CBAR() & 0xFFFF0000UL);
irqRegs = (gic->D_TYPER & 0x1FUL) + 1;
/* On POR, all SPI is in group 0, level-sensitive and using 1-N model */
/* Disable all PPI, SGI and SPI */
for (i = 0; i < irqRegs; i++)
gic->D_ICENABLER[i] = 0xFFFFFFFFUL;
/* Make all interrupts have higher priority */
gic->C_PMR = (0xFFUL << (8 - __GIC_PRIO_BITS)) & 0xFFUL;
/* No subpriority, all priority level allows preemption */
gic->C_BPR = 7 - __GIC_PRIO_BITS;
/* Enable group0 distribution */
gic->D_CTLR = 1UL;
/* Enable group0 signaling */
gic->C_CTLR = 1UL;
}
GIC_Init中也没有改过,gic->C_BPR=2,应该对应的是5位的抢占优先级,不知道为什么设置31的中断优先级不可以。知道的分享一下,还是我别的地方有问题。
|
|