PeripheralDriver_AutoChips_.../inc/pwm_output.h

403 lines
16 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 pwm_output.h
*
* @brief This file provides pwm output hardware integration functions.
*
*/
/* PRQA S 3630 EOF */ /* struct/union type will be used by user app. */
#ifndef PWM_OUTPUT_H
#define PWM_OUTPUT_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* =========================================== Includes =========================================== */
#include "pwm_common.h"
/* ============================================ Define ============================================ */
/* =========================================== Typedef ============================================ */
/*!
* @brief PWM center align duty type enumeration.
*/
typedef enum
{
PWM_DUTY_MODE_0 = 0U, /*!< CnV=Cn+1V=CNTIN,output 0% duty cycle;CnV=Cn+1V=MOD,output 100% duty cycle */
PWM_DUTY_MODE_1 /*!< CnV=Cn+1V=CNTIN,output 100% duty cycle;CnV=Cn+1V=MOD,output 0% duty cycle */
} pwm_center_align_duty_type_t;
/*!
* @brief PWM independent channel configuration structure.
*/
typedef struct
{
pwm_channel_type_t channel; /*!< Independent channel number */
uint16_t chValue; /*!< Channel value */
uint8_t chDitherValue; /*!< Channel dither value for match value*/
pwm_output_level_mode_t levelMode; /*!< Output level mode */
pwm_output_polarity_active_type_t polarity; /*!< Polarity of the channel output */
bool interruptEn; /*!< Enable/disable channel interrupt */
pwm_output_state_t initLevel; /*!< Channel init output level */
bool matchTriggerEn; /*!< Enable/disable channel trigger */
bool chEventDmaEn; /*!< Enable/disable DMA request for channel event */
} pwm_independent_ch_config_t;
/*!
* @brief PWM combine channel configuration structure.
*/
typedef struct
{
pwm_channel_type_t pairChannel; /*!< Pair of channel number (PWM_CH_0/2/4/6) */
uint16_t ch1stValue; /*!< Channel n channel value */
uint16_t ch2ndValue; /*!< Channel n+1 channel value */
uint8_t ch1stDitherValue; /*!< Channel n channel dither value */
uint8_t ch2ndDitherValue; /*!< Channel n+1 channel dither value */
pwm_output_level_mode_t levelMode; /*!< Output level mode */
bool deadtimeEn; /*!< Enable/disable dead-time insertion */
bool complementEn; /*!< Enable/disable complementary output */
bool symmetricEn; /*!< Enable/disable symmetric */
pwm_match_point_dir_type_t ch1stMatchDir; /*!< Channel n Match point direction, It only active on the up-down counting mode */
pwm_match_point_dir_type_t ch2ndMatchDir; /*!< Channel n+1 Match point direction, It only active on the up-down counting mode */
pwm_output_polarity_active_type_t ch1stPolarity; /*!< Channel n the polarity of the channel output */
pwm_output_polarity_active_type_t ch2ndPolarity; /*!< Channel n+1 the polarity of the channel output */
bool ch1stInterruptEn; /*!< Enable/disable channel n interrupt */
bool ch2ndInterruptEn; /*!< Enable/disable channel n+1 interrupt */
pwm_output_state_t ch1stInitLevel; /*!< Channel n init output level */
pwm_output_state_t ch2ndInitLevel; /*!< Channel n+1 init output level */
bool ch1stMatchTriggerEn; /*!< Enable/disable channel n trigger */
bool ch2ndMatchTriggerEn; /*!< Enable/disable channel n+1 trigger */
bool ch1stEventDmaEn; /*!< Enable/disable DMA request for channel n event */
bool ch2ndEventDmaEn; /*!< Enable/disable DMA request for channel n+1 event */
uint16_t deadtime; /*!< Dead time value */
pwm_dead_time_psc_type_t deadtimePsc; /*!< Dead time prescaler value */
} pwm_combine_ch_config_t;
/*!
* @brief PWM Modulation configuration structure.
*/
typedef struct
{
pwm_count_mode_t countMode; /*!< Counting mode */
uint8_t independentChannelNum; /*!< Number of independent channels (0~7) */
uint8_t combineChannelNum; /*!< Number of combine channels (0~3) */
uint8_t triggerRatio; /*!< Trigger ratio for init/max/match trigger */
pwm_independent_ch_config_t *independentChConfig; /*!< Configuration for independent channels */
pwm_combine_ch_config_t *combineChConfig; /*!< Configuration for combined channels */
bool initChOutputEn; /*!< Enable/disable Initial channel output */
bool initTriggerEn; /*!< Enable/disable Initial trigger */
bool maxTriggerEn; /*!< Enable/disable max trigger */
pwm_center_align_duty_type_t centerAlignDutyType; /*!< Center-align duty type */
} pwm_modulation_config_t;
/*!
* @brief PWM output compare mode enumeration.
*/
typedef enum
{
PWM_NONE_OUTPUT = 0U, /*!< No output */
PWM_TOGGLE_OUTPUT, /*!< Toggle output */
PWM_CLEAR_OUTPUT, /*!< Clear output */
PWM_SET_OUTPUT /*!< Set output */
} pwm_output_compare_mode_t;
/*!
* @brief PWM output compare channel configuration structure.
*/
typedef struct
{
pwm_channel_type_t channel; /*!< Channel number */
uint16_t comparedValue; /*!< Compared value */
pwm_output_compare_mode_t mode; /*!< Output compare mode */
bool interruptEn; /*!< Enable/disable channel interrupt */
pwm_output_polarity_active_type_t polarity; /*!< Polarity of the channel output */
pwm_output_state_t initLevel; /*!< Channel init output level */
bool matchTriggerEn; /*!< Enable/disable channel trigger */
bool chEventDmaEn; /*!< Enable/disable DMA request for channel event */
} pwm_output_compare_ch_config_t;
/*!
* @brief PWM output compare configuration structure.
*/
typedef struct
{
uint8_t channelNum; /*!< Number of output compare channels */
uint8_t triggerRatio; /*!< Trigger ratio for init/max/match trigger */
pwm_output_compare_ch_config_t *channelConfig; /*!< Output compare channels configuration */
bool initChOutputEn; /*!< Enable/disable Initial channel output */
bool initTriggerEn; /*!< Enable/disable Initial trigger */
bool maxTriggerEn; /*!< Enable/disable max trigger */
} pwm_output_compare_config_t;
/* ========================================== Variables =========================================== */
/* ==================================== Functions declaration ===================================== */
/*!
* @brief Set pwm module work in pluse width modulation mode.
*
* @param[in] instance: The pwm instance number
* @param[in] config: pointer to configuration structure
* @return none
*/
void PWM_DRV_SetPWMMode(const uint8_t instance, const pwm_modulation_config_t *config);
/*!
* @brief Set pwm module work in output compare mode.
*
* @param[in] instance: The pwm instance number
* @param[in] config: pointer to configuration structure
* @return none
*/
void PWM_DRV_SetOutputCompareMode(const uint8_t instance, const pwm_output_compare_config_t *config);
/*!
* @brief Set channel output mask.
*
* @param[in] instance: The pwm instance number
* @param[in] channel: pwm channel number
* - PWM_CH_0
* - ...
* - PWM_CH_7
* @param[in] state: enabling state
* - ENABLE
* - DISABLE
* @return none
*/
void PWM_DRV_SetChannelOutputMask(const uint8_t instance, pwm_channel_type_t channel, bool state);
/*!
* @brief Set all channel output mask.
*
* @param[in] instance: The pwm instance number
* @param[in] mask: channel mask
* - 0 ~ 0xff
* @return none
*/
void PWM_DRV_SetAllChannelOutputMask(const uint8_t instance, uint32_t mask);
/*!
* @brief Set the channel Hiz Output.
*
* @param[in] instance: The pwm instance number
* @param[in] channel: pwm channel number
* - PWM_CH_0
* - ...
* - PWM_CH_7
* @param[in] state: enabling state
* - true
* - false
* @return none
*/
void PWM_DRV_SetChannelHizOutput(const uint8_t instance, pwm_channel_type_t channel, bool state);
/*!
* @brief Set channel polarity.
*
* @param[in] instance: The pwm instance number
* @param[in] channel: pwm channel number
* - PWM_CH_0
* - ...
* - PWM_CH_7
* @param[in] polarity: output polarity
* - PWM_OUTPUT_POLARITY_ACTIVE_HIGH: active low
* - PWM_OUTPUT_POLARITY_ACTIVE_LOW: active high
* @return none
*/
void PWM_DRV_SetChannelPolarity(const uint8_t instance, pwm_channel_type_t channel,
pwm_output_polarity_active_type_t polarity);
/*!
* @brief Set channel software control function.
*
* @param[in] instance: The pwm instance number
* @param[in] channel: pwm channel number
* - PWM_CH_0
* - ...
* - PWM_CH_7
* @param[in] state: enabling state
* - ENABLE
* - DISABLE
* * @return none
*/
void PWM_DRV_SetChannelSoftControl(const uint8_t instance, pwm_channel_type_t channel, bool state);
/*!
* @brief Software control channel output level.
*
* @param[in] instance: The pwm instance number
* @param[in] channel: pwm channel number
* - PWM_CH_0
* - ...
* - PWM_CH_7
* @param[in] level: output level
* - PWM_LOW_LEVEL: output low level
* - PWM_HIGH_LEVEL: output high level
* @param[in] state: enabling state
* - ENABLE
* - DISABLE
* @return none
*/
void PWM_DRV_SoftControlChannelLevel(const uint8_t instance, pwm_channel_type_t channel,
pwm_output_state_t level, bool state);
/*!
* @brief Software control all channel output level.
*
* @param[in] instance: The pwm instance number
* @param[in] mask: channel mask
* - 0 ~ 0xff
* @param[in] level: all 8 channel output state
* - 0 ~ 0xff
* @return none
*/
void PWM_DRV_SoftControlAllChannelLevel(const uint8_t instance, uint8_t mask, uint8_t level);
/*!
* @brief Set channel inverting control.
*
* @param[in] instance: The pwm instance number
* @param[in] pairChannel: pair channel number
* - 0 ~ 3
* @param[in] state: enabling state
* - ENABLE
* - DISABLE
* @return none
*/
void PWM_DRV_SetPairChannelInvert(const uint8_t instance, uint8_t pairChannel, bool state);
/*!
* @brief Set deadtime psc & value.
*
* @param[in] instance: The pwm instance number
* @param[in] pairChannel: pwm pair channel(0~3)
* @param[in] psc: prescaler divider
* - PWM_DEADTIME_DIVID_1
* - PWM_DEADTIME_DIVID_4
* - PWM_DEADTIME_DIVID_16
* @param[in] value: inserted value
* - 0 ~ 63
* @return none
*/
void PWM_DRV_SetDeadtime(const uint8_t instance, uint8_t pairChannel,
pwm_dead_time_psc_type_t psc, uint16_t value);
/*!
* @brief Set channel0 ~ channel3 dither value.
*
* @param[in] instance: The pwm instance number
* @param[in] ditherRegNum
* - 0: set dither0 regiter
* - 1: set dither1 regiter
* @param[in] channelDitherValue: value for all 4 channel dither value
* @return none
*/
void PWM_DRV_SetChannelCounterDitherValue(const uint8_t instance, uint8_t ditherRegNum, uint32_t channelDitherValue);
/*!
* @brief Set mod dither value.
*
* @param[in] instance: The pwm instance number
* @param[in] maxCountDitherValue: mod dither value
* - 0 ~ 31
* @return none
*/
void PWM_DRV_SetMaxCountDitherValue(const uint8_t instance, uint8_t maxCountDitherValue);
/*!
* @brief Set the initialization trigger source.
*
* @param[in] instance: The pwm instance number
* @param[in] state: enabling state
* - ENABLE
* - DISABLE
* @return none
*/
void PWM_DRV_SetInitTrigger(const uint8_t instance, bool state);
/*!
* @brief Set the max trigger source.
*
* @param[in] instance: The pwm instance number
* @param[in] state: enabling state
* - ENABLE
* - DISABLE
* @return none
*/
void PWM_DRV_SetMaxTrigger(const uint8_t instance, bool state);
/*!
* @brief Set the match trigger source.
*
* @param[in] instance: The pwm instance number
* @param[in] state: enabling state
* - ENABLE
* - DISABLE
* @return none
*/
void PWM_DRV_SetMatchTrigger(const uint8_t instance, pwm_channel_type_t channel, bool state);
/*!
* @brief Set the max/match/init trigger ratio.
*
* @param[in] instance: The pwm instance number
* @param[in] triggerRatio: 0 ~ 7
* @return none
*/
void PWM_DRV_SetTriggerRatio(const uint8_t instance, uint8_t triggerRatio);
/*!
* @brief Set pair channel symmetric.
*
* @param[in] instance: The pwm instance number
* @param[in] pairChannel: pair channel number
* - 0 ~ 3
* @param[in] state: enabling state
* - ENABLE
* - DISABLE
* @return none
*/
void PWM_DRV_SetPairChannelSymmetric(const uint8_t instance, uint8_t pairChannel, bool state);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* PWM_OUTPUT_H */
/* ============================================= EOF ============================================== */