编程 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。
您可以帮助检查此案例吗?
此致、
本