HwA_Flagchip_FC7240_V2/Inc/HwA_scm.h

725 lines
18 KiB
C

/**
* @file HwA_scm.h
* @author flagchip
* @brief Hardware access layer for SCM
* @version 2.0.0
* @date 2024-08-20
*
* SDK Version: 2.6.0
*
* @copyright Copyright (c) 2020-2024 Flagchip Semiconductors Co., Ltd.
*
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2023-12-15 Flagchip055 N/A First version for FC7300
* 2.0.0 2024-10-12 Flagchip055 N/A Change version and release
******************************************************************************** */
#ifndef _HWA_SCM_H_
#define _HWA_SCM_H_
#include "device_header.h"
#if SCM_INSTANCE_COUNT > 0U
/**
* @brief SCM adc trigger selection
*/
typedef enum
{
SCM_ADC_INSTANCE_0 = 0U,
SCM_ADC_INSTANCE_1 = 1U,
SCM_ADC_INSTANCE_2 = 2U,
SCM_ADC_INSTANCE_3 = 3U,
SCM_ADC_INSTANCE_4 = 4U,
SCM_ADC_INSTANCE_5 = 5U,
} SCM_AdcInstance;
/**
* @brief SCM adc trigger selection
*/
typedef enum
{
SCM_ADC_TRIGGER_PTIMER = 0U,
SCM_ADC_TRIGGER_TRGSEL = 1U,
} SCM_AdcTriggerSel;
/**
* @brief SCM adc pre-trigger selection
*/
typedef enum
{
SCM_ADC_PRE_TRIGGER_PTIMER = 0U,
SCM_ADC_PRE_TRIGGER_TRGSEL = 1U,
SCM_ADC_PRE_TRIGGER_SCM_SOFTWARE_PRE_TRIGGER = 2U,
} SCM_AdcPreTriggerSel;
/**
* @brief SCM software trigger source
*/
typedef enum
{
SCM_SOFTWARE_PRE_TRIGGER_0 = 0U, /*!< SCM software pre-trigger 0 */
SCM_SOFTWARE_PRE_TRIGGER_1 = 1U, /*!< SCM software pre-trigger 1 */
SCM_SOFTWARE_PRE_TRIGGER_2 = 2U, /*!< SCM software pre-trigger 2 */
SCM_SOFTWARE_PRE_TRIGGER_3 = 3U, /*!< SCM software pre-trigger 3 */
} SCM_SoftwarePreTrigger;
/**
* @defgroup HwA_scm HwA_scm
* @ingroup module_driver_scm
* @{
*/
/********* Local typedef ************/
/********* Local inline function ************/
/**
* @brief Get UIDL data(Unique identification for the chip. Loaded from NVR)
*
* @return return value
*/
LOCAL_INLINE uint32_t SCM_HWA_GetData_UIDL(void)
{
return SCM->UIDL;
}
/**
* @brief Get UIDML data(Unique identification for the chip. Loaded from NVR)
*
* @return return value
*/
LOCAL_INLINE uint32_t SCM_HWA_GetData_UIDML(void)
{
return SCM->UIDML;
}
/**
* @brief Get UIDMH data(Unique identification for the chip. Loaded from NVR)
*
* @return return value
*/
LOCAL_INLINE uint32_t SCM_HWA_GetData_UIDMH(void)
{
return SCM->UIDMH;
}
/**
* @brief Get UIDH data(Unique identification for the chip. Loaded from NVR)
*
* @return return value
*/
LOCAL_INLINE uint32_t SCM_HWA_GetData_UIDH(void)
{
return SCM->UIDH;
}
/**
* @brief Get Family Identification
*
* @return return value
*/
LOCAL_INLINE uint8_t SCM_HWA_GetData_FamilyID(void)
{
return (uint8_t)((SCM->PARTID0 & (uint32_t)SCM_PARTID0_FAM_ID_MASK) >> (uint32_t)SCM_PARTID0_FAM_ID_SHIFT);
}
/**
* @brief Get Revision Identification
*
* @return return value
*/
LOCAL_INLINE uint8_t SCM_HWA_GetData_RevID(void)
{
return (uint8_t)((SCM->PARTID0 & (uint32_t)SCM_PARTID0_REVID_MASK));
}
/**
* @brief Set the ISM_ROUTING register value
*
* @param u32Val value to be set
*/
LOCAL_INLINE void SCM_HWA_Set_ISM_ROUTING(uint32_t u32Val)
{
SCM->ISM_ROUTING = u32Val;
}
/**
* @brief Get CHIPCFG0 register status
*
* @return return value
*/
LOCAL_INLINE uint32_t SCM_HWA_Get_CHIPCFG0(void)
{
return SCM->CHIPCFG0;
}
/**
* @brief Set the SOCMISC register value
*
* @param u32Val value to be set
*/
LOCAL_INLINE void SCM_HWA_Set_SOCMISC(uint32_t u32Val)
{
SCM->SOCMISC = u32Val;
}
/**
* @brief Get the SOCMISC register status
*
* @return Lock status
*/
LOCAL_INLINE uint32_t SCM_HWA_Get_SOCMISC(void)
{
return SCM->SOCMISC;
}
#if SCM_GET_DEVICEID_SUPPORT
/**
* @brief Get device ID
*
* @return return value
*/
LOCAL_INLINE uint32_t SCM_HWA_GetData_DeviceID(void)
{
return ((SCM->CHIPCFG1 & (uint32_t)SCM_CHIPCFG1_DEVICE_ID_MASK) >> (uint32_t)SCM_CHIPCFG1_DEVICE_ID_SHIFT);
}
#endif
/**
* @brief Get SYSAP_CTRL register status
*
* @return Register status
*/
LOCAL_INLINE uint32_t SCM_HWA_Get_SYSAP_CTRL(void)
{
return SCM->SYSAP_CTRL;
}
#if SCM_CRC_SUPPORT
/**
* @brief Set the CRCCSR register value
*
* @param u32Val value to be set
*/
LOCAL_INLINE void SCM_HWA_Set_CRCCSR(uint32_t u32Val)
{
SCM->CRCCSR = u32Val;
}
/**
* @brief Get CRCCSR register status
*
* @return Register status
*/
LOCAL_INLINE uint32_t SCM_HWA_Get_CRCCSR(void)
{
return SCM->CRCCSR;
}
/**
* @brief Set CRC check enable/disable
*
* @param bEnable Enable/Disable
*/
LOCAL_INLINE void SCM_HWA_SetCrcCheckEnable(bool bEnable)
{
SCM->CRCCSR = (SCM->CRCCSR & (~(SCM_CRCCSR_CHKEN_MASK))) | SCM_CRCCSR_CHKEN(bEnable);
}
/**
* @brief Set CRC trigger enable/disable
*
* @param bEnable Enable/Disable
*/
LOCAL_INLINE void SCM_HWA_SetCrcTriggerEnable(bool bEnable)
{
SCM->CRCCSR = (SCM->CRCCSR & (~(SCM_CRCCSR_TRGEN_MASK))) | SCM_CRCCSR_TRGEN(bEnable);
}
/**
* @brief Set CRC error out enable/disable
*
* @param bEnable Enable/Disable
*/
LOCAL_INLINE void SCM_HWA_SetCrcErrorOutEnable(bool bEnable)
{
SCM->CRCCSR = (SCM->CRCCSR & (~(SCM_CRCCSR_EOEN_MASK))) | SCM_CRCCSR_EOEN(bEnable);
}
/**
* @brief Clear CRC error flag
*/
LOCAL_INLINE void SCM_HWA_ClearCrcErrorFlag(void)
{
SCM->CRCCSR |= SCM_CRCCSR_ERR_MASK;
}
/**
* @brief Get CRC Done Flag
*
* @return CRC Done Flag
*/
LOCAL_INLINE bool SCM_HWA_GetCrcDoneFlag(void)
{
return ((SCM->CRCCSR & SCM_CRCCSR_BUY_MASK) == SCM_CRCCSR_BUY_MASK) ? false : true;
}
/**
* @brief Set CRC software generate enable/disable
*
* @param bEnable Enable/Disable
*/
LOCAL_INLINE void SCM_HWA_SetCrcGenerateEnable(bool bEnable)
{
SCM->CRCCSR = (SCM->CRCCSR & (~(SCM_CRCCSR_GEN_MASK))) | SCM_CRCCSR_GEN(bEnable);
}
/**
* @brief Get CRC result
*
* @return CRC result
*/
LOCAL_INLINE uint32_t SCM_HWA_GetCrcResult(void)
{
return SCM->CRCRES;
}
#endif
/**
* @brief Set the FTU_GTBC register value
*
* @param u32Val value to be set
*/
LOCAL_INLINE void SCM_HWA_Set_FTU_GTBC(uint32_t u32Val)
{
#if defined (SCM_FTU_GTBC_FTU_GTBC_MASK)
SCM->FTU_GTBC = u32Val;
#elif defined (SCM_FTU_GTBC_FTU0_GTBC_MASK)
SCM->FTU_GTBC = u32Val;
#else
#error "No valid SCM_FTU_GTB*_FTU*_GTBC_MASK definition"
#endif
}
#if defined(SCM_GTBC_TPU_SELECT_SUPPORT) && (SCM_GTBC_TPU_SELECT_SUPPORT)
/**
* @brief Configure TPU global time base control selection
*
* @param bEn Enable or disable TPU Global Time Base
*/
LOCAL_INLINE void SCM_HWA_ConfigTpuGTBSelect(bool bEn)
{
#if defined(SCM_FTU_GTBC_ETPU_GTBC_MASK)
SCM->FTU_GTBC &= ~(uint32_t)SCM_FTU_GTBC_ETPU_GTBC_MASK;
SCM->FTU_GTBC |= (uint32_t)SCM_FTU_GTBC_ETPU_GTBC(bEn);
#elif defined(SCM_FTU_GTBC_TPU_GTBC_MASK)
SCM->FTU_GTBC &= ~(uint32_t)SCM_FTU_GTBC_TPU_GTBC_MASK;
SCM->FTU_GTBC |= (uint32_t)SCM_FTU_GTBC_TPU_GTBC(bEn);
#else
#error "No valid SCM_FTU_GTBC_*TPU definition"
#endif
}
#endif
/**
* @brief Set TPU clock enable/disable
*
* @param bEnable Enable/Disable
*/
LOCAL_INLINE void SCM_HWA_SUBSYS_PCC_SetEnable_TPUClock(bool bEnable)
{
#if defined(SCM_SUBSYSPCC_SUPPORT) && defined(SCM_SUBSYSPCC_SUPPORT)
SCM->SUBSYS_PCC = ((SCM->SUBSYS_PCC & (~(uint32_t)SCM_SUBSYS_PCC_CLKEN_TPU_MASK)) |
SCM_SUBSYS_PCC_CLKEN_TPU(bEnable));
#elif (SCM_TPUPCC_SUPPORT && SCM_TPUPCC_SUPPORT)
SCM->TPU_PCC = ((SCM->TPU_PCC & (~(uint32_t)SCM_TPU_PCC_CLKEN_TPU_MASK)) |
SCM_TPU_PCC_CLKEN_TPU(bEnable));
#else
PROCESS_UNUSED_VAR(bEnable);
#endif
}
/**
* @brief Set SubSystem clock enable/disable
*
* @param bEnable Enable/Disable
*/
LOCAL_INLINE void SCM_HWA_SUBSYS_PCC_SetEnable_SubSystemClock(bool bEnable)
{
#if (SCM_FLEXHSM_PCC_SUPPORT && SCM_FLEXHSM_PCC_SUPPORT)
SCM->FLEXHSM_PCC = ((SCM->FLEXHSM_PCC & (~(uint32_t)SCM_FLEXHSM_PCC_CLKEN_FLEXHSM_MASK)) |
SCM_FLEXHSM_PCC_CLKEN_FLEXHSM(bEnable));
#elif (SCM_SUBSYSPCC_SUPPORT && SCM_SUBSYSPCC_SUPPORT)
SCM->SUBSYS_PCC = ((SCM->SUBSYS_PCC & (~(uint32_t)SCM_SUBSYS_PCC_CLKEN_SUBSYS_MASK)) |
SCM_SUBSYS_PCC_CLKEN_SUBSYS(bEnable));
#else
PROCESS_UNUSED_VAR(bEnable);
#endif
}
#if defined(SCM_GTBC_FTU_SELECT_SUPPORT) && (SCM_GTBC_FTU_SELECT_SUPPORT)
/**
* @brief Set FTU global time base control selection
*
* @param u32SelectedFtu The GTBC mask of Selected Ftu instance,it is the or value of SCM_FTUGTBCtrlType.
* eg.u32SelectedFtu == 1 means FTU0 selected, u32SelectedFtu == 5 means FTU0 and FTU2 selected.
*/
LOCAL_INLINE void SCM_HWA_SetFtuGTBSelect(uint32_t u32SelectedFtu)
{
SCM->FTU_GTBC |= (u32SelectedFtu & 0xFFu) << SCM_FTU_GTBC_FTU0_GTBC_SHIFT;
}
/**
* @brief Clear FTU global time base control selection
*
* @param u32SelectedFtu The GTBC mask of Selected Ftu instance,it is the or value of SCM_FTUGTBCtrlType.
* eg.u32SelectedFtu == 1 means FTU0 selected, u32SelectedFtu == 5 means FTU0 and FTU2 selected.
*/
LOCAL_INLINE void SCM_HWA_ClearFtuGTBSelect(uint32_t u32SelectedFtu)
{
SCM->FTU_GTBC &= ~(uint32_t)((u32SelectedFtu & 0xFFu) << SCM_FTU_GTBC_FTU0_GTBC_SHIFT);
}
#endif
#if defined(SCM_FTU_GTBC_TSTMP_TRIG_SUPPORT) && (SCM_FTU_GTBC_TSTMP_TRIG_SUPPORT)
/**
* @brief Configure FTU Global Time Base Control Mask Register
*
* @param u8FtuIndex The selected FTU instance (must be 0 ~ 7)
* @param u32Value Value to be set (must be 0 ~ 15)
*/
LOCAL_INLINE void SCM_HWA_ConfigFtuGTBMask(uint8_t u8FtuIndex, uint32_t u32Value)
{
#if defined(SCM_FTU_GTBEM_FTU0_GTBEM_MASK)
SCM->FTU_GTBEM = (SCM->FTU_GTBEM & (~((uint32_t)SCM_FTU_GTBEM_FTU0_GTBEM_MASK << (SCM_FTU_GTBEM_FTU0_GTBEM_WIDTH * u8FtuIndex))))
| (((uint32_t)u32Value & SCM_FTU_GTBEM_FTU0_GTBEM_MASK) << (SCM_FTU_GTBEM_FTU0_GTBEM_WIDTH * u8FtuIndex));
#elif defined(SCM_FTU_GTBCM_FTU0_GTBCM_MASK)
SCM->FTU_GTBCM = (SCM->FTU_GTBCM & (~((uint32_t)SCM_FTU_GTBCM_FTU0_GTBCM_MASK << (SCM_FTU_GTBCM_FTU0_GTBCM_WIDTH * u8FtuIndex))))
| (((uint32_t)u32Value & SCM_FTU_GTBCM_FTU0_GTBCM_MASK) << (SCM_FTU_GTBCM_FTU0_GTBCM_WIDTH * u8FtuIndex));
#else
#error "No valid SCM_FTU_GTB*M_FTU*_GTB*M definition"
#endif
}
/**
* @brief Clear FTU Global Time Base Control Mask Register
*
* @param u8FtuIndex The selected FTU instance (must be 0 ~ 7)
*/
LOCAL_INLINE void SCM_HWA_ClearFtuGTBMask(uint8_t u8FtuIndex)
{
#if defined(SCM_FTU_GTBEM_FTU0_GTBEM_MASK)
SCM->FTU_GTBEM &= ~ ((uint32_t)SCM_FTU_GTBEM_FTU0_GTBEM_MASK << (SCM_FTU_GTBEM_FTU0_GTBEM_WIDTH * u8FtuIndex));
#elif defined(SCM_FTU_GTBCM_FTU0_GTBCM_MASK)
SCM->FTU_GTBCM &= ~ ((uint32_t)SCM_FTU_GTBCM_FTU0_GTBCM_MASK << (SCM_FTU_GTBCM_FTU0_GTBCM_WIDTH * u8FtuIndex));
#else
#error "No valid SCM_FTU_GTB*M_FTU*_GTB*M definition"
#endif
}
#endif
#if SCM_PTIMER_CHANNEL_SELECTION_SUPPORT
/**
* @brief Set the ADC_ROUTING2 register value
*
* @param u32Val value to be set
*/
LOCAL_INLINE void SCM_HWA_Set_ADC_ROUTING2(uint32_t u32Val)
{
SCM->ADC_ROUTING2 = u32Val;
}
/**
* @brief Get the ADC_ROUTING2 register status
*
* @return Lock status
*/
LOCAL_INLINE uint32_t SCM_HWA_Get_ADC_ROUTING2(void)
{
return SCM->ADC_ROUTING2;
}
#endif
#ifdef SCM_CPU1VTOR_CPU1_INIT_VECTOR_MASK
/**
* @brief Set the CPU1VTOR register value
*
* @param u32Val value to be set
*/
LOCAL_INLINE void SCM_HWA_Set_CPU1VTOR(uint32_t u32Val)
{
SCM->CPU1VTOR = u32Val;
}
/**
* @brief Get the CPU1VTOR register status
*
* @return Lock status
*/
LOCAL_INLINE uint32_t SCM_HWA_Get_CPU1VTOR(void)
{
return SCM->CPU1VTOR;
}
/**
* @brief Set CPU1 Vector Table Register vector initial vector
*
* @param u32Value value to be set
*/
LOCAL_INLINE void SCM_HWA_CPU1VTOR_SetVector(uint32_t u32Value)
{
uint32_t u32RegVal = SCM->CPU1VTOR;
SCM->CPU1VTOR = ((u32RegVal & (~(uint32_t)SCM_CPU1VTOR_CPU1_INIT_VECTOR_MASK)) | SCM_CPU1VTOR_CPU1_INIT_VECTOR(u32Value));
}
#endif
#ifdef SCM_CPU2VTOR_CPU2_INIT_VECTOR_MASK
/**
* @brief Set the CPU2VTOR register value
*
* @param u32Val value to be set
*/
LOCAL_INLINE void SCM_HWA_Set_CPU2VTOR(uint32_t u32Val)
{
SCM->CPU2VTOR = u32Val;
}
/**
* @brief Get the CPU2VTOR register status
*
* @return Lock status
*/
LOCAL_INLINE uint32_t SCM_HWA_Get_CPU2VTOR(void)
{
return SCM->CPU2VTOR;
}
/**
* @brief Set Core Hold Register vector initial vector
*
* @param u32Value value to be set
*/
LOCAL_INLINE void SCM_HWA_CPU2VTOR_SetVector(uint32_t u32Value)
{
uint32_t u32RegVal = SCM->CPU2VTOR;
SCM->CPU2VTOR = ((u32RegVal & (~(uint32_t)SCM_CPU2VTOR_CPU2_INIT_VECTOR_MASK)) | SCM_CPU2VTOR_CPU2_INIT_VECTOR(u32Value));
}
#endif
#ifdef SCM_CPU3VTOR_CPU3_INIT_VECTOR_MASK
/**
* @brief Set the CPU3VTOR register value
*
* @param u32Val value to be set
*/
LOCAL_INLINE void SCM_HWA_Set_CPU3VTOR(uint32_t u32Val)
{
SCM->CPU3VTOR = u32Val;
}
/**
* @brief Get the CPU3VTOR register status
*
* @return Lock status
*/
LOCAL_INLINE uint32_t SCM_HWA_Get_CPU3VTOR(void)
{
return SCM->CPU3VTOR;
}
/**
* @brief Set Core Hold Register vector initial vector
*
* @param u32Value value to be set
*/
LOCAL_INLINE void SCM_HWA_CPU3VTOR_SetVector(uint32_t u32Value)
{
uint32_t u32RegVal = SCM->CPU3VTOR;
SCM->CPU3VTOR = ((u32RegVal & (~(uint32_t)SCM_CPU3VTOR_CPU3_INIT_VECTOR_MASK)) | SCM_CPU3VTOR_CPU3_INIT_VECTOR(u32Value));
}
#endif
#ifdef SCM_CORE_HOLD_CPU1_CORE_HOLD_MASK
/**
* @brief Set cpu1 hold enable status
*
* @param bEnable Enable/Disable status
*/
LOCAL_INLINE void SCM_HWA_SetCOREHOLD_Cpu1Hold(bool bEnable)
{
if (true == bEnable)
{
SCM->CORE_HOLD |= (uint32_t)SCM_CORE_HOLD_CPU1_CORE_HOLD_MASK;
}
else
{
SCM->CORE_HOLD &= ~(uint32_t)SCM_CORE_HOLD_CPU1_CORE_HOLD_MASK;
}
}
#endif
#ifdef SCM_CORE_HOLD_CPU2_CORE_HOLD_MASK
/**
* @brief Set cpu2 hold enable status
*
* @param bEnable Enable/Disable status
*/
LOCAL_INLINE void SCM_HWA_SetCOREHOLD_Cpu2Hold(bool bEnable)
{
if (true == bEnable)
{
SCM->CORE_HOLD |= (uint32_t)SCM_CORE_HOLD_CPU2_CORE_HOLD_MASK;
}
else
{
SCM->CORE_HOLD &= ~(uint32_t)SCM_CORE_HOLD_CPU2_CORE_HOLD_MASK;
}
}
#endif
#ifdef SCM_CORE_HOLD_CPU3_CORE_HOLD_MASK
/**
* @brief Set cpu3 hold enable status
*
* @param bEnable Enable/Disable status
*/
LOCAL_INLINE void SCM_HWA_SetCOREHOLD_Cpu3Hold(bool bEnable)
{
if (true == bEnable)
{
SCM->CORE_HOLD |= (uint32_t)SCM_CORE_HOLD_CPU3_CORE_HOLD_MASK;
}
else
{
SCM->CORE_HOLD &= ~(uint32_t)SCM_CORE_HOLD_CPU3_CORE_HOLD_MASK;
}
}
#endif
#if SCM_ADC_PRE_TRIGGER_SEL_SUPPORT
LOCAL_INLINE void SCM_HWA_SetAdcPretriggerSel(SCM_AdcInstance eInstance, SCM_AdcPreTriggerSel ePreTriggerSel)
{
#if ADC_INSTANCE_COUNT > 5U
if (eInstance == SCM_ADC_INSTANCE_5)
{
SCM->ADC_ROUTING1 = (SCM->ADC_ROUTING1 & ~SCM_ADC_ROUTING1_ADC5_PRETRGSEL_MASK) |
SCM_ADC_ROUTING1_ADC5_PRETRGSEL(ePreTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 4U
if (eInstance == SCM_ADC_INSTANCE_4)
{
SCM->ADC_ROUTING1 = (SCM->ADC_ROUTING1 & ~SCM_ADC_ROUTING1_ADC4_PRETRGSEL_MASK) |
SCM_ADC_ROUTING1_ADC4_PRETRGSEL(ePreTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 3U
if (eInstance == SCM_ADC_INSTANCE_3)
{
SCM->ADC_ROUTING = (SCM->ADC_ROUTING & ~SCM_ADC_ROUTING_ADC3_PRETRGSEL_MASK) |
SCM_ADC_ROUTING_ADC3_PRETRGSEL(ePreTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 2U
if (eInstance == SCM_ADC_INSTANCE_2)
{
SCM->ADC_ROUTING = (SCM->ADC_ROUTING & ~SCM_ADC_ROUTING_ADC2_PRETRGSEL_MASK) |
SCM_ADC_ROUTING_ADC2_PRETRGSEL(ePreTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 1U
if (eInstance == SCM_ADC_INSTANCE_1)
{
SCM->ADC_ROUTING = (SCM->ADC_ROUTING & ~SCM_ADC_ROUTING_ADC1_PRETRGSEL_MASK) |
SCM_ADC_ROUTING_ADC1_PRETRGSEL(ePreTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 0U
if (eInstance == SCM_ADC_INSTANCE_0)
{
SCM->ADC_ROUTING = (SCM->ADC_ROUTING & ~SCM_ADC_ROUTING_ADC0_PRETRGSEL_MASK) |
SCM_ADC_ROUTING_ADC0_PRETRGSEL(ePreTriggerSel);
}
#endif
}
#endif
#if SCM_ADC_TRIGGER_SEL_SUPPORT
LOCAL_INLINE void SCM_HWA_SetAdcTriggerSel(SCM_AdcInstance eInstance, SCM_AdcTriggerSel eTriggerSel)
{
#if ADC_INSTANCE_COUNT > 5U
if (eInstance == SCM_ADC_INSTANCE_5)
{
SCM->ADC_ROUTING1 = (SCM->ADC_ROUTING1 & ~SCM_ADC_ROUTING1_ADC5_TRGSEL_MASK) |
SCM_ADC_ROUTING1_ADC5_TRGSEL(eTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 4U
if (eInstance == SCM_ADC_INSTANCE_4)
{
SCM->ADC_ROUTING1 = (SCM->ADC_ROUTING1 & ~SCM_ADC_ROUTING1_ADC4_TRGSEL_MASK) |
SCM_ADC_ROUTING1_ADC4_TRGSEL(eTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 3U
if (eInstance == SCM_ADC_INSTANCE_3)
{
SCM->ADC_ROUTING = (SCM->ADC_ROUTING & ~SCM_ADC_ROUTING_ADC3_TRGSEL_MASK) |
SCM_ADC_ROUTING_ADC3_TRGSEL(eTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 2U
if (eInstance == SCM_ADC_INSTANCE_2)
{
SCM->ADC_ROUTING = (SCM->ADC_ROUTING & ~SCM_ADC_ROUTING_ADC2_TRGSEL_MASK) |
SCM_ADC_ROUTING_ADC2_TRGSEL(eTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 1U
if (eInstance == SCM_ADC_INSTANCE_1)
{
SCM->ADC_ROUTING = (SCM->ADC_ROUTING & ~SCM_ADC_ROUTING_ADC1_TRGSEL_MASK) |
SCM_ADC_ROUTING_ADC1_TRGSEL(eTriggerSel);
}
else
#endif
#if ADC_INSTANCE_COUNT > 0U
if (eInstance == SCM_ADC_INSTANCE_0)
{
SCM->ADC_ROUTING = (SCM->ADC_ROUTING & ~SCM_ADC_ROUTING_ADC0_TRGSEL_MASK) |
SCM_ADC_ROUTING_ADC0_TRGSEL(eTriggerSel);
}
#endif
}
#endif
#if SCM_HSADC_BIAS_FORCE_ENABLE_SUPPORT
LOCAL_INLINE void SCM_HWA_SetHsadcBiasForceEnable(void)
{
SCM->ADC_CFG = SCM->ADC_CFG | (1U << 31U);
}
#endif
/** @}*/
#endif /* #if SCM_INSTANCE_COUNT > 0U */
#endif /*#ifndef _HWA_SCM_H_ */