254 lines
8.9 KiB
C
254 lines
8.9 KiB
C
|
|
/*
|
||
|
|
******************************************************************************
|
||
|
|
* @file apt32f102_interrupt.c
|
||
|
|
* @author APT AE Team
|
||
|
|
* @version V1.10
|
||
|
|
* @date 2021/08/25
|
||
|
|
******************************************************************************
|
||
|
|
*THIS SOFTWARE WHICH IS FOR ILLUSTRATIVE PURPOSES ONLY WHICH PROVIDES
|
||
|
|
*CUSTOMER WITH CODING INFORMATION REGARDING THEIR PRODUCTS.
|
||
|
|
*APT CHIP SHALL NOT BE HELD RESPONSIBILITY ADN LIABILITY FOR ANY DIRECT,
|
||
|
|
*INDIRECT DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF
|
||
|
|
*SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
|
||
|
|
*CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.AND APT CHIP RESERVES
|
||
|
|
*THE RIGHT TO MAKE CHANGES IN THE SOFTWARE WITHOUT NOTIFICATION
|
||
|
|
******************************************************************************
|
||
|
|
*/
|
||
|
|
|
||
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
|
|
#ifndef _apt32f102_rtc_H
|
||
|
|
#define _apt32f102_rtc_H
|
||
|
|
|
||
|
|
/* Includes ------------------------------------------------------------------*/
|
||
|
|
#include "apt32f102.h"
|
||
|
|
/******************************************************************************
|
||
|
|
************************* rtc Registers Definition *************************
|
||
|
|
******************************************************************************/
|
||
|
|
/** @addtogroup RTC Registers Reset Value
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define RTC_TIMR_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
#define RTC_DATR_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
#define RTC_CR_RST ((CSP_REGISTER_T)0x00000001)
|
||
|
|
#define RTC_CCR_RST ((CSP_REGISTER_T)0x00800000)
|
||
|
|
#define RTC_ALRAR_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
#define RTC_ALRBR_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
#define RTC_SSR_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
#define RTC_CAL_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
#define RTC_IMCR_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
#define RTC_EVTRG_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
#define RTC_EVPS_RST ((CSP_REGISTER_T)0x00000000)
|
||
|
|
|
||
|
|
//RTC KEY
|
||
|
|
#define RTC_KEY (0XCA53ul)
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief RTC DIVS Control
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
CLKSRC_ISOSC = (CSP_REGISTER_T)(0x00ul<<24),
|
||
|
|
CLKSRC_IMOSC_4div = (CSP_REGISTER_T)(0x01ul<<24),
|
||
|
|
CLKSRC_EMOSC = (CSP_REGISTER_T)(0x02ul<<24),
|
||
|
|
CLKSRC_EMOSC_4div = (CSP_REGISTER_T)(0x03ul<<24)
|
||
|
|
}RTC_CLKSRC_TypeDef;
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief RTC INT register
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
//RISR IMCR MISR ICR
|
||
|
|
ALRA_INT = ((CSP_REGISTER_T)(0x01ul << 0)),
|
||
|
|
ALRB_INT = ((CSP_REGISTER_T)(0x01ul << 1)),
|
||
|
|
CPRD_INT = ((CSP_REGISTER_T)(0x01ul << 2)),
|
||
|
|
RTC_TRGEV0_INT = ((CSP_REGISTER_T)(0x01ul << 3)),
|
||
|
|
RTC_TRGEV1_INT = ((CSP_REGISTER_T)(0x01ul << 4))
|
||
|
|
}RTC_INT_TypeDef;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief RTC Alarm SEC MIN DAY mask
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_Second_Compare_EN = ((CSP_REGISTER_T)(0x00ul << 7)),
|
||
|
|
Alarm_Second_Compare_DIS = ((CSP_REGISTER_T)(0x01ul << 7)),
|
||
|
|
} RTC_Alarm_Second_mask_TypeDef;
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_Minute_Compare_EN = ((CSP_REGISTER_T)(0x00ul << 15)),
|
||
|
|
Alarm_Minute_Compare_DIS = ((CSP_REGISTER_T)(0x01ul << 15)),
|
||
|
|
} RTC_Alarm_Minute_mask_TypeDef;
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_Hour_Compare_EN = ((CSP_REGISTER_T)(0x00ul << 23)),
|
||
|
|
Alarm_Hour_Compare_DIS = ((CSP_REGISTER_T)(0x01ul << 23)),
|
||
|
|
} RTC_Alarm_Hour_mask_TypeDef;
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_DataOrWeek_Compare_EN = ((CSP_REGISTER_T)(0x00ul << 31)),
|
||
|
|
Alarm_DataOrWeek_Compare_DIS = ((CSP_REGISTER_T)(0x01ul << 31))
|
||
|
|
} RTC_Alarm_DataOrWeek_mask_TypeDef; ;
|
||
|
|
/**
|
||
|
|
* @brief RTC Alarm week data select
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_data_selecte = ((CSP_REGISTER_T)(0x00ul << 30)),
|
||
|
|
Alarm_week_selecte = ((CSP_REGISTER_T)(0x01ul << 30))
|
||
|
|
} RTC_Alarm_WeekData_select_TypeDef;
|
||
|
|
/**
|
||
|
|
* @brief RTC Alarm Register select
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_A = 0,
|
||
|
|
Alarm_B = 1
|
||
|
|
}RTC_Alarm_Register_select_TypeDef;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief RTC Alarm io output mode
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_A_pulse_output = ((CSP_REGISTER_T)(0x00ul << 10)),
|
||
|
|
Alarm_A_High = ((CSP_REGISTER_T)(0x01ul << 10)),
|
||
|
|
Alarm_A_Low = ((CSP_REGISTER_T)(0x02ul << 10)),
|
||
|
|
Alarm_B_pulse_output = ((CSP_REGISTER_T)(0x04ul << 10)),
|
||
|
|
Alarm_B_High = ((CSP_REGISTER_T)(0x05ul << 10)),
|
||
|
|
Alarm_B_Low = ((CSP_REGISTER_T)(0x06ul << 10)),
|
||
|
|
}Rtc_Output_Mode_TypeDef;
|
||
|
|
/**
|
||
|
|
* @brief RTC Alarm IO clock outpu
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
COSEL_Cali_512hz = ((CSP_REGISTER_T)(0x00ul << 8)),
|
||
|
|
COSEL_Cali_1hz = ((CSP_REGISTER_T)(0x01ul << 8)),
|
||
|
|
COSEL_NoCali_512hz = ((CSP_REGISTER_T)(0x02ul << 8)),
|
||
|
|
COSEL_NoCali_1hz = ((CSP_REGISTER_T)(0x03ul << 8)),
|
||
|
|
}
|
||
|
|
Rtc_ClockOutput_Mode_TypeDef;
|
||
|
|
/**
|
||
|
|
* @brief RTC AlarmA cmd select
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_A_EN = ((CSP_REGISTER_T)(0x01ul << 3)),
|
||
|
|
Alarm_A_DIS = ((CSP_REGISTER_T)(0x00ul << 3)),
|
||
|
|
|
||
|
|
}RTC_AlarmA_CMD_TypeDef;
|
||
|
|
/**
|
||
|
|
* @brief RTC AlarmB cmd select
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
Alarm_B_EN = ((CSP_REGISTER_T)(0x01ul << 4)),
|
||
|
|
Alarm_B_DIS = ((CSP_REGISTER_T)(0x00ul << 4)),
|
||
|
|
}RTC_AlarmB_CMD_TypeDef;
|
||
|
|
/**
|
||
|
|
* @brief RTC FMT mode select
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
RTC_24H = ((CSP_REGISTER_T)(0x00ul << 5)),
|
||
|
|
RTC_12H = ((CSP_REGISTER_T)(0x01ul << 5)),
|
||
|
|
}RTC_FMT_MODE_TypeDef;
|
||
|
|
/**
|
||
|
|
* @brief RTC CPRD select
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
CPRD_NONE = ((CSP_REGISTER_T)(0x00ul << 13)),
|
||
|
|
CPRD_05S = ((CSP_REGISTER_T)(0x01ul << 13)),
|
||
|
|
CPRD_1S = ((CSP_REGISTER_T)(0x02ul << 13)),
|
||
|
|
CPRD_1MIN = ((CSP_REGISTER_T)(0x03ul << 13)),
|
||
|
|
CPRD_1HOUR = ((CSP_REGISTER_T)(0x04ul << 13)),
|
||
|
|
CPRD_1DAY = ((CSP_REGISTER_T)(0x05ul << 13)),
|
||
|
|
CPRD_1MONTH = ((CSP_REGISTER_T)(0x06ul << 13)),
|
||
|
|
}RTC_CPRD_TypeDef;
|
||
|
|
/**
|
||
|
|
* @brief RTC EVTRG TRGSRC0 SET
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
RTC_EVTRG_TRGSRC0_DIS = ((CSP_REGISTER_T)(0x00ul )),
|
||
|
|
RTC_EVTRG_TRGSRC0_AlarmA = ((CSP_REGISTER_T)(0x01ul )),
|
||
|
|
RTC_EVTRG_TRGSRC0_AlarmB = ((CSP_REGISTER_T)(0x02ul )),
|
||
|
|
RTC_EVTRG_TRGSRC0_AlarmAB = ((CSP_REGISTER_T)(0x03ul )),
|
||
|
|
RTC_EVTRG_TRGSRC0_CPRD = ((CSP_REGISTER_T)(0x04ul )),
|
||
|
|
}RTC_EVTRG_TRGSRC0_TypeDef;
|
||
|
|
/**
|
||
|
|
* @brief RTC EVTRG TRGSRC1 SET
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
RTC_EVTRG_TRGSRC1_DIS = ((CSP_REGISTER_T)(0x00ul<<4 )),
|
||
|
|
RTC_EVTRG_TRGSRC1_AlarmA = ((CSP_REGISTER_T)(0x01ul<<4 )),
|
||
|
|
RTC_EVTRG_TRGSRC1_AlarmB = ((CSP_REGISTER_T)(0x02ul<<4 )),
|
||
|
|
RTC_EVTRG_TRGSRC1_AlarmAB = ((CSP_REGISTER_T)(0x03ul<<4 )),
|
||
|
|
RTC_EVTRG_TRGSRC1_CPRD = ((CSP_REGISTER_T)(0x04ul<<4 )),
|
||
|
|
}RTC_EVTRG_TRGSRC1_TypeDef;
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
RTC_TRGSRC0_EN = ((CSP_REGISTER_T)(0x00ul<<20 )),
|
||
|
|
RTC_TRGSRC0_DIS = ((CSP_REGISTER_T)(0x01ul<<20 )),
|
||
|
|
RTC_TRGSRC1_EN = ((CSP_REGISTER_T)(0x00ul<<21 )),
|
||
|
|
RTC_TRGSRC1_DIS = ((CSP_REGISTER_T)(0x01ul<<21 )),
|
||
|
|
}RTC_TRGSRCX_CMD_TypeDef;
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
volatile uint8_t u8Second; ///<闹钟分钟
|
||
|
|
volatile uint8_t u8Minute; ///<闹钟分钟
|
||
|
|
volatile uint8_t u8Hour; ///<闹钟小时
|
||
|
|
volatile uint8_t u8WeekOrData; ///<闹钟周
|
||
|
|
}RTC_Alarmset_T;
|
||
|
|
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
volatile uint8_t u8Second; ///<秒
|
||
|
|
volatile uint8_t u8Minute; ///<分
|
||
|
|
volatile uint8_t u8Hour; ///<时
|
||
|
|
volatile uint8_t u8DayOfWeek; ///<周
|
||
|
|
volatile uint8_t u8Day; ///<日
|
||
|
|
volatile uint8_t u8Month; ///<月
|
||
|
|
volatile uint8_t u8Year; ///<年
|
||
|
|
} RTC_time_t;
|
||
|
|
|
||
|
|
|
||
|
|
/** @addtogroup RTC_Exported_functions
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
extern void RTC_RST_VALUE(void);
|
||
|
|
extern void RTCCLK_CONFIG(U16_T DIVS , U16_T DIVA , RTC_CLKSRC_TypeDef CLKSRC_X);
|
||
|
|
extern void RTC_ALM_IO_SET(Rtc_Output_Mode_TypeDef Rtc_Output_Mode_x );
|
||
|
|
extern void RTC_TIMR_DATR_SET(RTC_time_t *RTC_TimeDate);
|
||
|
|
extern void RTC_TIMR_DATR_Read(RTC_time_t *RTC_TimeDate);
|
||
|
|
extern void RTC_Alarm_TIMR_DATR_SET(RTC_Alarm_Register_select_TypeDef Alarm_x , RTC_Alarmset_T *RTC_AlarmA , RTC_Alarm_Second_mask_TypeDef RTC_Alarm_Second_x ,
|
||
|
|
RTC_Alarm_Minute_mask_TypeDef RTC_Alarm_Minute_x , RTC_Alarm_Hour_mask_TypeDef RTC_Alarm_Hour_x,
|
||
|
|
RTC_Alarm_DataOrWeek_mask_TypeDef RTC_Alarm_DataOrWeek_x,
|
||
|
|
RTC_Alarm_WeekData_select_TypeDef Alarm_x_selecte);
|
||
|
|
extern void RTC_Function_Config(RTC_FMT_MODE_TypeDef RTC_FMT_MODE , RTC_CPRD_TypeDef RTC_CPRD_x , Rtc_ClockOutput_Mode_TypeDef Rtc_ClockOutput_x);
|
||
|
|
extern void RTC_TRGSRC0_Config(RTC_EVTRG_TRGSRC0_TypeDef RTC_EVTRG_TRGSRC0_x , RTC_TRGSRCX_CMD_TypeDef RTC_TRGSRCX_CMD , U8_T Trgev0Prd);
|
||
|
|
extern void RTC_TRGSRC1_Config(RTC_EVTRG_TRGSRC1_TypeDef RTC_EVTRG_TRGSRC1_x , RTC_TRGSRCX_CMD_TypeDef RTC_TRGSRCX_CMD , U8_T Trgev1Prd);
|
||
|
|
extern void RTC_TRGSRC0_SWFTRG(void);
|
||
|
|
extern void RTC_TRGSRC1_SWFTRG(void);
|
||
|
|
extern void RTC_Start(void);
|
||
|
|
extern void RTC_Stop(void);
|
||
|
|
extern void RTC_AlarmA_TIMR_DATR_Read(RTC_Alarmset_T *RTC_AlarmA);
|
||
|
|
extern void RTC_AlarmB_TIMR_DATR_Read(RTC_Alarmset_T *RTC_AlarmB);
|
||
|
|
extern void RTC_Int_Enable(RTC_INT_TypeDef RTC_X_INT);
|
||
|
|
extern void RTC_Int_Disable(RTC_INT_TypeDef RTC_X_INT);
|
||
|
|
extern void RTC_Vector_Int_Enable(void);
|
||
|
|
extern void RTC_Vector_Int_Disable(void);
|
||
|
|
extern void RTC_WakeUp_Enable(void);
|
||
|
|
extern void RTC_WakeUp_Disable(void);
|
||
|
|
extern RTC_time_t RTC_TimeDate_buf;
|
||
|
|
extern RTC_Alarmset_T RTC_AlarmA_buf;
|
||
|
|
extern RTC_Alarmset_T RTC_AlarmB_buf;
|
||
|
|
|
||
|
|
#endif /**< apt32f102_rtc_H */
|
||
|
|
|
||
|
|
/******************* (C) COPYRIGHT 2020 APT Chip *****END OF FILE****/
|