如何理解Zynq Book中的中断处理示例

时间:2017-06-19 04:16:49

标签: c interrupt-handling zynq

cross posting抱歉,但没有人回复一个月。这可能是一个基本的问题,但我来自“大”'来自嵌入式/ fpga(作为一种爱好)。计算机和我无法理解来自book的示例代码:

void BTN_Intr_Handler(void *InstancePtr)
{
    // Disable GPIO interrupts
    XGpio_InterruptDisable(&BTNInst, BTN_INT);
    // Ignore additional button presses
    if ((XGpio_InterruptGetStatus(&BTNInst) & BTN_INT) !=
            BTN_INT) {
            return;
        }
    btn_value = XGpio_DiscreteRead(&BTNInst, 1);
    // Increment counter based on button value

    led_data = led_data + btn_value;

    XGpio_DiscreteWrite(&LEDInst, 1, led_data);
    (void)XGpio_InterruptClear(&BTNInst, BTN_INT);
    // Enable GPIO interrupts
    XGpio_InterruptEnable(&BTNInst, BTN_INT);
}
  • 我希望对于这样简单的代码,它只是上半部分。但是,上半部分仅在IRQ模式下执行且中断被禁用,因此不需要禁用中断。 OTOH如果我们处于下半部分,则在按钮中断和禁用中断之间存在竞争 - 除非我们将其用作led_data的互斥锁。
  • 以类似的方式,为什么如果GetStatus返回,我们不会重新启用中断?

0 个答案:

没有答案