请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C123GH6PGE 主题中讨论的其他器件:TM4C123
正在将代码库移植到新硬件。 新硬件更好地利用休眠模块并关闭 TM4C123电源。
所发生的情况是、当应用程序进入睡眠状态时、它会再次唤醒。 问题的原因似乎是"写入完成"中断。 我曾尝试屏蔽该中断、但不是以正确的方式执行、就是重新启用了其他中断。
if (ROM_HibernateIsActive ()) { uiStatus = ROM_HibernateIntStatus (false); //读取状态以确定唤醒原因。
ROM_HibernateIntClear (uiStatus); //清除休眠中断
(笑声) 否则、如果(uiStatus & HIBERNATE_INT_WR_COMPLETE)// 0x00000010 <<--此位有效 { uprintf ("\n 由 HIB INT WR 完成唤醒"); SYS_DATA.STACD=空闲;//转到主菜单 } ...
我要寻找的是处理 EEPROMProgram 的正确方法。 请参阅下面的 EEPROMProgram 语句、是否有方法轮询'Write Complete'? 有人能给我举个例子吗? 谢谢
//让消息输出
UARTFlushTx(0);
ROM_SysCtlDelay (millimonde*250);
console_off();
//在休眠之前保存 sys_data 变量!
//将 sys_data 结构复制到 EEPROM 中。 最后一个参数确保字节数是4
if (EEPROMProgram ((uint32_t*)&sys_data、0x400、(sizeof (sys_data)+ 3)&~3))
{
uprintf ("存储系统数据时出错。\n");
error_store ("存储系统数据时出错。");
return;
}<-<-<-<-<-<-<-<-<
在这里应该放置什么代码来等待'Write Complete'
//清除任何挂起的中断
ulStatus = ROM_HibernateIntStatus (0);
ROM_HibernateIntClear (ulStatus);
ROM_HibernateRTCTrimSet (0x7FFF);//确保将 TRIM 设置为默认值以防止锁定(请参阅勘误表)
//禁用 GPIOLETE 控制集
(GPORTEON);
//告诉休眠模块我们想要睡眠
ROM_HibernateRequest ();
ROM_SysCtlDelay (毫秒);//给休眠时间。
//不应该到达这一点,uprintf 出错
("\n\n\n Hybernation 错误!\n\n");
error_store (" Hybernation 错误");