【问题标题】:Realtime C programming vicInstallHandler need help to understand实时C编程vicInstallHandler需要帮助理解
【发布时间】:2013-01-04 17:15:41
【问题描述】:

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

【问题讨论】:

  • 这真的取决于您设备的规格。 cmets 很能说明问题。也许您应该针对您不了解的部分发布更具体的问题

标签: c vector real-time handler irq


【解决方案1】:

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

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

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

我希望我的解释能有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 2014-11-25
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2011-05-04
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多