318 lines
8.5 KiB
C
318 lines
8.5 KiB
C
/******************************************************************************
|
|
* @brief Periodic Interrupt ETMer (PIT) driver head file.
|
|
*
|
|
******************************************************************************/
|
|
#ifndef PIT_H_
|
|
#define PIT_H_
|
|
#include"common.h"
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
/******************************************************************************
|
|
* Includes
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* Constants
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* PIT channel number list
|
|
*
|
|
*//*! @addtogroup pit_channelnumber
|
|
* @{
|
|
*******************************************************************************/
|
|
enum
|
|
{
|
|
PIT_CHANNEL0 = 0, /*!< PIT channel 0 */
|
|
PIT_CHANNEL1 /*!< PIT channel 1 */
|
|
};
|
|
|
|
/*! @} End of pit_channelnumber */
|
|
|
|
/******************************************************************************
|
|
* Macros
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* Types
|
|
******************************************************************************/
|
|
|
|
/*
|
|
* Callback type
|
|
*/
|
|
|
|
/******************************************************************************
|
|
* PIT callback function declaration
|
|
*
|
|
*//*! @addtogroup pit_callback
|
|
* @{
|
|
*******************************************************************************/
|
|
typedef void (*PIT_CallbackType)(void); /*!< PIT callback type */
|
|
|
|
/*! @} End of pit_callback */
|
|
|
|
/* PIT configuration structure
|
|
*/
|
|
/*!
|
|
* @brief PIT configuration type.
|
|
*
|
|
*/
|
|
typedef struct
|
|
{
|
|
uint8_t bFreeze : 1; /*!< 1: stop in debug mode, 0: run in debug mode */
|
|
uint8_t bModuleDis : 1; /*!< 1: PIT module is disable, 0: PIT module is enable */
|
|
uint8_t bReserved0 : 1; /*!< reserved bit */
|
|
uint8_t bReserved1 : 5; /*!< reserved bit */
|
|
uint8_t bETMerEn : 1; /*!< 1: channel ETMer is enable, 0: channel ETMer is disable */
|
|
uint8_t bInterruptEn : 1; /*!< 1: channel ETMer interrupt is enable, 0: channel ETMer interrupt is disable */
|
|
uint8_t bChainMode : 1; /*!< 1: chain mode is enable, 0: chain mode is disable */
|
|
uint8_t bReserved2 : 5; /*!< reserved bit */
|
|
uint8_t bFlag : 1; /*!< 1: flag is set,and write 1 to clear flag, 0: no flag is set */
|
|
uint8_t bReserved3 : 7; /*!< reserved bit */
|
|
uint32_t u32LoadValue ; /*!< 32-bit channel load value */
|
|
} PIT_ConfigType, *PIT_ConfigPtr;
|
|
|
|
|
|
/******************************************************************************
|
|
* Global variables
|
|
******************************************************************************/
|
|
|
|
|
|
/*!
|
|
* inline functions
|
|
*/
|
|
|
|
/******************************************************************************
|
|
* PIT API list
|
|
*
|
|
*//*! @addtogroup pit_api_list
|
|
* @{
|
|
*******************************************************************************/
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief enable pit module.
|
|
*
|
|
* @param none
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_Enable(void)
|
|
{
|
|
|
|
PIT->MCR &= ~PIT_MCR_MDIS_MASK;
|
|
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief disable pit module.
|
|
*
|
|
* @param none
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_Disable(void)
|
|
{
|
|
|
|
PIT->MCR |= PIT_MCR_MDIS_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief pit ETMers are stopped in debug mode.
|
|
*
|
|
* @param none
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_SetDebugFreeze(void)
|
|
{
|
|
|
|
PIT->MCR |= PIT_MCR_FRZ_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief pit ETMers are running in debug mode.
|
|
*
|
|
* @param none
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_SetDebugOn(void)
|
|
{
|
|
|
|
PIT->MCR &= ~PIT_MCR_FRZ_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief enable pit channel ETMer.
|
|
*
|
|
* @param[in] u8Channel.
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_ChannelEnable(uint8_t u8Channel)
|
|
|
|
{
|
|
|
|
PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_TEN_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief disable pit channel ETMer.
|
|
*
|
|
* @param[in] u8Channel.
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_ChannelDisable(uint8_t u8Channel)
|
|
{
|
|
|
|
PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_TEN_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief enable pit channel ETMer interrupt.
|
|
*
|
|
* @param[in] u8Channel.
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_ChannelEnableInt(uint8_t u8Channel)
|
|
|
|
{
|
|
|
|
PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_TIE_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief disable pit channel ETMer interrupt .
|
|
*
|
|
* @param[in] u8Channel.
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_ChannelDisableInt(uint8_t u8Channel)
|
|
|
|
{
|
|
|
|
PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_TIE_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief enable pit channel ETMer chain mode.
|
|
*
|
|
* @param[in] u8Channel.
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_ChannelEnableChain(uint8_t u8Channel)
|
|
{
|
|
PIT->CHANNEL[u8Channel].TCTRL |= PIT_TCTRL_CHN_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief disable pit channel ETMer chain mode.
|
|
*
|
|
* @param[in] u8Channel.
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_ChannelDisableChain(uint8_t u8Channel)
|
|
|
|
{
|
|
PIT->CHANNEL[u8Channel].TCTRL &= ~PIT_TCTRL_CHN_MASK;
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief get pit channel ETMer interrrupt flag.
|
|
*
|
|
* @param[in] u8Channel.
|
|
*
|
|
* @return bflag.
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
|
|
*****************************************************************************/
|
|
__STATIC_INLINE uint8_t PIT_ChannelGetFlags(uint8_t u8Channel)
|
|
|
|
{
|
|
uint8_t bflag;
|
|
|
|
bflag = (PIT->CHANNEL[u8Channel].TFLG & PIT_TFLG_TIF_MASK);
|
|
|
|
return bflag;
|
|
|
|
}
|
|
|
|
|
|
/*****************************************************************************//*!
|
|
*
|
|
* @brief clear pit channel ETMer interrrupt flag.
|
|
*
|
|
* @param[in] u8Channel
|
|
*
|
|
* @return none
|
|
*
|
|
* @ Pass/ Fail criteria: none
|
|
*****************************************************************************/
|
|
__STATIC_INLINE void PIT_ChannelClrFlags(uint8_t u8Channel)
|
|
{
|
|
PIT->CHANNEL[u8Channel].TFLG |= PIT_TFLG_TIF_MASK;
|
|
}
|
|
|
|
|
|
/******************************************************************************
|
|
* Global functions
|
|
******************************************************************************/
|
|
void PIT_Init(uint8_t u8Channel_No, PIT_ConfigType *pConfig);
|
|
void PIT_SetLoadVal(uint8_t u8Channel, uint32_t u32loadvalue);
|
|
void PIT_SetCallback(uint8_t u8Channel_No, PIT_CallbackType pfnCallback);
|
|
void PIT_DeInit(void);
|
|
/*! @} End of pit_api_list */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* PIT_H_ */
|