我去过我需要比注释更详细地了解此代码,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上,地址和相应的优先级分别存储在表中,起始地址为VICVECTADDR0
和VICVECTPRIORITY0
。通过将中断索引添加到基址中,可以找到正确的表条目。VICINTSELECT
和VICINTENABLE
是位向量,其中中断索引所寻址的位被置位和未设置。 VICINTSELECT
的含义是告诉CPU存在用于中断的服务例程(清除位)。 VICINTENABLE
的含义是告诉CPU中断未被屏蔽,即被允许(设置位)。
希望我的解释有所帮助。