This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Sensor Control 中如何使多个中断触发到一个event handler code

Sensor control 中

我想通过一个 event handler code 处理两个GPIO 的interrupt ,

我了解到的在初始化的时候可以先配置两个GPIO 的中断,如调用 

evhSetupGpioTrigger(0, AUXIO_I_BUTTON, BUTTON_PRESSED, EVH_GPIO_TRIG_ON_MATCH);  

evhSetupGpioTrigger(0, AUXIO_I_BUTTON2, BUTTON_PRESSED, EVH_GPIO_TRIG_ON_MATCH);

两个中断都触发event index 0 。

但是我再event handler A code 中,如何判断中断源是哪个呢?

我了解到,可以调用 evhGetActiveTrigger( evindex )这个函数, 

但是evindex 怎和 Gpio 一 一 对应的 呢?

我在Sensor Control 的debug 中看到了evhGetActiveTrigger 的汇编代码

ld    R0,[#fwCtrlInt/bvActiveEvent]  

我也没有找到 fwCtrlInt. bvActiveEvent 的解释,

麻烦帮忙解答一下吧!

  • 同一个index无法确定触发源是哪个
    不同index可以看看
    evhGetActiveTrigger
    Prototype: evhGetActiveTrigger(bvEvent)
    This procedure can be called from event handler code to determine which event index triggered the event handler code.
    Return value(s)
    bvEvent - Bit-vector indicating the event index that triggered the event handler code

  • 没有理解你说的不同的index 是什么意思, 我现在是两个GPIO的中断, 不能算做两个index吗?
    另外这个evhGetActiveTrigger 函数, 我没有理解 bvEvent 和 中断源的关系,这个解释也不太理解。 能帮忙举个例子吗?
  • index就是evhSetupGpioTrigger(0, AUXIO_I_BUTTON, BUTTON_PRESSED, EVH_GPIO_TRIG_ON_MATCH) 中的0,
    你可以看Sensor Controller help中的GPIO interrupt章节
  • evhSetupGpioTrigger(0, AUXIO_I_BUTTON_PRESSED, EVH_GPIO_TRIG_ON_MACTH)

    这个函数里的0, 是不是就是和下图中的 event index 0 是对应的?

    按照这样子的理解, 多个IO 可以都触发 event index 0 , 但是在event handler A code 中就不能区分是哪个IO 触发的中断了。

    但是如果是这样子的话, evhGetActiveTeigger() 存在的意义是什么呢?

    This procedure can be called from event handler code to determine which event index triggered the event handler code.

    本身event handler code 已经和event index 一 一 对应的。 

  • evhGetActiveTeigger() 是用来确定是哪个event index触发了 event handler code,可以返回不同的index number