CH573RTC

代码参考:

#include "CH57x_common.h"

void DebugInit(void)
{
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();
}

int main()
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);

    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD);
    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD);

    DebugInit();
    PRINT("Start @ChipID=%02x\n", R8_CHIP_ID);
    DelayMs(200);

    LClk32K_Select(Clk32K_LSI);
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
    R8_CK32K_CONFIG &= ~RB_CLK_XT32K_PON;
    R8_SAFE_ACCESS_SIG = 0;

    {
        RTC_InitTime(2024,1,1,0,0,0);
//        RTC_TMRFunCfg(Period_1_S);  //两种唤醒方式:定时功能、触发功能。这里是使用的定时唤醒,相应参数库已经封装好,可根据需求调用。注意清除对应的标志。
        RTC_TRIGFunCfg(32768*2);//两种唤醒方式:定时功能、触发功能。这里是使用的触发唤醒,单位是32768,代表1S。注意清除对应的标志。注意:使用触发需要在中断里面再触发一次。
        PFIC_EnableIRQ(RTC_IRQn);  //开启RTC使能
        PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_RTC_WAKE, Edge_LongDelay );
    }

    /* 配置唤醒源为 GPIO - PA5 */
    GPIOA_ModeCfg(GPIO_Pin_10, GPIO_ModeIN_PU);
    GPIOA_ITModeCfg(GPIO_Pin_10, GPIO_ITMode_FallEdge); // 下降沿唤醒
    PFIC_EnableIRQ(GPIO_A_IRQn);
    PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Edge_LongDelay);

    PRINT("sleep mode sleep \n");
    DelayMs(2);
    while(1){
        LowPower_Sleep(RB_PWR_RAM16K | RB_PWR_RAM2K | RB_PWR_EXTEND | RB_PWR_XROM); //只保留14+2K SRAM 供电
        HSECFG_Current(HSE_RCur_100);
        DelayMs(2);
    }
}

__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void GPIOA_IRQHandler(void)
{
    printf("GPIO IRQ\n");
    GPIOA_ClearITFlagBit(GPIO_Pin_10);
}

__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void RTC_IRQHandler(void)
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    mDelaymS(3);
    UINT16 py; UINT16 pmon; UINT16 pd; UINT16 ph; UINT16 pm; UINT16 ps;
    RTC_GetTime(&py,&pmon,&pd,&ph,&pm,&ps);
    if (RTC_GetITFlag(RTC_TRIG_EVENT)) {
        printf("%d年%d月%d日%d时%d分%d秒\r\n",py,pmon,pd,ph,pm,ps);
        RTC_ClearITFlag(RTC_TRIG_EVENT);
        RTC_TRIGFunCfg(32768*2);    //触发模式需要再次触发
    }
}

 

posted @ 2024-07-30 09:49  SweetTea_lllpc  阅读(125)  评论(0编辑  收藏  举报