HwA_Flagchip_FC7240_V2/Inc/HwA_ssi.h

930 lines
35 KiB
C

/**
* @file HwA_ssi.h
* @author flagchip
* @brief ssi hardware access layer
* @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
* --------- ---------- ------------ ---------- ---------------
* 2.0.0 2023-12-12 Flagchip054 N/A First version for FC7300
******************************************************************************** */
#ifndef _HWA_SSI_H_
#define _HWA_SSI_H_
#include "device_header.h"
#if SSI_INSTANCE_COUNT > 0U
/**
* @brief Enable Function Clock
*
* @param SSI instance value
*/
LOCAL_INLINE void SSI_HWA_Func_Enable(SSI_Type *pSsi)
{
pSsi->GCR |= SSI_GCR_FUNC_EN_MASK;
}
/**
* @brief Disable Function Clock
*
* @param SSI Pointer to the SSI_Type structure representing the SSI peripheral instance
*/
LOCAL_INLINE void SSI_HWA_Func_Disable(SSI_Type *pSsi)
{
pSsi->GCR &= ~SSI_GCR_FUNC_EN_MASK;
}
/**
* @brief Set Function Clock Divider
*
* @param SSI Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u32Value devider
*/
LOCAL_INLINE void SSI_HWA_SetFuncDev(SSI_Type *pSsi, uint32_t u32Value)
{
pSsi->GCR = (pSsi->GCR & ~SSI_GCR_FUNC_DIV_MASK) | SSI_GCR_FUNC_DIV(u32Value);
}
/**
* @brief Get the value of the Global Status Register (GSR)
*
* This function reads the value of the Global Status Register (GSR) for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the Global Status Register (GSR)
*/
LOCAL_INLINE uint32_t SSI_HWA_GetGlobalStatus(SSI_Type *pSsi)
{
return pSsi->GSR;
}
/**
* @brief Get the value of the Global Error Status
*
* This function reads the value of the Global Error Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the Global Error Status
*/
LOCAL_INLINE uint32_t SSI_HWA_GetGlobalErrStatus(SSI_Type *pSsi)
{
uint32_t u32ErrStatus;
u32ErrStatus = pSsi->GSR & ~SSI_GSR_SPC_VLD_MASK;
return u32ErrStatus;
}
/**
* @brief Get the value of the SpcVld Status
*
* This function reads the value of the SpcVld Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the SpcVld Status
*/
LOCAL_INLINE uint32_t SSI_HWA_GetSpcVldStatus(SSI_Type *pSsi)
{
return ((pSsi->GSR & SSI_GSR_SPC_VLD_MASK) >> SSI_GSR_SPC_VLD_SHIFT);
}
/**
* @brief Get the value of the Wheel Stop Status
*
* This function reads the value of the Wheel Stop Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the SpcVld
*/
LOCAL_INLINE uint32_t SSI_HWA_GetWhlStopStatus(SSI_Type *pSsi)
{
return ((pSsi->GSR & SSI_GSR_WHL_STOP_MASK) >> SSI_GSR_WHL_STOP_WIDTH);
}
/**
* @brief Get the value of the Sensor Protocol Counter Timeout Status
*
* This function reads the value of the SPC Timeout Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the SpcTimeout Status
*/
LOCAL_INLINE uint32_t SSI_HWA_GetSpcTimeoutStatus(SSI_Type *pSsi)
{
return ((pSsi->GSR & SSI_GSR_SPC_TIMEOUT_MASK) >> SSI_GSR_SPC_TIMEOUT_SHIFT);
}
/**
* @brief Get the value of SPC Range Status
*
* This function reads the value of the SPC Range Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the SPC Range Status
*/
LOCAL_INLINE uint32_t SSI_HWA_GetSpcRangeErrStatus(SSI_Type *pSsi)
{
return ((pSsi->GSR & SSI_GSR_SPC_RANGE_ERR_MASK) >> SSI_GSR_SPC_RANGE_ERR_SHIFT);
}
/**
* @brief Get the value of Protocol Decoder Status
*
* This function reads the value of the Protocol Decoder Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the Protocol Decoder Status
*/
LOCAL_INLINE uint32_t SSI_HWA_GetDecodeErrStatus(SSI_Type *pSsi)
{
return ((pSsi->GSR & SSI_GSR_DECODE_ERR_MASK) >> SSI_GSR_DECODE_ERR_SHIFT);
}
/**
* @brief Get the value of Protocol Interval Status
*
* This function reads the value of the Protocol Interval Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the Protocol Interval Status
*/
LOCAL_INLINE uint32_t SSI_HWA_GetIntervalErrStatus(SSI_Type *pSsi)
{
return ((pSsi->GSR & SSI_GSR_INTERVAL_ERR_MASK) >> SSI_GSR_INTERVAL_ERR_SHIFT);
}
/**
* @brief Get the value of Pulse Width Status
*
* This function reads the value of the Pulse Width Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of the Pulse Width Status
*/
LOCAL_INLINE uint32_t SSI_HWA_GetPulseWdhErrStatus(SSI_Type *pSsi)
{
return ((pSsi->GSR & SSI_GSR_PULSE_WIDTH_ERR_MASK) >> SSI_GSR_PULSE_WIDTH_ERR_SHIFT);
}
/**
* @brief Get the value of Protocol Status
*
* This function reads the value of the Protocol Status for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @return The value of Protocol Status
*/
LOCAL_INLINE uint32_t SSI_HWA_GetProtErrStatus(SSI_Type *pSsi)
{
return ((pSsi->GSR & SSI_GSR_PROTOC_ERR_MASK) >> SSI_GSR_PROTOC_ERR_SHIFT);
}
/**
* @brief Set the Lower Part of the Global Counter Window Register (GCWLR)
*
* This function sets the lower part of the Global Counter Window Register (GCWLR) for the specified
* SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u32Value The value to set in the lower part of the GCWLR register
*/
LOCAL_INLINE void SSI_HWA_SetGlobalCounterWindowsL(SSI_Type *pSsi, uint32_t u32Value)
{
pSsi->GCWLR = (u32Value & SSI_GCWLR_WIN_L_MASK);
}
/**
* @brief Set the High Part of the Global Counter Window Register (GCWHR)
*
* This function sets the High part of the Global Counter Window Register (GCWHR) for the specified
* SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u32Value The value to set in the High part of the GCWHR register
*/
LOCAL_INLINE void SSI_HWA_SetGlobalCounterWindowsH(SSI_Type *pSsi, uint32_t u32Value)
{
pSsi->GCWHR = (u32Value & SSI_GCWHR_WIN_H_MASK);
}
/**
* @brief Set the Global Protocol Configuration Register (GPCR)
*
* This function sets the Global Protocol Configuration Register (GPCR) for the specified SSI
* peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u32Value The value to set in the GPCR register
*/
LOCAL_INLINE void SSI_HWA_SetGlobalProCfg(SSI_Type *pSsi, uint32_t u32Value)
{
pSsi->GPCR = u32Value;
}
/**
* @brief Set the AK Interrupt Error Threshold Configuration
*
* This function sets the AK Interrupt Error Threshold configuration in the Global Protocol
* Configuration Register (GPCR) for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u32Value The value to set for the AK Interrupt Error Threshold
*/
LOCAL_INLINE void SSI_HWA_SetAKIntErrThrCfg(SSI_Type *pSsi, uint32_t u32Value)
{
pSsi->GPCR = (pSsi->GPCR &= ~SSI_GPCR_AK_IETH_MASK) | SSI_GPCR_AK_IETH(u32Value);
}
/**
* @brief Set the AK Period Error Threshold Configuration
*
* This function sets the AK Period Error Threshold configuration in the Global Protocol
* Configuration Register (GPCR) for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u32Value The value to set for the AK Period Error Threshold
*/
LOCAL_INLINE void SSI_HWA_SetAKPerErrThrCfg(SSI_Type *pSsi, uint32_t u32Value)
{
pSsi->GPCR = (pSsi->GPCR &= ~SSI_GPCR_AK_PETH_MASK) | SSI_GPCR_AK_PETH(u32Value);
}
/**
* @brief Set the PWM Period Error Threshold Configuration
*
* This function sets the PWM Period Error Threshold configuration in the Global Protocol
* Configuration Register (GPCR) for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u32Value The value to set for the PWM Period Error Threshold
*/
LOCAL_INLINE void SSI_HWA_SetPwmPerErrThrCfg(SSI_Type *pSsi, uint32_t u32Value)
{
pSsi->GPCR = (pSsi->GPCR &= ~SSI_GPCR_PWM_PETH_MASK) | SSI_GPCR_PWM_PETH(u32Value);
}
/**
* @brief Set the PWM Reference Pulse Width
*
* This function sets the PWM Reference Pulse Width configuration in the Global Protocol
* Configuration Register (GPCR) for the specified SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u32Value The value to set for the PWM Reference Pulse Width
*/
LOCAL_INLINE void SSI_HWA_SetPwmRefPulseWidth(SSI_Type *pSsi, uint32_t u32Value)
{
pSsi->GPCR = (pSsi->GPCR &= ~SSI_GPCR_REF_WIDTH_MASK) | SSI_GPCR_REF_WIDTH(u32Value);
}
/**
* @brief Set the Sub-instance Control Register
*
* This function sets the Sub-instance Control Register (ICR) for a specified sub-instance index
* in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
* @param u32Value The value to set for the Sub-instance Control Register
*/
LOCAL_INLINE void SSI_HWA_SetSubinsCtr(SSI_Type *pSsi, uint8_t u8IcrIdx, uint32_t u32Value)
{
pSsi->SUB_INS[u8IcrIdx].ICR = u32Value;
}
/**
* @brief Enable the Sub-instance
*
* This function enables the sub-instance by setting the enable bit in the Sub-instance Control
* Register (ICR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to enable
*/
LOCAL_INLINE void SSI_HWA_Subins_Enable(SSI_Type *pSsi, uint8_t u8IcrIdx)
{
pSsi->SUB_INS[u8IcrIdx].ICR |= SSI_ICR_SSI_EN_MASK;
}
/**
* @brief Disable the Sub-instance
*
* This function Disable the sub-instance by setting the enable bit in the Sub-instance Control
* Register (ICR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to enable
*/
LOCAL_INLINE void SSI_HWA_Subins_Disable(SSI_Type *pSsi, uint8_t u8IcrIdx)
{
pSsi->SUB_INS[u8IcrIdx].ICR &= ~SSI_ICR_SSI_EN_MASK;
}
/**
* @brief Set the Sub-instance Channel Switch
*
* This function sets the channel switch configuration in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
* @param u32Value The value to set for the channel switch configuration
*/
LOCAL_INLINE void SSI_HWA_SetSubinsChlSwitch(SSI_Type *pSsi, uint8_t u8IcrIdx, uint32_t u32Value)
{
uint32_t u32RegVal = pSsi->SUB_INS[u8IcrIdx].ICR;
pSsi->SUB_INS[u8IcrIdx].ICR = (u32RegVal & ~SSI_ICR_CHL_SW_MASK) | SSI_ICR_CHL_SW(u32Value);
}
/**
* @brief Enable Window Range Check for Sub-instance
*
* This function enables the window range check feature in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsWinRangChk_Enable(SSI_Type *pSsi, uint8_t u8IcrIdx)
{
pSsi->SUB_INS[u8IcrIdx].ICR |= SSI_ICR_RANG_CHK_EN_MASK;
}
/**
* @brief Disable Window Range Check for Sub-instance
*
* This function Disable the window range check feature in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsWinRangChk_Disable(SSI_Type *pSsi, uint8_t u8IcrIdx)
{
pSsi->SUB_INS[u8IcrIdx].ICR &= ~SSI_ICR_RANG_CHK_EN_MASK;
}
/**
* @brief Set the Sub-instance Channel Selection
*
* This function sets the channel selection configuration in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
* @param u32Value The value to set for the channel selection configuration
*/
LOCAL_INLINE void SSI_HWA_SetSubinsChlSel(SSI_Type *pSsi, uint8_t u8IcrIdx, uint8_t u8Value)
{
uint32_t u32RegVal = pSsi->SUB_INS[u8IcrIdx].ICR;
pSsi->SUB_INS[u8IcrIdx].ICR = (u32RegVal & ~SSI_ICR_CHL_SEL_MASK) | SSI_ICR_CHL_SEL(u8Value);
}
/**
* @brief Set the Sub-instance Protocol Selection
*
* This function sets the Protocol selection configuration in the Sub-instance Control Register
* (ICR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
* @param u32Value The value to set for the Protocol selection configuration
*/
LOCAL_INLINE void SSI_HWA_SetSubinsProtSel(SSI_Type *pSsi, uint8_t u8IcrIdx, uint32_t u32Value)
{
uint32_t u32RegVal = pSsi->SUB_INS[u8IcrIdx].ICR;
pSsi->SUB_INS[u8IcrIdx].ICR = (u32RegVal & ~SSI_ICR_PROT_SEL_MASK) | SSI_ICR_PROT_SEL(u32Value);
}
/**
* @brief Get the Sub-instance Protocol Selection
*
* This function Gets the Protocol selection configuration in the Sub-instance Control Register
* (ICR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
* @return The value of the Sub-instance Protocol Selection
*/
LOCAL_INLINE uint32_t SSI_HWA_GetSubinsProtSel(SSI_Type *pSsi, uint8_t u8IcrIdx)
{
return ((pSsi->SUB_INS[u8IcrIdx].ICR & SSI_ICR_PROT_SEL_MASK) >> SSI_ICR_PROT_SEL_SHIFT);
}
#if SSI_INTERNAL_CMP_SUPPORT == STD_ON
/**
* @brief Enable internal cmp for Sub-instance
*
* This function enables the internal cmp in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsIntCmp_Enable(SSI_Type *pSsi, uint8_t u8IcrIdx)
{
pSsi->SUB_INS[u8IcrIdx].ICR |= SSI_ICR_CMP_EN_MASK;
}
/**
* @brief Disable internal cmp for Sub-instance
*
* This function Disable the internal cmp in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsIntCmp_Disable(SSI_Type *pSsi, uint8_t u8IcrIdx)
{
pSsi->SUB_INS[u8IcrIdx].ICR &= ~SSI_ICR_CMP_EN_MASK;
}
/**
* @brief Set the Sub-instance Resistance Select
*
* This function sets resistance select configuration in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
* @param u32Value The value to set for the resource selection configuration
*/
LOCAL_INLINE void SSI_HWA_SetSubinsResSel(SSI_Type *pSsi, uint8_t u8IcrIdx, uint32_t u32Value)
{
uint32_t u32RegVal = pSsi->SUB_INS[u8IcrIdx].ICR;
pSsi->SUB_INS[u8IcrIdx].ICR = (u32RegVal & ~SSI_ICR_RES_SEL_MASK) | SSI_ICR_RES_SEL(u32Value);
}
#endif
/**
* @brief Set the Sub-instance GPWM Polarity
*
* This function sets the GPWM polarity configuration in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
* @param u32Value The value to set for the GPWM polarity configuration
*/
LOCAL_INLINE void SSI_HWA_SetSubinsGpwmPola(SSI_Type *pSsi, uint8_t u8IcrIdx, uint32_t u32Value)
{
uint32_t u32RegVal = pSsi->SUB_INS[u8IcrIdx].ICR;
pSsi->SUB_INS[u8IcrIdx].ICR = (u32RegVal & ~SSI_ICR_GPWM_INV_MASK) | SSI_ICR_GPWM_INV(u32Value);
}
/**
* @brief Set the Sub-instance GPWM Time Counter
*
* This function sets the GPWM time counter configuration in the Sub-instance Control Register (ICR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IcrIdx The index of the sub-instance control register to configure
* @param u32Value The value to set for the GPWM time counter configuration
*/
LOCAL_INLINE void SSI_HWA_SetSubinsGpwmTimeCnt(SSI_Type *pSsi, uint8_t u8IcrIdx, uint32_t u32Value)
{
uint32_t u32RegVal = pSsi->SUB_INS[u8IcrIdx].ICR;
pSsi->SUB_INS[u8IcrIdx].ICR = (u32RegVal & ~SSI_ICR_GPWM_TOC_MASK) | SSI_ICR_GPWM_TOC(u32Value);
}
/**
* @brief Enable the Sub-instance Filter
*
* This function enables the filter in the Sub-instance Filter Register (IFR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IfrIdx The index of the sub-instance filter register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsFilter_Enable(SSI_Type *pSsi, uint8_t u8IfrIdx)
{
pSsi->SUB_INS[u8IfrIdx].IFR |= SSI_IFR_FLT_EN_MASK;
}
/**
* @brief Disable the Sub-instance Filter
*
* This function disable the filter in the Sub-instance Filter Register (IFR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IfrIdx The index of the sub-instance filter register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsFilter_Disable(SSI_Type *pSsi, uint8_t u8IfrIdx)
{
pSsi->SUB_INS[u8IfrIdx].IFR &= ~SSI_IFR_FLT_EN_MASK;
}
/**
* @brief Set the Sub-instance Filter Width
*
* This function sets the filter width configuration in the Sub-instance Filter Register (IFR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IfrIdx The index of the sub-instance filter register to configure
* @param u32Value The value to set for the filter width configuration
*/
LOCAL_INLINE void SSI_HWA_SetSubinsFilterWidth(SSI_Type *pSsi, uint8_t u8IfrIdx, uint32_t u32Value)
{
uint32_t u32RegVal = pSsi->SUB_INS[u8IfrIdx].IFR;
pSsi->SUB_INS[u8IfrIdx].IFR = (u32RegVal & ~SSI_IFR_FLT_WIDTH_MASK) |
SSI_IFR_FLT_WIDTH(u32Value);
}
/**
* @brief Set the Sub-instance Interrupt Configuration
*
* This function sets the interrupt configuration in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
* @param u32Value The value to set for the interrupt configuration
*/
LOCAL_INLINE void SSI_HWA_SetSubinsIntCfg(SSI_Type *pSsi, uint8_t u8IntcrIdx, uint32_t u32Value)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR = u32Value;
}
/**
* @brief Set the Sub-instance Interrupt Configuration
*
* This function sets the interrupt configuration in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
* @param u32Value The value to set for the interrupt configuration
*/
LOCAL_INLINE void SSI_HWA_SubinsErrInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= 0xDE;
}
/**
* @brief Enable Valid Interrupt in Sub-instance
*
* This function enables the valid interrupt in the Sub-instance Interrupt Control Register (INTCR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsValidInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= SSI_INTCR_VLD_INT_EN_MASK;
}
/**
* @brief Disable Valid Interrupt in Sub-instance
*
* This function disables the valid interrupt in the Sub-instance Interrupt Control Register (INTCR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsValidInt_Disable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR &= ~SSI_INTCR_VLD_INT_EN_MASK;
}
/**
* @brief Enable Stop Interrupt in Sub-instance
*
* This function enables the Stop interrupt in the Sub-instance Interrupt Control Register (INTCR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsStopInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= SSI_INTCR_STOP_INT_EN_MASK;
}
/**
* @brief Disable Stop Interrupt in Sub-instance
*
* This function disables the Stop interrupt in the Sub-instance Interrupt Control Register (INTCR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsStopInt_Disable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR &= ~SSI_INTCR_STOP_INT_EN_MASK;
}
/**
* @brief Enable Timeout Interrupt in Sub-instance
*
* This function enables the timeout interrupt in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsFTimeoutInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= SSI_INTCR_TIMEOUT_INT_EN_MASK;
}
/**
* @brief Disable Timeout Interrupt in Sub-instance
*
* This function disables the timeout interrupt in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsFTimeoutInt_Disable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR &= ~SSI_INTCR_TIMEOUT_INT_EN_MASK;
}
/**
* @brief Enable Range Error Interrupt in Sub-instance
*
* This function enables the Range Error interrupt in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsRangeErrInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= SSI_INTCR_RANGE_ERR_EN_MASK;
}
/**
* @brief Disable Range Error Interrupt in Sub-instance
*
* This function disables the Range Error interrupt in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsRangeErrInt_Disable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR &= ~SSI_INTCR_RANGE_ERR_EN_MASK;
}
/**
* @brief Enable Decode Error Interrupt in Sub-instance
*
* This function enables the Decode Error interrupt in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsDecodeErrInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= SSI_INTCR_DECODE_ERR_EN_MASK;
}
/**
* @brief Disable Decode Error Interrupt in Sub-instance
*
* This function disables the Decode Error interrupt in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsDecodeErrInt_Disable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR &= ~SSI_INTCR_DECODE_ERR_EN_MASK;
}
/**
* @brief Enable Interval Error Interrupt in Sub-instance
*
* This function enables the Interval Error interrupt in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsIntervalErrInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= SSI_INTCR_INTERVAL_ERR_EN_MASK;
}
/**
* @brief Disable Interval Error Interrupt in Sub-instance
*
* This function disables the Interval Error interrupt in the Sub-instance Interrupt Control
* Register (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsIntervalErrInt_Disable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR &= ~SSI_INTCR_INTERVAL_ERR_EN_MASK;
}
/**
* @brief Enable Pulse Width Error Interrupt in Sub-instance
*
* This function enables the Pulse Width Error interrupt in the Sub-instance Interrupt Control
* Register (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsPulseWidthErrInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= SSI_INTCR_PULSE_WIDTH_ERR_EN_MASK;
}
/**
* @brief Disable Pulse Width Error Interrupt in Sub-instance
*
* This function disables the Pulse Width Error interrupt in the Sub-instance Interrupt Control
* Register (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsPulseWidthErrInt_Disable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR &= ~SSI_INTCR_PULSE_WIDTH_ERR_EN_MASK;
}
/**
* @brief Enable Protocol Error Interrupt in Sub-instance
*
* This function enables the Protocol Error interrupt in the Sub-instance Interrupt Control Register
* (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsProtErrInt_Enable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR |= SSI_INTCR_PROTOC_ERR_INT_EN_MASK;
}
/**
* @brief Disable Protocol Error Interrupt in Sub-instance
*
* This function disables the Protocol Error interrupt in the Sub-instance Interrupt Control
* Register (INTCR) for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8IntcrIdx The index of the sub-instance interrupt control register to configure
*/
LOCAL_INLINE void SSI_HWA_SubinsProtErrInt_Disable(SSI_Type *pSsi, uint8_t u8IntcrIdx)
{
pSsi->SUB_INS[u8IntcrIdx].INTCR &= ~SSI_INTCR_PROTOC_ERR_INT_EN_MASK;
}
/**
* @brief Get Sensor Protocol Counter Value
*
* This function retrieves the counter value from the Sensor Protocol Control Register (SPCR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8SpcrIdx The index of the sensor protocol control register to read
* @return The counter value from the specified sensor protocol control register
*/
LOCAL_INLINE uint32_t SSI_HWA_GetSensorProtocolCnt(SSI_Type *pSsi, uint8_t u8SpcrIdx)
{
return (pSsi->SUB_INS[u8SpcrIdx].SPCR & SSI_SPCR_CNT_MASK);
}
/**
* @brief Get High Pulse Counter Value
*
* This function retrieves the high pulse counter value from the High Pulse Control Register (HPCR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8HpcrIdx The index of the high pulse control register to read
* @return The high pulse counter value from the specified high pulse control register
*/
LOCAL_INLINE uint32_t SSI_HWA_GetHighPulseCnt(SSI_Type *pSsi, uint8_t u8HpcrIdx)
{
return (pSsi->SUB_INS[u8HpcrIdx].HPCR & SSI_HPCR_HPULSE_MASK);
}
/**
* @brief Get AK Manchester Code Value
*
* This function retrieves the AK man Manchester value from the AK Protocol Register (AKPR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8AkprIdx The index of the AK Protocol register to read
* @return The AK Manchester code value from the specified AK Protocol register
*/
LOCAL_INLINE uint32_t SSI_HWA_GetAkMancodeVal(SSI_Type *pSsi, uint8_t u8AkprIdx)
{
return (pSsi->SUB_INS[u8AkprIdx].AKPR & SSI_AKPR_MCODE_MASK);
}
/**
* @brief Get AK Manchester Decode Counter Value
*
* This function retrieves the AK Manchester decode counter value from the AK Protocol Register
* (AKPR) for a specified sub-instance index in the SSI peripheral. The counter value is extracted
* and right-shifted by the appropriate number of bits to align it correctly.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8AkprIdx The index of the AK Protocol register to read
* @return The AK Manchester decode counter value from the specified AK Protocol register
*/
LOCAL_INLINE uint32_t SSI_HWA_GetAkManDecodeCnt(SSI_Type *pSsi, uint8_t u8AkprIdx)
{
return ((pSsi->SUB_INS[u8AkprIdx].AKPR & SSI_AKPR_MCODE_CNT_MASK) >> SSI_AKPR_MCODE_CNT_SHIFT);
}
/**
* @brief Get PWM Decode Value
*
* This function retrieves the PWM decode value from the PWM Protocol Register (PWMPR)
* for a specified sub-instance index in the SSI peripheral.
*
* @param pSsi Pointer to the SSI_Type structure representing the SSI peripheral instance
* @param u8PwmprIdx The index of the PWM Protocol register to read
* @return The PWM decode value from the specified PWM Protocol register
*/
LOCAL_INLINE uint32_t SSI_HWA_GetPwmDecodeVal(SSI_Type *pSsi, uint8_t u8PwmprIdx)
{
return (pSsi->SUB_INS[u8PwmprIdx].PWMPR & SSI_PWMPR_PCODE_MASK);
}
/**
* @brief Unlock the MB_INTn registers
*
* @param u8CoreIndex the index of the core
* @param u32Mask the unlock bits
*/
LOCAL_INLINE uint32_t SSI_HWA_GetStatusVal(SSI_Type *pSsi, uint8_t u8IsrIdx)
{
uint32 u32Status = SSI_ISR_PROTOC_ERR(1) | SSI_ISR_PULSE_WIDTH_ERR(1) | SSI_ISR_INTERVAL_ERR(1) |
SSI_ISR_DECODE_ERR(1) | SSI_ISR_SPC_RANGE_ERR(1) | SSI_ISR_SPC_TIMEOUT_ERR(1) |
SSI_ISR_WHL_STOP(1) | SSI_ISR_SPC_VLD(1);
return (pSsi->SUB_INS[u8IsrIdx].ISR & u32Status);
}
/**
* @brief Unlock the MB_INTn registers
*
* @param u8CoreIndex the index of the core
* @param u32Mask the unlock bits
*/
LOCAL_INLINE uint32_t SSI_HWA_GetIntCmpStatus(SSI_Type *pSsi, uint8_t u8IsrIdx)
{
return ((pSsi->SUB_INS[u8IsrIdx].ISR & SSI_ISR_CMP_IOK_MASK) >> SSI_ISR_CMP_IOK_SHIFT);
}
/**
* @brief Unlock the MB_INTn registers
*
* @param u8CoreIndex the index of the core
* @param u32Mask the unlock bits
*/
LOCAL_INLINE void SSI_HWA_ClearSubStatus(SSI_Type *pSsi, uint8_t u8IsrIdx)
{
uint32 u32Val = SSI_ISR_PROTOC_ERR(1) | SSI_ISR_PULSE_WIDTH_ERR(1) | SSI_ISR_INTERVAL_ERR(1) |
SSI_ISR_DECODE_ERR(1) | SSI_ISR_SPC_RANGE_ERR(1) | SSI_ISR_SPC_TIMEOUT_ERR(1) |
SSI_ISR_WHL_STOP(1) | SSI_ISR_SPC_VLD(1);
pSsi->SUB_INS[u8IsrIdx].ISR |= u32Val;
}
/**
* @brief Unlock the MB_INTn registers
*
* @param u8CoreIndex the index of the core
* @param u32Mask the unlock bits
*/
LOCAL_INLINE void SSI_HWA_ClearSpcVldStatus(SSI_Type *pSsi, uint8_t u8IsrIdx)
{
pSsi->SUB_INS[u8IsrIdx].ISR = SSI_ISR_SPC_VLD(1);
}
#endif /* #if SSI_INSTANCE_COUNT > 0U */
#endif