PeripheralDriver_AutoChips_.../inc/ctu_drv.h

542 lines
20 KiB
C

/* Copyright Statement:
*
* This software/firmware and related documentation ("AutoChips Software") are
* protected under relevant copyright laws. The information contained herein is
* confidential and proprietary to AutoChips Inc. and/or its licensors. Without
* the prior written permission of AutoChips inc. and/or its licensors, any
* reproduction, modification, use or disclosure of AutoChips Software, and
* information contained herein, in whole or in part, shall be strictly
* prohibited.
*
* AutoChips Inc. (C) 2021. All rights reserved.
*
* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")
* RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
* ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL
* WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH
* RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
* INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES
* TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
* RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
* OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS
* SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE
* RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S
* ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE
* RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE
* AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
* CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.
*/
/*!
* @file ctu_drv.h
*
* @brief This file provides ctu integration functions interface.
*
*/
#ifndef CTU_DRV_H
#define CTU_DRV_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* =========================================== Includes =========================================== */
#include "device_register.h"
/*=====================================SOURCE FILE VERSION INFORMATION==============================*/
#define CTU_HAL_MODULE_ID (22U)
#define CTU_HAL_SW_MAJOR_VERSION (1U)
#define CTU_HAL_SW_MINOR_VERSION (1U)
#define CTU_HAL_SW_PATCH_VERSION (0U)
/* ============================================ Define ============================================ */
/* =========================================== Typedef ============================================ */
/*!
* @brief Constant array storing the value of all trgmux output(target module) identifiers.
*/
#define FEATURE_TRGMUX_TARGET_MODULE \
{ \
TRGMUX_TARGET_MODULE_DMA_CH0, \
TRGMUX_TARGET_MODULE_DMA_CH1, \
TRGMUX_TARGET_MODULE_DMA_CH2, \
TRGMUX_TARGET_MODULE_DMA_CH3, \
TRGMUX_TARGET_MODULE_EXT_OUT0, \
TRGMUX_TARGET_MODULE_EXT_OUT1, \
TRGMUX_TARGET_MODULE_EXT_OUT2, \
TRGMUX_TARGET_MODULE_EXT_OUT3, \
TRGMUX_TARGET_MODULE_EXT_OUT4, \
TRGMUX_TARGET_MODULE_EXT_OUT5, \
TRGMUX_TARGET_MODULE_EXT_OUT6, \
TRGMUX_TARGET_MODULE_EXT_OUT7, \
TRGMUX_TARGET_MODULE_ADC0_REGULAR0, \
TRGMUX_TARGET_MODULE_ADC0_REGULAR1, \
TRGMUX_TARGET_MODULE_ADC0_REGULAR2, \
TRGMUX_TARGET_MODULE_ADC0_REGULAR3, \
TRGMUX_TARGET_MODULE_ADC0_INJECTION0, \
TRGMUX_TARGET_MODULE_ADC0_INJECTION1, \
TRGMUX_TARGET_MODULE_ADC0_INJECTION2, \
TRGMUX_TARGET_MODULE_ADC0_INJECTION3, \
TRGMUX_TARGET_MODULE_ADC1_REGULAR0, \
TRGMUX_TARGET_MODULE_ADC1_REGULAR1, \
TRGMUX_TARGET_MODULE_ADC1_REGULAR2, \
TRGMUX_TARGET_MODULE_ADC1_REGULAR3, \
TRGMUX_TARGET_MODULE_ADC1_INJECTION0, \
TRGMUX_TARGET_MODULE_ADC1_INJECTION1, \
TRGMUX_TARGET_MODULE_ADC1_INJECTION2, \
TRGMUX_TARGET_MODULE_ADC1_INJECTION3, \
TRGMUX_TARGET_MODULE_ACMP0_TR, \
TRGMUX_TARGET_MODULE_PWM0_TRIG0, \
TRGMUX_TARGET_MODULE_PWM0_FAULT0, \
TRGMUX_TARGET_MODULE_PWM0_FAULT1, \
TRGMUX_TARGET_MODULE_PWM0_FAULT2, \
TRGMUX_TARGET_MODULE_PWM1_TRIG0, \
TRGMUX_TARGET_MODULE_PWM1_FAULT0, \
TRGMUX_TARGET_MODULE_PWM1_FAULT1, \
TRGMUX_TARGET_MODULE_PWM1_FAULT2, \
TRGMUX_TARGET_MODULE_PWM2_TRIG0, \
TRGMUX_TARGET_MODULE_PWM2_FAULT0, \
TRGMUX_TARGET_MODULE_PWM2_FAULT1, \
TRGMUX_TARGET_MODULE_PWM2_FAULT2, \
TRGMUX_TARGET_MODULE_PWM3_TRIG0, \
TRGMUX_TARGET_MODULE_PWM3_FAULT0, \
TRGMUX_TARGET_MODULE_PWM3_FAULT1, \
TRGMUX_TARGET_MODULE_PWM3_FAULT2, \
TRGMUX_TARGET_MODULE_PWM4_TRIG0, \
TRGMUX_TARGET_MODULE_PWM5_TRIG0, \
TRGMUX_TARGET_MODULE_TIMER_CH0, \
TRGMUX_TARGET_MODULE_TIMER_CH1, \
TRGMUX_TARGET_MODULE_TIMER_CH2, \
TRGMUX_TARGET_MODULE_TIMER_CH3, \
TRGMUX_TARGET_MODULE_PCT0, \
TRGMUX_TARGET_MODULE_UART0, \
TRGMUX_TARGET_MODULE_UART1, \
TRGMUX_TARGET_MODULE_PDT0, \
TRGMUX_TARGET_MODULE_PDT1, \
TRGMUX_TARGET_MODULE_EIO_TIMR0, \
TRGMUX_TARGET_MODULE_EIO_TIMR1, \
TRGMUX_TARGET_MODULE_EIO_TIMR2, \
TRGMUX_TARGET_MODULE_EIO_TIMR3 \
};
/*!
* @brief Enumeration for target module about pwm_fault.
*/
typedef enum
{
CTU_CFG_PWM0_FAULT0 = 0U, /*!< Target module of pwm0_fault0 */
CTU_CFG_PWM0_FAULT1 = 1U, /*!< Target module of pwm0_fault1 */
CTU_CFG_PWM0_FAULT2 = 2U, /*!< Target module of pwm0_fault2 */
CTU_CFG_PWM1_FAULT0 = 4U, /*!< Target module of pwm1_fault0 */
CTU_CFG_PWM1_FAULT1 = 5U, /*!< Target module of pwm1_fault1 */
CTU_CFG_PWM1_FAULT2 = 6U, /*!< Target module of pwm1_fault2 */
CTU_CFG_PWM2_FAULT0 = 8U, /*!< Target module of pwm2_fault0 */
CTU_CFG_PWM2_FAULT1 = 9U, /*!< Target module of pwm2_fault1 */
CTU_CFG_PWM2_FAULT2 = 10U, /*!< Target module of pwm2_fault2 */
CTU_CFG_PWM3_FAULT0 = 12U, /*!< Target module of pwm3_fault0 */
CTU_CFG_PWM3_FAULT1 = 13U, /*!< Target module of pwm3_fault1 */
CTU_CFG_PWM3_FAULT2 = 14U /*!< Target module of pwm3_fault2 */
} ctu_pwm_fault_target_module_t;
/*!
* @brief Enumeration for target module about pwm_sync.
*/
typedef enum
{
CTU_CFG_PWM0_SYNC = 0U, /*!< Target module of pwm0_sync */
CTU_CFG_PWM1_SYNC = 1U, /*!< Target module of pwm1_sync */
CTU_CFG_PWM2_SYNC = 2U, /*!< Target module of pwm2_sync */
CTU_CFG_PWM3_SYNC = 3U, /*!< Target module of pwm3_sync */
CTU_CFG_PWM4_SYNC = 4U, /*!< Target module of pwm4_sync */
CTU_CFG_PWM5_SYNC = 5U /*!< Target module of pwm5_sync */
} ctu_pwm_sync_target_module_t;
/*!
* @brief Enumeration for target module about pwm_ch.
*/
typedef enum
{
CTU_CFG_PWM1_CH0 = 0U, /*!< Target module of pwm1_ch0 in CFG register */
CTU_CFG_PWM3_CH0 = 1U, /*!< Target module of pwm3_ch0 in CFG register */
CTU_CFG_PWM2_CHx = 2U /*!< Target module of pwm2_chx in CFG register */
} ctu_pwm_ch_target_module_t;
/*!
* @brief Enumeration for target module about uart.
*/
typedef enum
{
CTU_CFG_UART0 = 0U, /*!< Target module of uart0 in CFG register */
CTU_CFG_UART1 = 1U /*!< Target module of uart1 in CFG register */
}ctu_uart_target_module_t;
/*!
* @brief Enumeration for target module about sw_trig.
*/
typedef enum
{
CTU_CFG_SW_TRIG0 = 0U, /*!< Target module of sw_trig0 */
CTU_CFG_SW_TRIG1 = 1U, /*!< Target module of sw_trig1 */
CTU_CFG_SW_TRIG2 = 2U, /*!< Target module of sw_trig2 */
CTU_CFG_SW_TRIG3 = 3U /*!< Target module of sw_trig3 */
} ctu_sw_trigger_target_module_t;
/*!
* @brief Enumeration for adc_interleace.
*/
typedef enum
{
CTU_ADC_INTERLEAVE_DISABLE = 0U, /*!< Adc interleave disable */
CTU_ADC0_INTERLEAVE_VIN4 = 1U, /*!< Select adc0 interleave vin4 */
CTU_ADC0_INTERLEAVE_VIN5 = 2U, /*!< Select adc0 interleave vin5 */
CTU_ADC1_INTERLEAVE_VIN8 = 3U, /*!< Select adc1 interleave vin8 */
CTU_ADC1_INTERLEAVE_VIN9 = 4U /*!< Select adc1 interleave vin9 */
} ctu_adc_interleave_mode_t;
/*!
* @brief Configuration structure for pairing source triggers with target modules.
*/
typedef struct
{
trgmux_trigger_source_t triggerSource; /*!< selects one of the trgmux trigger sources */
trgmux_target_module_t targetModule; /*!< selects one of the trgmux target modules */
bool lockTargetModuleReg; /*!< if true, the LOCK bit of the target module register will be set
by TRGMUX_DRV_INIT(), after the current mapping if configured*/
} trgmux_inout_mapping_config_t;
/*!
* @brief User configuration structure for the trgmux driver.
*/
typedef struct
{
uint8_t numInOutMappingConfigs; /*!< Number of in-out mappings defined in trgmux configuration */
const trgmux_inout_mapping_config_t *inOutMappingConfigs; /*!< Pointer to array of in-out mapping structures */
} trgmux_user_config_t;
/* ========================================== Variables =========================================== */
/* ==================================== Functions declaration ===================================== */
/*!
* @brief Initialize a trgmux instance for operation.
*
* This function first resets the source triggers of all trgmux target modules to their default values,
* then configures the trgmux with all the user defined in-out mappings.
* If at least one of the target modules is locked, the function will not change any of the trgmux target modules
* and return error code.
*
* @param[in] instance: The trgmux instance number
* @param[in] trgmuxUserConfig: Pointer to the user configuration structure.
* @return status_t
* - STATUS_SUCCESS: all trgmux register not lock
* - STATUS_ERROR: at least one trgmux register is lock
*/
status_t TRGMUX_DRV_Init(const uint8_t instance, const trgmux_user_config_t * const trgmuxUserConfig);
/*!
* @brief Reset to default values the source triggers corresponding to all target modules,
* if none of the target modules is locked.
*
* @param[in] instance: The trgmux instance number
* @return status_t
* - STATUS_SUCCESS: all trgmux register not lock
* - STATUS_ERROR: at least one trgmux register is lock
*/
status_t TRGMUX_DRV_Deinit(const uint8_t instance);
/*!
* @brief Configure a trigger source for a selected target module
*
* @param[in] instance: The trgmux instance number
* @param[in] triggerSource: trgmux trigger source struct
* @param[in] targetModule: trgmux target module struct
* @return status_t
* - STATUS_SUCCESS: trgmux register about target module is not lock
* - STATUS_ERROR: trgmux register about target module is lock
*/
status_t TRGMUX_DRV_SetTrigSourceForTargetModule(const uint8_t instance,
const trgmux_trigger_source_t triggerSource,
const trgmux_target_module_t targetModule);
/*!
* @brief Get ctu trigger source for target module.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule: trgmux target module struct
* @return trgmux_trigger_source_t: trigger source
*/
trgmux_trigger_source_t TRGMUX_DRV_GetTrigSourceForTargetModule(const uint8_t instance,
const trgmux_target_module_t targetModule);
/*!
* @brief Set ctu config lock for target module.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule: trgmux target module
* @return none
*/
void TRGMUX_DRV_SetLockForTargetModule(const uint8_t instance, const trgmux_target_module_t targetModule);
/*!
* @brief Get ctu lock state for target module.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule: trgmux target module struct
* @return trgmux lock state
*/
bool TRGMUX_DRV_GetLockForTargetModule(const uint8_t instance, const trgmux_target_module_t targetModule);
/*!
* @brief Set ctu rtc clock capture.
*
* @param[in] instance: The trgmux instance number
* @param[in] triggerSource
- TIMER_CH3 capture TIMER_CH3_TT
- TIMER_CH3 capture RTC clock signal
* @return none
*/
void CTU_DRV_SetRTCClockCapture(const uint8_t instance, uint8_t triggerSource);
/*!
* @brief Get rtc clock source capture.
*
* @param[in] instance: The trgmux instance number
* @return rtc clock source capture state
*/
uint8_t CTU_DRV_GetRTCClockCapture(const uint8_t instance);
/*!
* @brief Set pwm fault trigger source.
*
* @param[in] instance: The trgmux instance number
* @param[in] triggerSource
- PWM_FAULT_IN_PIN input signal connected to PWM
- PWM_FAULT_TT input signal connected to PWM
* @param[in] targetModule: pwm fault target module struct
* @return none
*/
void CTU_DRV_SetPWMFaultTriggerSource(const uint8_t instance,
uint8_t triggerSource,
ctu_pwm_fault_target_module_t targetModule);
/*!
* @brief Get pwm fault trigger source.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule: pwm fault target module struct
* @return pwm fault trigger source
*/
uint8_t CTU_DRV_GetPWMFaultTriggerSource(const uint8_t instance, ctu_pwm_fault_target_module_t targetModule);
/*!
* @brief Set pwm synchronization.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule : pwm synchronization target module struct
* @return none
*/
void CTU_DRV_SetPWMSync(const uint8_t instance, ctu_pwm_sync_target_module_t targetModule);
/*!
* @brief Clear pwm synchronization.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule : pwm synchronization target module struct
* @return none
*/
void CTU_DRV_ClearPWMSync(const uint8_t instance, ctu_pwm_sync_target_module_t targetModule);
/*!
* @brief Set pwm CH trigger source.
*
* @param[in] instance: The trgmux instance number
* @param[in] triggerSource
- PWMn CHX_IN_PIN
- ACMP0_OUT/ACMP_HALLA/ACMP_HALLB/ACMP_HALLC
* @param[in] targetModule : pwm CH target module struct
* @return none
*/
void CTU_DRV_SetPWMCHTriggerSource(const uint8_t instance,
uint8_t triggerSource,
ctu_pwm_ch_target_module_t targetModule);
/*!
* @brief Get pwm CH trigger source.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule: pwm CH target module struct
* @return pwm CH trigger source
*/
uint8_t CTU_DRV_GetPWMCHTriggerSource(const uint8_t instance, ctu_pwm_ch_target_module_t targetModule);
/*!
* @brief Set uart modulation trigger source.
*
* @param[in] instance: The trgmux instance number
* @param[in] triggerSource
- no modulation
- modulation with uart triggger target
* @param[in] targetModule : uart target module struct
* @return none
*/
void CTU_DRV_SetUARTModulationTriggerSource(const uint8_t instance,
uint8_t triggerSource,
ctu_uart_target_module_t targetModule);
/*!
* @brief Get uart modulation trigger source.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule : uart target module struct
*
* @return uart modulation trigger source
*/
uint8_t CTU_DRV_GetUARTModulationTriggerSource(const uint8_t instance, ctu_uart_target_module_t targetModule);
/*!
* @brief Set uart rxd filter trigger source.
*
* @param[in] instance: The trgmux instance number
* @param[in] triggerSource
- rxd input signal is connected to uart module directly
- rxd input signal is filtered by ACMP0, then injected to UART
* @param[in] targetModule : uart target module struct
* @return none
*/
void CTU_DRV_SetUARTRxDFilterTriggerSource(const uint8_t instance,
uint8_t triggerSource,
ctu_uart_target_module_t targetModule);
/*!
* @brief Get uart rxd filter trigger source.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule : uart target module struct
* @return uart rx filter trigger source
*/
uint8_t CTU_DRV_GetUARTRxDFilterTriggerSource(const uint8_t instance, ctu_uart_target_module_t targetModule);
/*!
* @brief Generate sw trigger.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule : sw trigger module struct
* @return none
*/
void CTU_DRV_SetSWTrigger(const uint8_t instance, ctu_sw_trigger_target_module_t targetModule);
/*!
* @brief Clear sw trigger.
*
* @param[in] instance: The trgmux instance number
* @param[in] targetModule : sw trigger module struct
* @return none
*/
void CTU_DRV_ClearSWTrigger(const uint8_t instance, ctu_sw_trigger_target_module_t targetModule);
/*!
* @brief Enable/Disable pwm0 modulation.
*
* @param[in] instance: The trgmux instance number
* @param[in] channelEn: PWM0 all 8 channel modulation enable/disable mask
* @return none
*/
void CTU_DRV_EnablePWM0Modulation(const uint8_t instance, uint8_t channelEn);
/*!
* @brief Enable/Disable pwm3 modulation.
*
* @param[in] instance: The trgmux instance number
* @param[in] channelEn: PWM3 all 8 channel modulation enable/disable mask
* @return none
*/
void CTU_DRV_EnablePWM3Modulation(const uint8_t instance, uint8_t channelEn);
/*!
* @brief Set adc regular simultaneous mode.
*
* @param[in] instance: The trgmux instance number
* @param[in] enable: whether enable adc regular simultaneous mode
* @return none
*/
void CTU_DRV_SetADCRegularSimultaneous(const uint8_t instance, bool enable);
/**
* @brief Get adc regular simultaneous mode config.
*
* @param[in] instance: The trgmux instance number
* @return enable/disable: regular simultaneous mode
*/
bool CTU_DRV_GetADCRegularSimultaneous(const uint8_t instance);
/*!
* @brief Set adc inject simultaneous mode.
*
* @param[in] instance: The trgmux instance number
* @param[in] enable: whether enable regular simultaneous mode
* @return none
*/
void CTU_DRV_SetADCInjectSimultaneous(const uint8_t instance, bool enable);
/**
* @brief Get adc inject simultaneous mode config
*
* @param[in] instance: The trgmux instance number
* @return inject simultaneous mode
*/
bool CTU_DRV_GetADCInjectSimultaneous(const uint8_t instance);
/**
* @brief Set adc interleave input channel.
*
* @param[in] instance: The trgmux instance number
* @param[in] mode : interleave mode
* @return none
*/
void CTU_DRV_SetADCInterleave(const uint8_t instance, ctu_adc_interleave_mode_t mode);
/**
* @brief Get adc interleave mode config.
*
* @param[in] instance: The trgmux instance number
* @return ctu_adc_interleave_mode_t: interleave mode
*/
ctu_adc_interleave_mode_t CTU_DRV_GetADCInterleave(const uint8_t instance);
/*!
* @brief CTU Module De-initialize.
*
* @param[in] instance: The trgmux instance number
* @return none
*/
void CTU_DRV_DeInit(const uint8_t instance);
/*!
* @brief CTU ckgen disable & module reset.
*
* @param[in] instance: The trgmux instance number
* @return none
*/
void CTU_DRV_Init(const uint8_t instance);
/*!
* @brief Get module version information.
*
* @param[out] versionInfo: Module version information address.
* @return void
*/
void CTU_DRV_GetVersionInfo(Drv_VersionInfo_Type *versionInfo);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* CTU_DRV_H */
/* ============================================= EOF ============================================== */