编程 RTC 时间100ms、将 P3.7引脚拉至低电平、进入睡眠模式。
RTC 唤醒后、停止看门狗、将 P3.7引脚拉高、
测试 P3.7引脚低电平时间实际时间112.9ms、超过350us、如手册中所述
程序串行接口和某些程序屏蔽初始化后的测试低电平时间为104.4ms
当芯片唤醒时、首先初始化、然后解锁的外部晶振、并且等待时钟稳定的问题已经被消除。
void RTCinit()
{
//设置RTC为计数器模式,32KHZ外部晶振,32BIT计数值
RTC_C_initCounter(RTC_C_BASE,RTC_C_CLOCKSELECT_32KHZ_OSC,RTC_C_COUNTERSIZE_32BIT);
RTC_C_setCounterValue( RTC_C_BASE,0X0);
//Enable interrupt for RTC Ready Status, which asserts when the RTC
//Calendar registers are ready to read.
//Also, enable interrupts for the Calendar alarm and Calendar event.
RTC_C_enableInterrupt(RTC_C_BASE, RTCTEVIE);
//RTC_C_disableInterrupt(RTC_C_BASE, RTCTEVIE );
__enable_interrupt();
}
int8_t Timeing(float fnextTime )
{
uint32_t ulcounterValue =0;
if(fnextTime > RTC_MAX_SECOND) //判断时间是否合格
{
return -1;
}
else if(fnextTime < FLOATERR)
{
return -2;
}
else
{
upMcuState(MCU_SLEEP);
ulcounterValue = 4294967296 - (uint32_t)((fnextTime)*32768.0);
RTC_C_holdClock(RTC_C_BASE);
RTC_C_initCounter(RTC_C_BASE,RTC_C_CLOCKSELECT_32KHZ_OSC,RTC_C_COUNTERSIZE_32BIT);
RTC_C_setCounterValue(RTC_C_BASE,ulcounterValue);
RTC_C_enableInterrupt(RTC_C_BASE, RTCTEVIE);
RTC_C_startClock(RTC_C_BASE);
}
int main(void)
{
// Stop watchdog timer
WDT_A_hold(WDT_A_BASE);
//FRAMCtl_A_enableWriteProtection();
gIF_GPIOinit();
io_On;
RTCinit(); //初始化RTC
gIF_SystemClockConfig(); //初始化系统时钟
while(1)
{
Timeing(0.1);
io_OFF;
PMM_turnOffRegulator();
LPM3;
}
}
这是我的测试演示。
具体的时间间隔为102.96ms-100ms=2.96ms
我将在 IO_ON 中拉为高电平;首次拉为低电平到首次拉为高电平的时候是休眠前的 IO_OFF 到唤醒后的 IO_ON。
您可以帮助检查此案例吗?
此致、
本



















