0

我去过我需要比评论更详细地理解这段代码,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);
}
4

2 回答 2

0

其实评论还不错。但是,我尝试解释更多。总的来说,该函数设置中断处理程序,由指向实际服务程序的指针pISR、它的优先级和(物理)中断的索引来描述。

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

VICINTSELECT并且VICINTENABLE是位向量,其中由中断索引寻址的位被设置和取消设置,分别。的语义VICINTSELECT是告诉 CPU 存在中断服务程序(清除位)。的语义VICINTENABLE是告诉 CPU 中断没有被屏蔽,即启用(设置位)。

我希望我的解释有点帮助。

于 2013-01-04T22:31:53.233 回答
-1

@Wrekaar 是什么让你认为它会是逐字记录的?在我们复制粘贴之前,我们可能会在 abit 周围处理措辞(笑话)

于 2013-01-07T03:09:26.420 回答