⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpc177x_8x_rtc.h

📁 NXPl788上lwip的无操作系统移植,基于Embest开发板
💻 H
📖 第 1 页 / 共 2 页
字号:

/** Maximum value of day of year*/
#define RTC_DAYOFYEAR_MAX	366

/** Maximum value of year*/
#define RTC_YEAR_MAX		4095

/**********************************************************************
* Calibration register
**********************************************************************/
/** Calibration value */
#define RTC_CALIBRATION_CALVAL_MASK		((0x1FFFF))

/** Calibration direction */
#define RTC_CALIBRATION_LIBDIR			((1<<17))

/** Calibration max value */
#define RTC_CALIBRATION_MAX				((0x20000))

/** Calibration definitions */
#define RTC_CALIB_DIR_FORWARD			((uint8_t)(0))
#define RTC_CALIB_DIR_BACKWARD			((uint8_t)(1))

/**********************************************************************
* Event Monitor/Recorder Control register
**********************************************************************/
#define RTC_ERCTRL_EV0_INTWAKE_ENABLE		(1<<0)
#define RTC_ERCTRL_EV0_GPCLEAR_ENABLE		(1<<1)
#define RTC_ERCTRL_EV0_POS_EDGE				(1<<2)
#define RTC_ERCTRL_EV0_NEG_EDGE				(0<<2)
#define RTC_ERCTRL_EV0_INPUT_ENABLE			(1<<3)

#define RTC_ERCTRL_EV1_INTWAKE_ENABLE		(1<<10)
#define RTC_ERCTRL_EV1_GPCLEAR_ENABLE		(1<<11)
#define RTC_ERCTRL_EV1_POS_EDGE				(1<<12)
#define RTC_ERCTRL_EV1_NEG_EDGE				(0<<12)
#define RTC_ERCTRL_EV1_INPUT_ENABLE			(1<<13)


#define RTC_ERCTRL_EV2_INTWAKE_ENABLE		(1<<20)
#define RTC_ERCTRL_EV2_GPCLEAR_ENABLE		(1<<21)
#define RTC_ERCTRL_EV2_POS_EDGE				(1<<22)
#define RTC_ERCTRL_EV2_NEG_EDGE				(0<<22)
#define RTC_ERCTRL_EV2_INPUT_ENABLE			(1<<23)

#define RTC_ERCTRL_MODE_MASK				(((uint32_t)3)<<30)
#define RTC_ERCTRL_MODE_CLK_DISABLE			(((uint32_t)0)<<30)
#define RTC_ERCTRL_MODE_16HZ				(((uint32_t)1)<<30)
#define RTC_ERCTRL_MODE_64HZ				(((uint32_t)2)<<30)
#define RTC_ERCTRL_MODE_1KHZ				(((uint32_t)3)<<30)

#define RTC_ER_INPUT_CHANNEL_NUM			(3)

/**********************************************************************
* Event Monitor/Recorder Status register
**********************************************************************/
#define RTC_ER_STATUS_EV0_BIT				(0)
#define RTC_ER_STATUS_EV1_BIT				(1)
#define RTC_ER_STATUS_EV2_BIT				(2)
#define RTC_ER_STATUS_GPCLEARED_BIT			(3)
#define RTC_ER_STATUS_WAKEUP_BIT			(31)

#define RTC_ER_EVENTS_ON_EV0_FLG            (1<<RTC_ER_STATUS_EV0_BIT)
#define RTC_ER_EVENTS_ON_EV1_FLG            (1<<RTC_ER_STATUS_EV1_BIT)
#define RTC_ER_EVENTS_ON_EV2_FLG            (1<<RTC_ER_STATUS_EV2_BIT)
#define RTC_ER_STATUS_GP_CLEARED_FLG        (1<<RTC_ER_STATUS_GPCLEARED_BIT)
#define RTC_ER_STATUS_WAKEUP_REQ_PENDING    (((uint32_t)1)<<RTC_ER_STATUS_WAKEUP_BIT)
/**********************************************************************
* Event Monitor/Recorder Counter register
**********************************************************************/
#define RTC_ER_EV0_COUNTER(n)				(n&0x07)
#define RTC_ER_EV1_COUNTER(n)				((n>>8)&0x07)
#define RTC_ER_EV2_COUNTER(n)				((n>>16)&0x07)

/**********************************************************************
* Event Monitor/Recorder TimeStamp register
**********************************************************************/
#define RTC_ER_TIMESTAMP_SEC(n)				(n&0x3F)
#define RTC_ER_TIMESTAMP_MIN(n)				((n>>6)&0x3F)
#define RTC_ER_TIMESTAMP_HOUR(n)			((n>>12)&0x1F)
#define RTC_ER_TIMESTAMP_DOY(n)				((n>>17)&0x1FF)

/**
 * @}
 */


/* Public Types --------------------------------------------------------------- */
/** @defgroup RTC_Public_Types RTC Public Types
 * @{
 */

/** @brief Time structure definitions for easy manipulate the data */
typedef struct 
{
	/** Seconds Register */
	uint32_t SEC;
	/** Minutes Register */
	uint32_t MIN;
	/** Hours Register */
	uint32_t HOUR;
	/** Day of Month Register */
	uint32_t DOM;
	/** Day of Week Register */
	uint32_t DOW;
	/** Day of Year Register */
	uint32_t DOY;
	/** Months Register */
	uint32_t MONTH;
	/** Years Register */
	uint32_t YEAR;
} RTC_TIME_Type;

/** @brief RTC interrupt source */
typedef enum 
{
	/**  Counter Increment Interrupt */
	RTC_INT_COUNTER_INCREASE = RTC_IRL_RTCCIF,
	/** The alarm interrupt */
	RTC_INT_ALARM = RTC_IRL_RTCALF,
} RTC_INT_OPT;


/** @brief RTC time type option */
typedef enum 
{
	/** Second */
	RTC_TIMETYPE_SECOND = 0,
	/** Month */
	RTC_TIMETYPE_MINUTE = 1,
	/** Hour */
	RTC_TIMETYPE_HOUR = 2,
	/** Day of week */
	RTC_TIMETYPE_DAYOFWEEK = 3,
	/** Day of month */
	RTC_TIMETYPE_DAYOFMONTH = 4,
	/** Day of year */
	RTC_TIMETYPE_DAYOFYEAR = 5,
	/** Month */
	RTC_TIMETYPE_MONTH = 6,
	/** Year */
	RTC_TIMETYPE_YEAR = 7,
} RTC_TIMETYPE_Num;

/** @brief Event Monitor/Recording Input Channel configuration */
typedef struct
{
 	Bool	EventOnPosEdge;	// Event occurs on positive edge on the channel
	Bool	IntWake;		// Create interrupt and wake-up request if there is an event
	Bool	GPClear;		// Clear GP registers of RTC if there is an event.
} RTC_ER_CHANNEL_Init_Type;

/** @brief Event Monitor/Recording configuration */
typedef struct
{
	RTC_ER_CHANNEL_Init_Type InputChannel[RTC_ER_INPUT_CHANNEL_NUM];
	uint32_t				 Clk;	// Sample clock on input channel. (Hz)
} RTC_ER_CONFIG_Type;

/** @brief Event Monitor/Recording TimeStamp Type */
typedef struct 
{
	/** Seconds Register */
	uint32_t SEC;
	/** Minutes Register */
	uint32_t MIN;
	/** Hours Register */
	uint32_t HOUR;
	/** Day of Year Register */
	uint32_t DOY;
} RTC_ER_TIMESTAMP_Type;


/**
 * @}
 */



/* Public Functions ----------------------------------------------------------- */
/** @defgroup RTC_Public_Functions RTC Public Functions
 * @{
 */

void RTC_Init (LPC_RTC_TypeDef *RTCx);
void RTC_DeInit(LPC_RTC_TypeDef *RTCx);
void RTC_ResetClockTickCounter(LPC_RTC_TypeDef *RTCx);
void RTC_Cmd (LPC_RTC_TypeDef *RTCx, FunctionalState NewState);
void RTC_CntIncrIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t CntIncrIntType, \
								FunctionalState NewState);
void RTC_AlarmIntConfig (LPC_RTC_TypeDef *RTCx, uint32_t AlarmTimeType, \
								FunctionalState NewState);
void RTC_SetTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t TimeValue);
uint32_t RTC_GetTime(LPC_RTC_TypeDef *RTCx, uint32_t Timetype);
void RTC_SetFullTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime);
void RTC_GetFullTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime);
void RTC_SetAlarmTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t ALValue);
uint32_t RTC_GetAlarmTime (LPC_RTC_TypeDef *RTCx, uint32_t Timetype);
void RTC_SetFullAlarmTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime);
void RTC_GetFullAlarmTime (LPC_RTC_TypeDef *RTCx, RTC_TIME_Type *pFullTime);
IntStatus RTC_GetIntPending (LPC_RTC_TypeDef *RTCx, uint32_t IntType);
void RTC_ClearIntPending (LPC_RTC_TypeDef *RTCx, uint32_t IntType);
void RTC_CalibCounterCmd(LPC_RTC_TypeDef *RTCx, FunctionalState NewState);
void RTC_CalibConfig(LPC_RTC_TypeDef *RTCx, uint32_t CalibValue, uint8_t CalibDir);
void RTC_WriteGPREG (LPC_RTC_TypeDef *RTCx, uint8_t Channel, uint32_t Value);
uint32_t RTC_ReadGPREG (LPC_RTC_TypeDef *RTCx, uint8_t Channel);

void 	RTC_ER_InitConfigStruct(RTC_ER_CONFIG_Type* pConfig);
Status 	RTC_ER_Init(RTC_ER_CONFIG_Type* pConfig);
Status 	RTC_ER_Cmd(uint8_t channel, FunctionalState state);
uint8_t RTC_ER_GetEventCount(uint8_t channel);
uint32_t RTC_ER_GetStatus(void);
Bool 	RTC_ER_WakupReqPending(void);
Bool 	RTC_ER_GPCleared(void);
Status 	RTC_ER_GetFirstTimeStamp(uint8_t channel, RTC_ER_TIMESTAMP_Type* pTimeStamp);
Status 	RTC_ER_GetLastTimeStamp(uint8_t channel, RTC_ER_TIMESTAMP_Type* pTimeStamp);
void	RTC_ER_ClearStatus(uint32_t status);
/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* __LPC177X_8X_RTC_H_ */

/**
 * @}
 */

/* --------------------------------- End Of File ------------------------------ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -