CYW43907 GPIO Wake from sleep

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
NiMc_1688136
Level 5
Level 5
10 sign-ins 50 questions asked 10 solutions authored

I am running the CYW43907 in sleep mode (not deep sleep).

How can i use a GPIO pin ( WICED_GPIO_6) as a wake source? I have the pin externally pulled high with a 47K resistor and attempting to pull low through a button but no luck.

    wiced_gpio_init(WICED_GPIO_6, INPUT_HIGH_IMPEDANCE );

    wiced_gpio_input_irq_enable(WICED_GPIO_6, IRQ_TRIGGER_FALLING_EDGE, gpio_callback, NULL); /* Setup interrupt */

Does not work in sleep mode, it works well in normal mode.

If i add

wiced_gpio_deepsleep_wakeup_enable( WICED_GPIO_6, IRQ_TRIGGER_FALLING_EDGE );

It still does not appear to wake up, but this also does not provide any callback mechanism to unblock a task if needed.

WICED SDK 6.2.1

0 Likes
1 Solution

Yes, thanks Priya.

For others, the following code is correct as a sleep wakeup.

    wiced_gpio_init(WICED_GPIO_6, INPUT_HIGH_IMPEDANCE );

    wiced_gpio_input_irq_enable(WICED_GPIO_6, IRQ_TRIGGER_FALLING_EDGE, gpio_callback, NULL); /* Setup interrupt */

My problem was that in my app code, i was changing the pin to an output while active for another use. What I did not know, inside of wiced_gpio_init, the ISR is disabled and the callback is cleared to NULL. This is why the input interrupt and wake was not working.

View solution in original post

3 Replies
PriyaM_16
Moderator
Moderator
Moderator
250 replies posted 100 replies posted 50 replies posted

Based on the discussion in the mycase system, it appears that you have resolved the issue.

Please let me know if you are still facing problem

0 Likes

Yes, thanks Priya.

For others, the following code is correct as a sleep wakeup.

    wiced_gpio_init(WICED_GPIO_6, INPUT_HIGH_IMPEDANCE );

    wiced_gpio_input_irq_enable(WICED_GPIO_6, IRQ_TRIGGER_FALLING_EDGE, gpio_callback, NULL); /* Setup interrupt */

My problem was that in my app code, i was changing the pin to an output while active for another use. What I did not know, inside of wiced_gpio_init, the ISR is disabled and the callback is cleared to NULL. This is why the input interrupt and wake was not working.

From my observations, if i add a GPIO toggle around sleep activity, if the processor is sleeping while a low signal is received on the gpio then the interrupt is not processed. If at any point the processor is awaken while the signal is low, then the EDGE interrupt is triggered.

Seems that the edge interrupt is really a sampled level interrupt and only happens when the processor is awake.

0 Likes