完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如图,cpu进入低功耗后,想用串口或外部中断唤醒CPU,那么将35和39引脚分别配置外外部中断2和外部中断4, EiCfg(EXtiNT4,INT_EN,INT_FALL);//外部中断4, NVIC_EnableIRQ(EINT4_IRQn); EiCfg(EXTINT2,INT_EN,INT_RISE);//外部中断2, NVIC_EnableIRQ(EINT2_IRQn); 可是实际工作时,串口可以唤醒CPU,返回相应指令, 但外部中断4 ,却无法唤醒CPU。 不知道问题出在哪里呢? |
|
相关推荐
6个回答
|
|
cn datasheet P3/24 概述部分
休眠模式(内部唤醒定时器有效),此时能耗仅为4 µA。在休眠模式下,诸如外部中断或内部唤醒定时器等外设可以唤醒该器件。该模式可让器件在功耗极低的情况下运行,同时仍然响应外部异步或周期事件。 Q1: 是处在 模式5 休眠模式? 按UG-367_cn “ADuCM360/ADuCM361硬件用户指南” P16/176 表12. PWRMOD寄存器位功能描述 MOD位是101? Q2:是在ISR中断代码中,将MCU送入休眠模式的? 当处理器处在中断处理程序中时,若进入功耗模式1至功耗模式5,则只能通过复位或更高优先级中断源退出关断模式 |
|
|
|
dsdfshf 发表于 2018-8-9 07:32 Q1:进入中断的程序是通过官方光盘里的软件Elves编写的,如下 PwrCfg(PWRMOD_MOD_HIBERNATE); 是官方封装好的函数: /** @brief int PwrCfg(int iMode) ========== Sets MCU power mode. @param iMode :{PWRMOD_MOD_FULLACTIVE,PWRMOD_MOD_MCUHALT,PWRMOD_MOD_PERHALT,PWRMOD_MOD_SYSHALT,PWRMOD_MOD_TOTALHALT,PWRMOD_MOD_HIBERNATE } - 0 or PWRMOD_MOD_FULLACTIVE for fully active mode. - 1 or PPWRMOD_MOD_MCUHALT to halt the MCU. - 2 or PWRMOD_MOD_PERHALT to halt the MCU and clock to peripherals. - 3 or PWRMOD_MOD_SYSHALT to halt the MCU, and clock to memory and DMA. - 4 or PWRMOD_MOD_TOTALHALT For DEEPSLEEP mode - 5 or PWRMOD_MOD_HIBERNATE For DEEPSLEEP mode @note @return 1.**/int PwrCfg(int iMode){ int index = 0; if (iMode > 5) // Check for invalid sleep mode value iMode = 0; if ((iMode == 4) || (iMode == 5)) { SCB->SCR = 0x04; // sleepdeep mode - write to the Cortex-m3 System Control register bit2 } pADI_PWRCTL->PWRKEY = 0x4859; // key1 pADI_PWRCTL->PWRKEY = 0xF27B; // key2 pADI_PWRCTL->PWRMOD = iMode; for (index=0;index<2;index++); __WFI(); for (index=0;index<2;index++); return 1;} Q2:中断是在主程序中进入的,并不是在中断里。 |
|
|
|
我预想的程序执行流程是如下图的:
也就是初始化进入低功耗之后,可以通过串口发送数据利用外部中断2唤醒CPU,来执行功能2,执行后进入低功耗; 或是当外部时钟定时完成后产生外部中断4,来唤醒CPU,之后执行功能1,执行后进入低功耗。 但是现在的程序执行流程确实这样的: 进入低功耗后, 情况1,此时定时尚未完成,串口发送数据产生外部中断2,则执行功能2,之后进入低功耗; 情况2,此时定时完成,理论上已经产生了外部中断,但是却没有唤醒CPU, 这时串口发送数据产生外部中断2,却紧接着进入外部中断4,接着执行了功能1,之后进入低功耗。 也就是程序中只有外部中断2唤醒了CPU。 但是我看了很多遍程序,认为程序的逻辑上应该是按照图1来执行的。 |
|
|
|
|
|
|
|
中断管脚并没有配置为其他用途。当程序只用中断4唤醒,无法唤醒CPU。 因为我之前买的aducm360的官方的板子,是试过这个低功耗唤醒的,所以现在问题应该是出在我的硬件或者软件上, 而不是芯片本身。 但是并未找到原因。 |
|
|
|
evpt 发表于 2018-8-9 08:20 先查硬件,用示波器观察一下是否产生了对应的下降沿。如果有的话,那就重点查一下软件。 |
|
|
|
只有小组成员才能发言,加入小组>>
979 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1374 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1934 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4265 浏览 2 评论
9053 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1500浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1690浏览 2评论
979浏览 2评论
1664浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1376浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 18:12 , Processed in 0.855005 second(s), Total 88, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号