/* 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 pdt_drv.h * * @brief This file provides PDT integration functions interface. * */ /* PRQA S 3630 EOF */ /* struct/union type will be used by user app. */ #ifndef PDT_DRV_H #define PDT_DRV_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* =========================================== Includes =========================================== */ #include "device_register.h" /*=====================================SOURCE FILE VERSION INFORMATION==============================*/ #define PDT_HAL_MODULE_ID (43U) #define PDT_HAL_SW_MAJOR_VERSION (1U) #define PDT_HAL_SW_MINOR_VERSION (2U) #define PDT_HAL_SW_PATCH_VERSION (0U) /* ============================================ Define ============================================ */ /*!< Get PDT Index form base address */ #define PDT_INDEX(base) ((uint8_t)(((uint32_t)(base) - PDT0_BASE) >> 11)) /* =========================================== Typedef ============================================ */ /*!< Callback for PDT module */ typedef void (*pdt_callback_t)(uint32_t instance, uint32_t status, void *userData); /*! * @brief PDT multiplication factor enumeration. */ typedef enum { PDT_CLK_PREMULT_FACT_AS_1 = 0U, /*!< Multiplication factor is 1 */ PDT_CLK_PREMULT_FACT_AS_10, /*!< Multiplication factor is 10 */ PDT_CLK_PREMULT_FACT_AS_20, /*!< Multiplication factor is 20 */ PDT_CLK_PREMULT_FACT_AS_40 /*!< Multiplication factor is 40 */ } pdt_clk_prescaler_mult_factor_t; /*! * @brief PDT prescaler divided enumeration. */ typedef enum { PDT_CLK_PREDIV_BY_1 = 0U, /*!< Clk divided by MULT */ PDT_CLK_PREDIV_BY_2, /*!< Clk divided by 2 * MULT */ PDT_CLK_PREDIV_BY_4, /*!< Clk divided by 4 * MULT */ PDT_CLK_PREDIV_BY_8, /*!< Clk divided by 8 * MULT */ PDT_CLK_PREDIV_BY_16, /*!< Clk divided by 16 * MULT */ PDT_CLK_PREDIV_BY_32, /*!< Clk divided by 32 * MULT */ PDT_CLK_PREDIV_BY_64, /*!< Clk divided by 64 * MULT */ PDT_CLK_PREDIV_BY_128 /*!< Clk divided by 128 * MULT */ } pdt_clock_prescaler_div_t; /*! * @brief PDT load mode select. */ typedef enum { PDT_LOAD_VAL_IMMEDIATELY = 0U, /*!< Load immediately after 1 is written to LDOK */ PDT_LOAD_VAL_AT_MODULO_COUNTER, /*!< Load when CNT = MODE + 1, after 1 is written to LDOK */ PDT_LOAD_VAL_AT_NEXT_TRIGGER, /*!< Load when a trigger input event is detected, after 1 is written to LDOK */ PDT_LOAD_VAL_AT_MODULO_COUNTER_OR_NEXT_TRIGGER /*!< Load when either the CNT = MODE + 1, or a trigger input event is detected, after 1 is written to LDOK */ } pdt_load_value_mode_t; /*! * @brief PDT trigger input source select. */ typedef enum { PDT_HARDWARE_TRIGGER = 0U, /*!< Select hardware trigger */ PDT_SOFTWARE_TRIGGER = 1U /*!< Select software trigger */ } pdt_trigger_src_t; /*! * @brief PDT pulse-out config structure. */ typedef struct { uint16_t poly1; /*!< Delay value for goes high */ uint16_t poly2; /*!< Delay value for goes low */ bool pulseOutEnable; /*!< PDT pulse-out enable */ } pdt_pulse_out_config_type_t; /*! * @brief PDT dly channel enumeration. */ typedef enum { PDT_DLY_0 = 0U, /*!< PDT dly0 */ PDT_DLY_1, /*!< PDT dly1 */ PDT_DLY_2, /*!< PDT dly2 */ PDT_DLY_3, /*!< PDT dly3 */ PDT_DLY_4, /*!< PDT dly4 */ PDT_DLY_5, /*!< PDT dly5 */ PDT_DLY_6, /*!< PDT dly6 */ PDT_DLY_7 /*!< PDT dly7 */ } pdt_dly_channel_type_t; /*! * @brief PDT timer configuration structure. */ typedef struct { pdt_load_value_mode_t loadValueMode; /*!< Load mode select */ pdt_clock_prescaler_div_t clkPreDiv; /*!< Clock prescaler divided */ pdt_clk_prescaler_mult_factor_t clkPreMultFactor; /*!< Multiplication factor select for prescaler */ pdt_trigger_src_t triggerInput; /*!< Trigger input source select */ bool continuousModeEnable; /*!< Continuous mode enable */ bool intEnable; /*!< Enable the interrupt for timer */ pdt_callback_t callback; /*!< PDT callback pointer */ } pdt_timer_config_t; /*! * @brief PDT Trigger delay config structure. */ typedef struct { bool triggerDelayBypassEn; /*!< Bypass enable */ uint8_t delayEnable; /*!< Delay enable */ uint16_t dly[PDT_DLY_MAX]; /*!< PDT delay value */ } pdt_trigger_delay_config_t; /* ========================================== Variables =========================================== */ /* ==================================== Functions declaration ===================================== */ /*! * @brief PDT module reset. * * @param[in] instance: The PDT instance number * @return none */ void PDT_DRV_ModuleReset(const uint8_t instance); /*! * @brief PDT module reset. * * @param[in] instance: The PDT instance number * @param[in] userConfig: Pointer to the user configuration structure * @return none */ void PDT_DRV_Init(const uint8_t instance, const pdt_timer_config_t * const userConfig); /*! * @brief Get PDT default config. * * @param[in] config: pointer to PDT default config * @return none */ void PDT_DRV_GetDefaultConfig(pdt_timer_config_t * const config); /*! * @brief PDT enable. * * @param[in] instance: The PDT instance number * @return none */ void PDT_DRV_Enable(const uint8_t instance); /*! * @brief PDT disable. * * @param[in] instance: The PDT instance number * @return none */ void PDT_DRV_Disable(const uint8_t instance); /*! * @brief Set PDT software trigger cmd. * * @param[in] instance: The PDT instance number * @return none */ void PDT_DRV_SoftTriggerCmd(const uint8_t instance); /*! * @brief Set PDT load values cmd. * * @param[in] instance: The PDT instance number * @return none */ void PDT_DRV_LoadValuesCmd(const uint8_t instance); /*! * @brief PDT ckgen/irq disable & module reset. * * @param[in] instance: The PDT instance number. * @return none */ void PDT_DRV_Deinit(const uint8_t instance); /*! * @brief Get PDT timer value. * * @param[in] instance: The PDT instance number * @return timer counting value */ uint32_t PDT_DRV_GetTimerValue(const uint8_t instance); /*! * @brief Get PDT timer interrupt flag. * * @param[in] instance: The PDT instance number * @return timer interrupt flag */ bool PDT_DRV_GetTimerIntFlag(const uint8_t instance); /*! * @brief Clear PDT timer interrupt flag. * * @param[in] instance: The PDT instance number * @return none */ void PDT_DRV_ClearTimerIntFlag(const uint8_t instance); /*! * @brief Set PDT timer modulus value. * * @param[in] instance: The PDT instance number * @param[in] value: PDT modulus value * @return none */ void PDT_DRV_SetTimerModulusValue(const uint8_t instance, const uint16_t value); /*! * @brief Set PDT timer interrupt value. * * @param[in] instance: The PDT instance number * @param[in] value: PDT interrupt value * @return none */ void PDT_DRV_SetValueForTimerInterrupt(const uint8_t instance, const uint16_t value); /*! * @brief Set PDT pulse out enable. * * @param[in] instance: The PDT instance number * @param[in] enable * - ENABLE: pulse output enable * - DISABLE: pulse output disable * @return none */ void PDT_DRV_SetCmpPulseOutEnable(const uint8_t instance, bool enable); /*! * @brief set PDT pulse out delay value for high * * @param[in] instance: The PDT instance number * @param[in] value: pulse out delay value for high * @return none */ void PDT_DRV_SetCmpPulseOutDelayForHigh(const uint8_t instance, uint16_t value); /*! * @brief Set PDT pulse out delay value for low. * * @param[in] instance: The PDT instance number * @param[in] value: pulse out delay value for low * @return none */ void PDT_DRV_SetCmpPulseOutDelayForLow(const uint8_t instance, uint16_t value); /*! * @brief Set PDT trigger Delay Value. * * @param[in] instance: The PDT instance number * @param[in] chn: delay channel(0~7) * @param[in] value: trigger delay value * @return none */ void PDT_DRV_SetTriggerDelayValue(const uint8_t instance, const uint8_t chn, const uint16_t value); /*! * @brief Config PDT delay value and output enable. * * @param[in] instance: The PDT instance number * @param[in] delayConfig: Pointer to the PDT delay configuration structure * @return none */ void PDT_DRV_ConfigTriggerDelay(const uint8_t instance, const pdt_trigger_delay_config_t *delayConfig); /*! * @brief Config PDT pulse out width and output enable. * * @param[in] instance: The PDT instance number * @param[in] config: pointer to pulse out configuration structure * @return none */ void PDT_DRV_ConfigPulseOut(const uint8_t instance, const pdt_pulse_out_config_type_t *config); /*! * @brief Get module version information. * * @param[out] versionInfo: Module version information address. * @return void */ void PDT_DRV_GetVersionInfo(Drv_VersionInfo_Type *versionInfo); /*! * @brief Set PDT callback function. * * @param[in] instance: The PDT instance number * @param[in] func: callback function * @return none */ void PDT_DRV_InstallCallback(uint8_t instance, const pdt_callback_t func); /*! * @brief PDT common interrupt service routine. * * @param[in] instance: The PDT instance number * @return none */ void PDT_DRV_IRQHandler(uint8_t instance); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* PDT_DRV_H */ /* ============================================= EOF ============================================== */