我去过我需要比注释更详细地了解此代码,soemone可以帮助吗?

void vicInstallIRQhandler(pVoidFunc_t pISR, uint32_t priority,
                      uint32_t vicIntSource) {

 // store the handler address in the correct slot in the vector

 *(&VICVECTADDR0 + vicIntSource) = (unsigned long)pISR;

 // set the priority of the interrupt for this slot

 *(&VICVECTPRIORITY0 + vicIntSource) = priority;

 // clear FIQ select bit i.e. assign this interrupt source to IRQ

 VICINTSELECT &= ~(1UL << vicIntSource);

 // enable the interrupt

 VICINTENABLE |= (1UL << vicIntSource);
}

最佳答案

实际上,这些评论还不错。但是,我尝试解释更多。
总体而言,该函数设置了中断处理程序,该中断处理程序由指向实际服务例程pISR的指针,其优先级以及(物理)中断的索引来描述。

在您的CPU上,地址和相应的优先级分别存储在表中,起始地址为VICVECTADDR0VICVECTPRIORITY0。通过将中断索引添加到基址中,可以找到正确的表条目。

VICINTSELECTVICINTENABLE是位向量,其中中断索引所寻址的位被置位和未设置。 VICINTSELECT的含义是告诉CPU存在用于中断的服务例程(清除位)。 VICINTENABLE的含义是告诉CPU中断未被屏蔽,即被允许(设置位)。

希望我的解释有所帮助。

09-06 17:55
查看更多