Regarding the tickless idle implementation for the Cortex M3, I notice that it calls in this sequence:
__asm volatile( “cpsid i” ); //disable interrupt
if( xModifiableIdleTime > 0 )
__asm volatile( “wfi” );
configPOST_SLEEP_PROCESSING( xExpectedIdleTime );
__asm volatile( “cpsie i” );//enable interrupt
Why disable interrupt globally before goes to the “wfi” mode and only re-enable it after the “wfi” is woken up ?
Will this mean that the “wfi” can’t be woken up by any other interrupt (other than systick)?
Currently, I have usb audio enabled. This means that the usb interrupt comes at 1 msec interval and I keep on missing the interrupt once I enable the tickless idle option. What’s the best way to configure this tickless idle to work together with this kind of high frequency interrupt?
I don’t think tickless idle is appropriate if you have a 1ms interrupt because presumably the 1ms interrupt is either faster than or the same speed as the tick interrupt anyway so you cannot gain anything by turning the tick off.
Hi Dave, got it. Is there a way to enable tickless idle when the USB disconnected and disable it when the USB connected without changing the freertos core code? Or do you think this is recommended way of handling this use case?