| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /********************************** (C) COPYRIGHT *******************************
- * File Name : RTC.c
- * Author : WCH
- * Version : V1.2
- * Date : 2022/01/18
- * Description : RTC configuration and its initialization
- *********************************************************************************
- * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
- * Attention: This software (modified or not) and binary are used for
- * microcontroller manufactured by Nanjing Qinheng Microelectronics.
- *******************************************************************************/
- /******************************************************************************/
- /* Header file contains */
- #include "HAL.h"
- /*********************************************************************
- * CONSTANTS
- */
- #define RTC_INIT_TIME_HOUR 0
- #define RTC_INIT_TIME_MINUTE 0
- #define RTC_INIT_TIME_SECEND 0
- /***************************************************
- * Global variables
- */
- volatile uint32_t RTCTigFlag;
- /*******************************************************************************
- * @fn RTC_SetTignTime
- *
- * @brief Configure RTC trigger time
- *
- * @param time - Trigger time.
- *
- * @return None.
- */
- void RTC_SetTignTime(uint32_t time)
- {
- RTC_WaitForLastTask();
- RTC_SetAlarm(time);
- RTC_WaitForLastTask();
- RTCTigFlag = 0;
- }
- /*******************************************************************************
- * @fn HAL_Time0Init
- *
- * @brief System timer initialization
- *
- * @param None.
- *
- * @return None.
- */
- void HAL_TimeInit(void)
- {
- uint16_t temp=0;
- uint8_t state=0;
- bleClockConfig_t conf={0};
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP, ENABLE);
- PWR_BackupAccessCmd(ENABLE);
- #if( CLK_OSC32K )
- RCC_LSICmd(ENABLE);
- RCC_LSEConfig(RCC_LSE_OFF);
- RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
- #else
- RCC_LSEConfig(RCC_LSE_ON);
- /* Check the specified RCC logo position settings or not,
- * wait for the low-speed crystal oscillator to be ready */
- while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
- {
- temp++;
- Delay_Ms(10);
- }
- if(temp>=250)
- {
- printf("time error..\n");
- }
- RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
- #endif
- RCC_RTCCLKCmd(ENABLE);
- RTC_WaitForLastTask();
- RTC_WaitForLastTask();
- RTC_SetPrescaler(1);
- RTC_WaitForLastTask();
- RTC_SetCounter(0);
- RTC_WaitForLastTask();
- #if( CLK_OSC32K )
- Lib_Calibration_LSI();
- #endif
- conf.ClockAccuracy = CLK_OSC32K?1000:100;
- conf.ClockFrequency = CAB_LSIFQ/2;
- conf.ClockMaxCount = 0xFFFFFFFF;
- conf.getClockValue = RTC_GetCounter;
- state = TMOS_TimerInit( &conf );
- if(state)
- {
- PRINT("TMOS_TimerInit err %x\n",state);
- }
- }
- __attribute__((interrupt("WCH-Interrupt-fast")))
- void RTCAlarm_IRQHandler(void)
- {
- RTCTigFlag = 1;
- EXTI_ClearITPendingBit(EXTI_Line17);
- RTC_ClearITPendingBit(RTC_IT_ALR);
- RTC_WaitForLastTask();
- }
- /******************************** endfile @ time ******************************/
|