5秒后页面跳转
FAQ0111 PDF预览

FAQ0111

更新时间: 2024-11-13 14:58:19
品牌 Logo 应用领域
雅特力 - ARTERY /
页数 文件大小 规格书
4页 434K
描述
应用有时会遇到无法正常进入低功耗的问题?

FAQ0111 数据手册

 浏览型号FAQ0111的Datasheet PDF文件第2页浏览型号FAQ0111的Datasheet PDF文件第3页浏览型号FAQ0111的Datasheet PDF文件第4页 
代码异常跳过__WFI()命令问题说明  
FAQ0111  
常见问题解答  
代码异常跳过__WFI()命令问题说明  
Questions应用有时会遇到无法正常进入低功耗的问题?  
具体表现为执行__WFI()命令进入低功耗时无唤醒条件的情况下统却直接跳过该命令,  
代码继续向下执行的现象。  
Answer:  
本文将采用低功耗的 Standby 模式为例进行分析及说明。  
【问题根本原因:  
进入低功耗调用的__WFI()命令实质为等待中断,若在执行__WFI()命令时,NVIC 中断内已有处于挂起且  
未被响应的中断的话,代码就会跳过__WFI 命令继续向下执行。  
此为 ARM 内核的特性,所有以 ARM 内核为基础设计的芯片均会存在此现象。  
【问题解法:  
在执行__WFI()前,清除 NVIC 中断内所有处于挂起状态的 NVIC pending 位。  
Analysis:  
本文将采用低功耗的 Standby 模式加上 USART1 的接收中断为例进行说明分析。  
【问题代码段示例(其中不参与本文说明的代码未贴出:  
crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK,TRUE); ///<①开启 PWR 时钟  
nvic_irq_enable(USART1_IRQn,0,0);  
usart_interrupt_enable(USART1, USART_RDBF_INT, TRUE); ///<③使能 USART1 接收中断  
__disable_irq(); ///<④禁止所有 NVIC 中断响应  
///<②使能 USART1 对应的 NVIC 中断  
while(usart_flag_get(USART1,USART_RDBF_FLAG) == RESET); ///<⑤等待 RDBF 标志置位  
pwc_standby_mode_enter(); ///<⑥进 Standby 的命令  
while(1);  
【问题逻辑分析:  
在实际运行时,当收到数据后  
1USART1 RDBF 标志被置位;  
2③的设定, USART1 对应的 NVIC pending 位会跟随 RDBF 置位;  
3②的设定,置位的 NVIC pending 位会跳转到对应的中断函数执行;  
4又因④的设定,代码实际不会跳转到中断函数执行,且 NVIC pending 位将被一直保持置位状态;  
5执行的时,因存在 NVIC pending 位处于置位状态,系统会直接跳过⑥内的__WFI();命令而继续  
向后执行,最终 PC 会停留到代码最后的 while(1)语句。  
【问题解法示例:  
2022.2.28  
1 页  
版本 2.0.0  

与FAQ0111相关器件

型号 品牌 获取价格 描述 数据表
FAQ0112 ARTERY

获取价格

编写代码利用CPU 去翻转IO 口,模拟PWM 输出,但是第一个波形的频率会不准?
FAQ0114 ARTERY

获取价格

在使用 Deepsleep 模式时,唤醒源在进入 Deepsleep 的过程中进来的话,将
FAQ0115 ARTERY

获取价格

在使用ARM Compiler version 6(AC6)时,可能会出现如下情形之一:
FAQ0116 ARTERY

获取价格

CAN 接收报文数据错位问题
FAQ0117 ARTERY

获取价格

配置XMC时序注意事项
FAQ0118 ARTERY

获取价格

USB虚拟串口发送数据上位机不能显示问题
FAQ0119 ARTERY

获取价格

当程序出现操作erase/program,然后后续都没有read 操作的情况
FAQ0120 ARTERY

获取价格

TMR 产生的DMA 请求如何清除?
FAQ0121 ARTERY

获取价格

TMR 在编码器模式下的Overflow 事件有何注意事项?
FAQ0122 ARTERY

获取价格

AT32_Bootloader_连接注意事项