PeripheralDriver_Flagchip_F.../Inc/module_driver_eftu_ccm.h

249 lines
6.8 KiB
C

/**
* @file module_driver_eftu_ccm.h
* @author flagchip
* @brief eFTU ccm driver type definition and API
* @version 2.0.0
* @date 2024-08-20
*
* SDK Version: 2.6.0
*
* @copyright Copyright (c) 2020-2024 Flagchip Semiconductors Co., Ltd.
*
* @details
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2023-12-15 Flagchip032 N/A First version for FC7300
* 2.0.0 2024-10-12 Flagchip070 N/A Change version and release
******************************************************************************** */
#ifndef DRIVER_INCLUDE_MODULE_DRIVER_EFTU_CCM_H_
#define DRIVER_INCLUDE_MODULE_DRIVER_EFTU_CCM_H_
#include "HwA_eftu_ccm.h"
#include "module_driver_eftu.h"
#include "module_driver_eftu_cmu.h"
#if EFTU_INSTANCE_COUNT > 0U
#define EFTU_CCM_MODULE_ID 1U
/**
* @name CCM API Service IDs
*
* @{
*/
#define EFTU_CCM_INIT_ID 0U
#define EFTU_CCM_CONFIG_DEBUG_ID 1U
#define EFTU_CCM_CONFIG_CMP_ID 2U
#define EFTU_CCM_CONFIG_CLUSTER_CMU_CLOCK_ID 3U
#define EFTU_CCM_CONFIG_TIM_ERR_INTERRUPT_ID 4U
#define EFTU_CCM_CONFIG_DMA_REQUEST_ID 5U
#define EFTU_CCM_CONFIG_GLOBAL_TRIGGER_ID 6U
/** @}*/
/**
* @name CCM Dev Error Code
* @brief Error Code of calling CCM apis
*
* @{
*/
#define EFTU_CCM_UNINIT 0U
#define EFTU_CCM_E_PARAM_CHANNEL 1U
#define EFTU_CCM_E_PARAM_COUNT 2U
#define EFTU_CCM_E_PARAM_INVALID 3U
#define EFTU_CCM_E_PARAM_INVALID_VALUE 4U
/** @}*/
typedef void (*pEftuCcmIntCallback)(void);
typedef enum
{
EFTU_CCM_DMA_REQ_TOM1_CH_0 = 0,
EFTU_CCM_DMA_REQ_TOM1_CH_1,
EFTU_CCM_DMA_REQ_TOM1_CH_2,
EFTU_CCM_DMA_REQ_TOM1_CH_3,
EFTU_CCM_DMA_REQ_TOM1_CH_4,
EFTU_CCM_DMA_REQ_TOM1_CH_5,
EFTU_CCM_DMA_REQ_TOM1_CH_6,
EFTU_CCM_DMA_REQ_TOM1_CH_7,
EFTU_CCM_DMA_REQ_TOM0_CH_0 ,
EFTU_CCM_DMA_REQ_TOM0_CH_1,
EFTU_CCM_DMA_REQ_TOM0_CH_2,
EFTU_CCM_DMA_REQ_TOM0_CH_3,
EFTU_CCM_DMA_REQ_TOM0_CH_4,
EFTU_CCM_DMA_REQ_TOM0_CH_5,
EFTU_CCM_DMA_REQ_TOM0_CH_6,
EFTU_CCM_DMA_REQ_TOM0_CH_7,
EFTU_CCM_DMA_REQ_TIM_CH_0 ,
EFTU_CCM_DMA_REQ_TIM_CH_1,
EFTU_CCM_DMA_REQ_TIM_CH_2,
EFTU_CCM_DMA_REQ_TIM_CH_3,
EFTU_CCM_DMA_REQ_TIM_CH_4,
EFTU_CCM_DMA_REQ_TIM_CH_5,
EFTU_CCM_DMA_REQ_TIM_CH_6,
EFTU_CCM_DMA_REQ_TIM_CH_7,
} EFTU_CCM_DmaRequestSrcType;
typedef struct /*Only for EFTU0*/
{
EFTU_CCM_CmpInstance eCmpInstance;
uint8_t u8CmpEnMask; /*Each bit represents a channel*/
EFTU_CCM_CmpSrcSelectType eCmpSrcX;
EFTU_CCM_CmpSrcSelectType eCmpSrcY;
bool bEnInterrupt;
pEftuCcmIntCallback pEftuCmpIntback;
}EFTU_CCM_CmpConfigStruct;
typedef struct
{
uint8_t u8TriggerOutMask;
EFTU_CCM_GlobalTriggerOutType eGtriggerSrc;
}EFTU_CCM_GlobalTriggerMode;
typedef struct
{
bool bTim0Enable;
bool bTom0Enable;
bool bTom1Enable;
EFTU_CCM_DebugMode eDebugMode;
} EFTU_CCM_InitStruct;
typedef struct
{
EFTU_CCM_TimErrChnType eTimChannel;
bool bEnErrInterrupt;
uint8_t u8ErrorEnMask;
pEftuCcmIntCallback pEftuTimErrIntback;
}EFTU_CCM_TimErrIntStruct;
typedef struct
{
uint8_t u8DmaReqSrcChnIndex;
EFTU_CCM_DmaRequestSrcType eDmaReqSelect;
boolean bCcu0IrqEnDmaReq;
boolean bCcu1IrqEnDmaReq;
}EFTU_CCM_DmaReqStruct;
typedef struct _EFTU_CCM_HandleType
{
EFTU_InstanceType eInstance;
struct
{
EFTU_CCM_Type *pCcm;
bool bTim0En;
bool bTom0En;
bool bTom1En;
EFTU_CCM_DebugMode eDebugMode;
EFTU_CCM_ClusterCmuClkSelectType eaClusterClkSrc[EFTU_CLUSTER_CLOCK_COUNT];
pEftuCcmIntCallback g_pEftuCmpIntback[EFTU_CMP_COUNT];
pEftuCcmIntCallback g_pEftuTimErrIntback[EFTU_TIM_CHANNEL_COUNT];
}tStatus;
} EFTU_CCM_HandleType;
/**
* @brief Initialize CCM peripherals
* @param pCcmHandle EFTU Ccm processing handle
* @param pConfig Ccm InitStruct
*/
void EFTU_CCM_Init(EFTU_CCM_HandleType *pCcmHandle, EFTU_CCM_InitStruct *pConfig);
/**
* @brief Config EFTU debug mode
* @param pCcmHandle EFTU Ccm processing handle
* @param eDebugMode EFTU debug mode
*/
void EFTU_CCM_ConfigDebugMode(EFTU_CCM_HandleType *pCcmHandle,EFTU_CCM_DebugMode eDebugMode);
/**
* @brief Enable EFTU Tim0
* @param pCcmHandle EFTU Ccm processing handle
*/
void EFTU_CCM_EnableTim0(EFTU_CCM_HandleType *pCcmHandle);
/**
* @brief Enable EFTU Tom0
* @param pCcmHandle EFTU Ccm processing handle
*/
void EFTU_CCM_EnableTom0(EFTU_CCM_HandleType *pCcmHandle);
/**
* @brief Enable EFTU Tom1
* @param pCcmHandle EFTU Ccm processing handle
*/
void EFTU_CCM_EnableTom1(EFTU_CCM_HandleType *pCcmHandle);
/**
* @brief Disable EFTU Tim0
* @param pCcmHandle EFTU Ccm processing handle
*/
void EFTU_CCM_DisableTim0(EFTU_CCM_HandleType *pCcmHandle);
/**
* @brief Disable EFTU Tom0
* @param pCcmHandle EFTU Ccm processing handle
*/
void EFTU_CCM_DisableTom0(EFTU_CCM_HandleType *pCcmHandle);
/**
* @brief Disable EFTU Tom1
* @param pCcmHandle EFTU Ccm processing handle
*/
void EFTU_CCM_DisableTom1(EFTU_CCM_HandleType *pCcmHandle);
/**
* @brief Config EFTU Cmp peripherals
* @param pCcmHandle EFTU Ccm processing handle
* @param pCmpInitStruct Cmp InitStruct
*/
void EFTU_CCM_ConfigCmp(EFTU_CCM_HandleType *pCcmHandle,EFTU_CCM_CmpConfigStruct *pCmpInitStruct);
/**
* @brief Config cluster cmu clock source.
* @param pCcmHandle EFTU Ccm processing handle
* @param eClusterClk Cluster clock index
* @param pCmpInitStruct Cluster clock select
* @param pCmuHandle EFTU cmu processing handle
* @param u32Freq user define frequency
*/
void EFTU_CCM_ConfigClusterCmuClock(EFTU_CCM_HandleType *pCcmHandle, EFTU_CCM_ClusterCmuClkType eClusterClk, EFTU_CCM_ClusterCmuClkSelectType eCcmClockSel,EFTU_CMU_HandleType *pCmuHandle,uint32 u32Freq);
/**
* @brief Config cluster Tim Err Interrupt.
* @param pCcmHandle EFTU Ccm processing handle
* @param pTimErrStruct Tim Err InitStruct
*/
void EFTU_CCM_ConfigTimErrorInterrupt(EFTU_CCM_HandleType *pCcmHandle,EFTU_CCM_TimErrIntStruct *pTimErrStruct);
/**
* @brief Config cluster Dma Request.
* @param pCcmHandle EFTU Ccm processing handle
* @param pDmaReqStruct Tim Dma InitStruct
*/
void EFTU_CCM_ConfigDmaRequest(EFTU_CCM_HandleType *pCcmHandle, EFTU_CCM_DmaReqStruct *pDmaReqStruct);
/**
* @brief Config global trigger.(Only for EFTU0)
* @param pCcmHandle EFTU Ccm processing handle
* @param u8TriggerIndex Trigger Index
* @param pTriggerStruct Trigger InitStruct
*/
void EFTU_CCM_ConfigGlobalTrigger(EFTU_CCM_HandleType *pCcmHandle,uint8_t u8TriggerIndex,EFTU_CCM_GlobalTriggerMode *pTriggerStruct);
/**
* @brief Ccm Interrupt process
* @param pCcmHandle EFTU Ccm processing handle
*/
void EFTUn_CCM_IRQHandler(EFTU_CCM_HandleType *pCcmHandle);
#endif
#endif /* DRIVER_INCLUDE_MODULE_DRIVER_EFTU_CCM_H_ */