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.

CC2640R2 如何实现多引脚电平变化事件唤醒系统



sensor controller 中的代码,如下设置唤醒代码,只有最后一句才能生效,也就是说只有一个引脚的电平变化才能唤醒系统。

evhSetupGpioTrigger(0, AUXIO_I_WAKE_PIN0, 1, EVH_GPIO_TRIG_ON_MATCH);

evhSetupGpioTrigger(0, AUXIO_I_WAKE_PIN1, 0, EVH_GPIO_TRIG_ON_MATCH);

CC2640R2 如何实现多引脚电平变化事件唤醒系统呢?

  • evhSetupGpioTrigger

    Prototype: evhSetupGpioTrigger(#evIndex, #auxio, #level, #type)

    Sets up a GPIO pin to generate an Event Handler Code trigger. Event indexes are mapped to event handlers in the task panel. The trigger is one-shot.

    The trigger occurs as soon as the GPIO pin matches or transitions to the selected level. The Event Handler Code block that matches the specified event index then starts when the Sensor Controller is idle or in standby mode.

    Parameter value(s)

    #evIndex - Event index to be triggered

    #auxio - The GPIO pin that shall generate the trigger (index of AUX I/O pin)

    #level - The pin level that shall generate the trigger (1 = high level / rising edge, 0 = low level / falling edge)

    #type - GPIO trigger type (EVH_GPIO_TRIG_ON_MATCH to trigger immediately on match, or EVH_GPIO_TRIG_ON_EDGE to wait for a transition to the level)

    参数配置是否正确?这两行代码,一个高电平触发一个低电平触发?

    evhSetupGpioTrigger(0, AUXIO_I_WAKE_PIN0, 1, EVH_GPIO_TRIG_ON_MATCH);

    evhSetupGpioTrigger(0, AUXIO_I_WAKE_PIN1, 0, EVH_GPIO_TRIG_ON_MATCH);

  • 不同的引脚有不同的触发电平,我需要至少12个引脚,用于唤醒系统。
    我看了CC2640R2 技术手册,好像最多3个引脚唤醒外设控制器,最多4个事件唤醒mcu。
  • CC2640R2 技术手册中, MCUWUSEL Register Field: WU1_EV : 取值 20h = Edge detect on any PAD, 意思是 任何引脚可以唤醒 外设控制器。
    估计需要直接对寄存器编程,才能实现任何引脚唤醒系统的功能。

    我在处理程序中,打印 AUXWUSEL 寄存器的值,发现是 reset后的缺省值,说明 evhSetupGpioTrigger(0, AUXIO_I_WAKE_PIN0, 1, EVH_GPIO_TRIG_ON_MATCH); 这种sc语句,并不影响 AUXWUSEL 寄存器。

    还是回到原来的问题,如何让任何一个引脚的电平变化,触发 SC中的 Event Hander A Code?

    打印寄存器语句:

    int tmp=HWREG(AON_EVENT_BASE+4);
    Log_info1("wuc2=%x",tmp);

  • 看寄存器描述,应该是支持任何引脚电平变化触发   Event Hander A Code 执行。

    找到了 evh_setup_gpio_trigger.prd 看看能否自己修改一下。 

    最好,TI 能够提供一个新的功能接口,支持任何引脚电平变化触发  Event Hander A Code 执行。比如 提供一个 evh_setup_gpio_trigger_v20.prd ,由用户添加到 C:\Program Files (x86)\Texas Instruments\Sensor Controller Studio\proc_defs 路径下,这样就不需要更新 SC 软件了。

  • 按照我的理解,可以选择任何引脚唤醒外设控制器,但是唤醒源控制在3个----The CC13x2/CC26x2 chip family supports up to 3 event triggers in total per project
  • 可以配置3个唤醒源,任何一个唤醒源,可以配置 任意引脚电平变化就触发(AUXWUSEL.WU0_EV=20h, Edge detect on any PAD),IOCFGx配置 EDGE_IRQ_EN, EDGE_DET,IE 这些位使能。然后 这个寄存器的 VECCFG1.VEC2_EV=0ch , 就是选择 EVSTAT0.AON_PROG_WU,来源于AUXWUSEL.WU0_EV, 这个寄存器的修改,是通过 修改 evh_setup_gpio_trigger.prd 文件实现的

    修改前:ld RS{temp0}, #((BV_EVCTL_VECCFG1_VEC2_EN | ((EVCTL_VECEVSEL_AUXIO0 + I{auxio}) << IOB_EVCTL_VECCFG1_VEC2_EV)) | ((I{level} == 0) << IOB_EVCTL_VECCFG1_VEC2_POL))
    修改后:
    ld RS{temp0}, #((BV_EVCTL_VECCFG1_VEC2_EN | (12)) | ((I{level} == 0) << IOB_EVCTL_VECCFG1_VEC2_POL))

    过程名称修改为: <proc_def name="evhSetupGpioTriggerV2" version="1.0.0">
    经过测试暂时没有发现问题。

    因为直接修改寄存器,可能与rtos的低功耗自动控制存在冲突。现在还没有调试低功耗,希望低功耗控制由应用程序控制,因为应用程序知道何时打开和关闭蓝牙,知道什么时候进入和退出 standby