我之前调试好了Stop模式的闹钟唤醒和外部中断(PA0)按键唤醒,现在我只用闹钟唤醒,循环睡眠加唤醒成功后,加入了SysTick初始化,也就是打开了SysTick之后,就进入不了Stop模式。运行到那个函数,能进去,都能正常运行下去,但是就是进入不了睡眠模式,开始以为是标志没清除的原因,在Stop之前加入了清除所有中断
[mw_shl_code=c,true]EXTI_ClearITPendingBit(0x7ffff);
RTC_ClearITPendingBit(0x07);
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); [/mw_shl_code]
还是不行。
但是一旦注释掉SysTick之后就不会有这个情况。
SysTick初始化的代码:
[mw_shl_code=c,true]void ARC_SysTick_Init()
{
if (SysTick_Config(SystemCoreClock / 1000))
{
/* Capture error */
while (1);
}
}
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
if(IRQn < 0) {
SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */
else {
NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */
}
[/mw_shl_code]
例程里面的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>