/** * @brief 设置RTC的时间 * @param datetime :时间戳结构 * @retval None */ void RTC_SetDateTime(RTC_DateTime_Type * datetime) { uint32_t i; if(!datetime) { return; } RTC_DateTimeToSecond(datetime, &i); LIB_TRACE("Reconfig:%d %s\r\n", i, __func__); RTC->SR &= ~RTC_SR_TCE_MASK; RTC->TSR = RTC_TSR_TSR(i); RTC->SR |= RTC_SR_TCE_MASK; }
/* ===================================================================*/ LDD_TDeviceData * RTC1_Init(LDD_TUserData *UserDataPtr, bool SoftInit) { RTC1_TDeviceData *DevDataPtr; /* Allocate RTC device structure */ /* {Default RTOS Adapter} Driver memory allocation: Dynamic allocation is simulated by a pointer to the static object */ DevDataPtr = &DevDataPtr__DEFAULT_RTOS_ALLOC; DevDataPtr->UserDataPtr = UserDataPtr; /* Store the user data */ /* Allocate interrupt vector(s) */ /* {Default RTOS Adapter} Set interrupt vector: IVT is static, ISR parameter is passed by the global variable */ INT_RTC__DEFAULT_RTOS_ISRPARAM = DevDataPtr; /* Registration of the device structure */ PE_LDD_RegisterDeviceStructure(PE_LDD_COMPONENT_RTC1_ID,DevDataPtr); /* Enable module clock */ /* SIM_SCGC6: RTC=1 */ SIM_SCGC6 |= SIM_SCGC6_RTC_MASK; if (!SoftInit) { RTC_SR = 0x00U; /* Disable counter */ RTC_TPR = RTC_TPR_TPR(0x00); /* Set prescaler register */ RTC_TSR = RTC_TSR_TSR(0x02); /* Set second register - 2000-01-01 0:0:1 */ RTC_TAR = RTC_TAR_TAR(0x00); /* Set alarm register - 2000-01-01 0:0:0 */ RTC_TCR = RTC_TCR_CIC(0x00) | RTC_TCR_TCV(0x00) | RTC_TCR_CIR(0x00) | RTC_TCR_TCR(0x00); /* Set compensation */ RTC_SR = RTC_SR_TCE_MASK; /* Enable counter */ } /* Enable interrupt */ /* RTC_IER: TAIE=1,TOIE=0,TIIE=0 */ RTC_IER = RTC_IER_TAIE_MASK; /* Enable interrupts */ /* NVICIP46: PRI46=0x70 */ NVICIP46 = NVIC_IP_PRI46(0x70); /* NVICISER1: SETENA|=0x4000 */ NVICISER1 |= NVIC_ISER_SETENA(0x4000); return DevDataPtr; }
void RTC_SetTSR(uint32_t val) { RTC->SR &= ~RTC_SR_TCE_MASK; RTC->TSR = RTC_TSR_TSR(val); RTC->SR |= RTC_SR_TCE_MASK; }