820 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			820 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/****************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
							 | 
						||
| 
								 | 
							
								be copied by any method or incorporated into another program without
							 | 
						||
| 
								 | 
							
								the express written consent of Aerospace C.Power. This Information or any portion
							 | 
						||
| 
								 | 
							
								thereof remains the property of Aerospace C.Power. The Information contained herein
							 | 
						||
| 
								 | 
							
								is believed to be accurate and Aerospace C.Power assumes no responsibility or
							 | 
						||
| 
								 | 
							
								liability for its use in any way and conveys no license or title under
							 | 
						||
| 
								 | 
							
								any patent or copyright and makes no representation or warranty that this
							 | 
						||
| 
								 | 
							
								Information is free from patent or copyright infringement.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								****************************************************************************/
							 | 
						||
| 
								 | 
							
								#ifndef _IOT_PWM_API_H_
							 | 
						||
| 
								 | 
							
								#define _IOT_PWM_API_H_
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* pwm api mode, working on either IOT_API_MODE_PWM or IOT_API_MODE_EPWM.
							 | 
						||
| 
								 | 
							
								    IOT_API_MODE_PWM is default. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* working on pwm mode, use 'iot_pwm_xxx' api. */
							 | 
						||
| 
								 | 
							
								    IOT_API_MODE_PWM = 0,
							 | 
						||
| 
								 | 
							
								    /* working on epwm mode, use 'iot_epwm_xxx' api */
							 | 
						||
| 
								 | 
							
								    IOT_API_MODE_EPWM,
							 | 
						||
| 
								 | 
							
								}iot_pwm_api_mode_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define pwm channel */
							 | 
						||
| 
								 | 
							
								#define IOT_PWM_CHANNEL_0       0
							 | 
						||
| 
								 | 
							
								#define IOT_PWM_CHANNEL_1       1
							 | 
						||
| 
								 | 
							
								#define IOT_PWM_CHANNEL_2       2
							 | 
						||
| 
								 | 
							
								#define IOT_PWM_CHANNEL_3       3
							 | 
						||
| 
								 | 
							
								#define IOT_PWM_CHANNEL_4       4
							 | 
						||
| 
								 | 
							
								#define IOT_PWM_CHANNEL_5       5
							 | 
						||
| 
								 | 
							
								#define IOT_PWM_CHANNEL_INVAL   0xff
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef uint32_t (*pwm_isr)();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_start() - start PWM.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_start(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_stop() - stop PWM.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_stop(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_hw_init() - initialize the PWM module.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 * @retval:         0 - success
							 | 
						||
| 
								 | 
							
								 *                  otherwise - error code
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_pwm_hw_init(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_hw_deinit() - deinitialize the PWM module.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_hw_deinit(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_single_mode_init() - initialize the PWM single module.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 * @retval:   0           -   for success case
							 | 
						||
| 
								 | 
							
								 * @retval:   otherwise   -   error code
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_pwm_single_mode_init(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_get_clk() - get the time base clk of PWM.
							 | 
						||
| 
								 | 
							
								 * @return pwm time base clk frequence, unit is 1Hz.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_pwm_get_clk();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_pwm_set_clk() - pwm src clk set.
							 | 
						||
| 
								 | 
							
								  *         Notice: in one pwm, all channel use same clk_source ,
							 | 
						||
| 
								 | 
							
								  *         so keep the clk_source and period the same as last.
							 | 
						||
| 
								 | 
							
								  * @param  clk_source specifies the pwm timer clock source.
							 | 
						||
| 
								 | 
							
								  *         This parameter can be one of the following values:
							 | 
						||
| 
								 | 
							
								  *            @arg IOT_PWM_CLK_SRC_2M5 (KL1)
							 | 
						||
| 
								 | 
							
								  *            @arg IOT_PWM_CLK_SRC_25M (KL1\KL2)
							 | 
						||
| 
								 | 
							
								  *            @arg IOT_PWM_CLK_SRC_50M (KL1)
							 | 
						||
| 
								 | 
							
								  *            @arg IOT_PWM_CLK_SRC_75M (KL2)
							 | 
						||
| 
								 | 
							
								  *            @arg IOT_PWM_CLK_SRC_100M (KL2)
							 | 
						||
| 
								 | 
							
								  * @return 0 -- Operation Successful; others -- Operation failed.
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								int iot_pwm_set_clk(uint8_t clk_src);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_get_ch_clk() - get the PWM channel clock frequency.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 * @return pwm channel clock frequence, unit is 1Hz.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_pwm_get_ch_clk(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_set_duty() - set the duty cycle of PWM.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 * @param duty: duty cycle 0~10000, stands for 0%~100%, unit:0.01%.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_set_duty(uint8_t ch, uint32_t duty);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_set_period() - set the period of PWM.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 * @param period: pwm period.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_set_period(uint8_t ch, uint32_t period);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_gpio_config() - config the GPIO for PWM output.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel channel num, see IOT_PWM_CHANNEL_XXX .
							 | 
						||
| 
								 | 
							
								 * @param gpio_h: output gpio for PWM wave, can be 0xFF if no gpio for this.
							 | 
						||
| 
								 | 
							
								 * @param gpio_l: output gpio for PWM opposite wave, can be 0xFF if no gpio
							 | 
						||
| 
								 | 
							
								 * for this.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_gpio_config(uint8_t ch, uint8_t gpio_h, uint8_t gpio_l);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_gpio_config_with_isr() - config the GPIO for PWM output.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel channel num, see IOT_PWM_CHANNEL_XXX .
							 | 
						||
| 
								 | 
							
								 * @param gpio_h: output gpio for PWM wave, can be 0xFF if no gpio for this.
							 | 
						||
| 
								 | 
							
								 * @param gpio_l: output gpio for PWM opposite wave, can be 0xFF if no gpio
							 | 
						||
| 
								 | 
							
								 * @param isr: PWM interrupt callback function.
							 | 
						||
| 
								 | 
							
								 * for this.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_gpio_config_with_isr(uint8_t ch, uint8_t gpio_h,
							 | 
						||
| 
								 | 
							
								    uint8_t gpio_l, pwm_isr isr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_start_for_single() - start PWM in single mode.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_start_for_single(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_ch_init() - pwm channel init.
							 | 
						||
| 
								 | 
							
								 * @param ch: channel channel num, see IOT_PWM_CHANNEL_XXX.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_ch_init(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_pwm_config() - pwm config.
							 | 
						||
| 
								 | 
							
								  *         Notice: in one pwm, all channel use same clk_source and period,
							 | 
						||
| 
								 | 
							
								  *         so keep the clk_source and period the same as last.
							 | 
						||
| 
								 | 
							
								  * @param  ch channel num, see IOT_PWM_CHANNEL_XXX .
							 | 
						||
| 
								 | 
							
								  * @param  clk_source specifies the pwm timer clock source.
							 | 
						||
| 
								 | 
							
								  *         This parameter can be one of the following values:
							 | 
						||
| 
								 | 
							
								  *            @arg IOT_PWM_CLK_SRC_2M5 (KL1)
							 | 
						||
| 
								 | 
							
								  *            @arg IOT_PWM_CLK_SRC_25M (KL1\KL2)
							 | 
						||
| 
								 | 
							
								  *            @arg IOT_PWM_CLK_SRC_50M (KL1)
							 | 
						||
| 
								 | 
							
								  * @param  period 0 ~ (2^15 - 1), period counter.
							 | 
						||
| 
								 | 
							
								  * @param  gpio_p specifies the pwm positive output gpio, set 0xFF if no use.
							 | 
						||
| 
								 | 
							
								  * @param  gpio_n specifies the pwm negative output gpio, set 0xFF if no use.
							 | 
						||
| 
								 | 
							
								  * @return 0 -- Operation Successful; others -- Operation failed.
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								int iot_pwm_config(uint8_t ch, uint8_t clk_source,
							 | 
						||
| 
								 | 
							
								    uint32_t period, uint8_t gpio_p, uint8_t gpio_n);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_pwm_deconfig() - pwm default config.
							 | 
						||
| 
								 | 
							
								  *         Notice: if pwm channel need iot_pwm_config() again, it first need
							 | 
						||
| 
								 | 
							
								  *         iot_pwm_deconfig().
							 | 
						||
| 
								 | 
							
								  * @param  ch channel num, see IOT_PWM_CHANNEL_XXX .
							 | 
						||
| 
								 | 
							
								  * @return 0 -- Operation Successful; others -- Operation failed.
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								int iot_pwm_deconfig(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_set_raw_duty() - set the duty counter of PWM.
							 | 
						||
| 
								 | 
							
								 * @param ch channel num, see IOT_PWM_CHANNEL_XXX .
							 | 
						||
| 
								 | 
							
								 * @param duty_cnt duty counter, 0 ~ period max value.
							 | 
						||
| 
								 | 
							
								 *                 100% duty, if duty_cnt >= period cnt
							 | 
						||
| 
								 | 
							
								 * @return 0 -- Operation Successful; others -- Operation failed.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int iot_pwm_set_raw_duty(uint8_t ch, uint32_t duty_cnt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_dead_band_config() - config the dead band of PWM.
							 | 
						||
| 
								 | 
							
								 * @param ch channel num, see IOT_PWM_CHANNEL_XXX .
							 | 
						||
| 
								 | 
							
								 * @param rising_db  rising dead time, unit in ns.
							 | 
						||
| 
								 | 
							
								 * @param falling_db  falling dead time, unit in ns.
							 | 
						||
| 
								 | 
							
								 * @param rising_actual  return actual rising dead time, unit in ns.
							 | 
						||
| 
								 | 
							
								 * @param falling_actual  return actual falling dead time, unit in ns.
							 | 
						||
| 
								 | 
							
								 * @return 0 -- Operation Successful; others -- Operation failed.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int iot_pwm_dead_band_config(uint8_t ch, uint32_t rising_db,
							 | 
						||
| 
								 | 
							
								    uint32_t falling_db, uint32_t *rising_actual, uint32_t *falling_actual);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_pwm_fault_config() - config the fault function of PWM.
							 | 
						||
| 
								 | 
							
								 * @param ch channel num, see IOT_PWM_CHANNEL_XXX .
							 | 
						||
| 
								 | 
							
								 * @param gpio  gpio num for the fault event signal input, low active.
							 | 
						||
| 
								 | 
							
								 * @param h_state  pwm output state when fault event is low.
							 | 
						||
| 
								 | 
							
								 * @param l_state  pwm output state when fault event is low.
							 | 
						||
| 
								 | 
							
								 * @param cb  fault interrupt hand call back function.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_pwm_fault_config(uint8_t ch, uint8_t gpio, uint8_t h_state,
							 | 
						||
| 
								 | 
							
								    uint8_t l_state,pwm_isr cb);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* epwm channels.
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_0 ~ IOT_EPWM_CHANNEL_3, available on KL1
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_0 ~ IOT_EPWM_CHANNEL_5, available on KL2 \ KL3 */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_0 = 0,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_1,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_2,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_3,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_4,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_5,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CHANNEL_MAX
							 | 
						||
| 
								 | 
							
								}iot_epwm_channel_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* clock source of epwm */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* support: KL1 */
							 | 
						||
| 
								 | 
							
								    IOT_PWM_CLK_SRC_2M5 = 0,
							 | 
						||
| 
								 | 
							
								    /* support: KL1 \ KL2 \ KL3 */
							 | 
						||
| 
								 | 
							
								    IOT_PWM_CLK_SRC_25M,
							 | 
						||
| 
								 | 
							
								    /* support: KL1 */
							 | 
						||
| 
								 | 
							
								    IOT_PWM_CLK_SRC_50M,
							 | 
						||
| 
								 | 
							
								    /* support: KL2 */
							 | 
						||
| 
								 | 
							
								    IOT_PWM_CLK_SRC_75M,
							 | 
						||
| 
								 | 
							
								    /* support: KL2 */
							 | 
						||
| 
								 | 
							
								    IOT_PWM_CLK_SRC_100M,
							 | 
						||
| 
								 | 
							
								    /* support: KL3 */
							 | 
						||
| 
								 | 
							
								    IOT_PWM_CLK_SRC_150M,
							 | 
						||
| 
								 | 
							
								}iot_epwm_clk_src_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* trigger source for channel interrupt
							 | 
						||
| 
								 | 
							
								    Notice: only IOT_EPWM_INT_TRIG_CNT_EQU_PRD is supported on KL1. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* reserved */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_INT_TRIG_RESERVED = 0,
							 | 
						||
| 
								 | 
							
								    /* counter equals 0 */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_INT_TRIG_CNT_EQU_ZERO = 1,
							 | 
						||
| 
								 | 
							
								    /* counter equals to period value */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_INT_TRIG_CNT_EQU_PRD = 2,
							 | 
						||
| 
								 | 
							
								    /* counter equals to 0 or period value, is useful in up-down count mode.*/
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_INT_TRIG_CNT_EQU_ZERO_OR_PRD = 3,
							 | 
						||
| 
								 | 
							
								    /* counter incrementing, and equals compare A */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_INT_TRIG_CNT_UP_EQU_CMPA = 4,
							 | 
						||
| 
								 | 
							
								    /* counter decrementing, and equals compare A */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_INT_TRIG_CNT_DOWN_EQU_CMPA = 5,
							 | 
						||
| 
								 | 
							
								    /* counter incrementing, and equals compare B */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_INT_TRIG_CNT_UP_EQU_CMPB = 6,
							 | 
						||
| 
								 | 
							
								    /* counter decrementing, and equals compare B */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_INT_TRIG_CNT_DOWN_EQU_CMPB = 7
							 | 
						||
| 
								 | 
							
								}iot_epwm_int_trigger_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* trigger source for channel SOC(start of adc conversion) */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* event from epwm Digital-compare submodule */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_SOC_TRIG_DC_EVT = 0,
							 | 
						||
| 
								 | 
							
								    /* counter equals 0 */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_SOC_TRIG_CNT_EQU_ZERO = 1,
							 | 
						||
| 
								 | 
							
								    /* counter equals to period value */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_SOC_TRIG_CNT_EQU_PRD = 2,
							 | 
						||
| 
								 | 
							
								    /* counter equals to 0 or period value, is useful in up-down count mode.*/
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_SOC_TRIG_CNT_EQU_ZERO_OR_PRD = 3,
							 | 
						||
| 
								 | 
							
								    /* counter incrementing, and equals compare A */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_SOC_TRIG_CNT_UP_EQU_CMPA = 4,
							 | 
						||
| 
								 | 
							
								    /* counter decrementing, and equals compare A */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_SOC_TRIG_CNT_DOWN_EQU_CMPA = 5,
							 | 
						||
| 
								 | 
							
								    /* counter incrementing, and equals compare B */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_SOC_TRIG_CNT_UP_EQU_CMPB = 6,
							 | 
						||
| 
								 | 
							
								    /* counter decrementing, and equals compare B */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_SOC_TRIG_CNT_DOWN_EQU_CMPB = 7
							 | 
						||
| 
								 | 
							
								}iot_epwm_soc_trigger_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* trip-zone input, total 3.
							 | 
						||
| 
								 | 
							
								    only IOT_EPWM_TZ_1 is supported on KL1. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_TZ_1 = 0,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_TZ_2,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_TZ_3,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_TZ_MAX
							 | 
						||
| 
								 | 
							
								}iot_epwm_tz_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* trip-zone action on epwm out pin. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* set to high-impedance. unsupported on KL1.*/
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_TZ_ACT_HIGH_IMPEDANCE = 0,
							 | 
						||
| 
								 | 
							
								    /* set to high level. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_TZ_ACT_SET_HIGH = 1,
							 | 
						||
| 
								 | 
							
								    /* set to low level. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_TZ_ACT_SET_LOW = 2,
							 | 
						||
| 
								 | 
							
								    /* no action is taken. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_TZ_ACT_DO_NOTHING = 3
							 | 
						||
| 
								 | 
							
								}iot_epwm_tz_action_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* channel config updater, while epwm is running. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* update frequency, enabled if 'ch_usage'=IOT_EPWM_CH_USEAGE_COMMON.
							 | 
						||
| 
								 | 
							
								        the effected time of new value specified by 'ch_period_load_mode'. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_UPDATER_FREQUENCY,
							 | 
						||
| 
								 | 
							
								    /* update duty, enabled if 'ch_usage'=IOT_EPWM_CH_USEAGE_COMMON.
							 | 
						||
| 
								 | 
							
								        the effected time of new value specified by 'ch_duty_load_mode'.*/
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_UPDATER_DUTY,
							 | 
						||
| 
								 | 
							
								    /* update frequency and duty, enabled if
							 | 
						||
| 
								 | 
							
								        'ch_usage'= IOT_EPWM_CH_USEAGE_COMMON. the effected time of new value
							 | 
						||
| 
								 | 
							
								        specified by  'ch_period_load_mode' and 'ch_duty_load_mode'.*/
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_UPDATER_FREQUENCY_DUTY,
							 | 
						||
| 
								 | 
							
								    /* update period count, enabled if 'ch_usage'=IOT_EPWM_CH_USEAGE_PRECISE.
							 | 
						||
| 
								 | 
							
								        the effected time of new value specified by 'ch_period_load_mode'. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_UPDATER_PERIOD_CNT,
							 | 
						||
| 
								 | 
							
								    /* update compare count, enabled if 'ch_usage'=IOT_EPWM_CH_USEAGE_PRECISE.
							 | 
						||
| 
								 | 
							
								        the effected time of new value specified by 'ch_duty_load_mode'. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_UPDATER_COMPARE_CNT,
							 | 
						||
| 
								 | 
							
								    /* update period and compare count, enabled if
							 | 
						||
| 
								 | 
							
								        'ch_usage'=IOT_EPWM_CH_USEAGE_PRECISE. the effected time of new value
							 | 
						||
| 
								 | 
							
								        specified by 'ch_period_load_mode' and 'ch_duty_load_mode'. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_UPDATER_PERIOD_COMPARE_CNT,
							 | 
						||
| 
								 | 
							
								}iot_epwm_ch_updater_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* channel software event force trigger */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* trigger a interrupt */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_INNER_INT,
							 | 
						||
| 
								 | 
							
								    /* trigger a SOCA */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_SOCA,
							 | 
						||
| 
								 | 
							
								    /* trigger a SOCB */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_SOCB,
							 | 
						||
| 
								 | 
							
								    /* trigger a cycle-by-cycle trip-zone evnet */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_TZ_CBC,
							 | 
						||
| 
								 | 
							
								    /* trigger an one-shut trip-zone evnet */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_TZ_OSHT,
							 | 
						||
| 
								 | 
							
								    /* force outa to low one-time, resumed next period */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTA_LOW_OSHT,
							 | 
						||
| 
								 | 
							
								    /* force outa to high one-time, resumed next period */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTA_HIGH_OSHT,
							 | 
						||
| 
								 | 
							
								    /* force outa to toggle one-time, resumed next period */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTA_TOGG_OSHT,
							 | 
						||
| 
								 | 
							
								    /* force outb to low one-time, resumed next period */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTB_LOW_OSHT,
							 | 
						||
| 
								 | 
							
								    /* force outb to high one-time, resumed next period */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTB_HIGH_OSHT,
							 | 
						||
| 
								 | 
							
								    /* force outb to toggle one-time, resumed next period */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTB_TOGG_OSHT,
							 | 
						||
| 
								 | 
							
								    /* force outa to low continuously, until software resume it */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTA_LOW_CTNU,
							 | 
						||
| 
								 | 
							
								    /* force outa to high continuously, until software resume it */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTA_HIGH_CTNU,
							 | 
						||
| 
								 | 
							
								    /* resume outa from software control */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTA_RESUME,
							 | 
						||
| 
								 | 
							
								    /* force outb to low continuously, until software resume it */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTB_LOW_CTNU,
							 | 
						||
| 
								 | 
							
								    /* force outb to high continuously, until software resume it */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTB_HIGH_CTNU,
							 | 
						||
| 
								 | 
							
								    /* resume outb from software control */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SW_EVENT_OUTB_RESUME,
							 | 
						||
| 
								 | 
							
								}iot_epwm_ch_event_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* polarity of epwm output. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_POLARITY_NORMAL = 0,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_POLARITY_INVERTED,
							 | 
						||
| 
								 | 
							
								}iot_epwm_polarity_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* alignment of epwm output. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_ALIGN_EDGE = 0,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_ALIGN_CENTER,
							 | 
						||
| 
								 | 
							
								}iot_epwm_align_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* new period value load time. unsupported on KL1.*/
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_PERIOD_LOAD_CNT_EQU_ZERO = 0,
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_PERIOD_LOAD_IMMEDIATELY,
							 | 
						||
| 
								 | 
							
								}iot_epwm_period_load_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* new duty value load time. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* load immediately. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_DUTY_LOAD_IMMEDIATELY = 0,
							 | 
						||
| 
								 | 
							
								    /* load when counter equal 0. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_DUTY_LOAD_CNT_EQU_ZERO,
							 | 
						||
| 
								 | 
							
								    /* load when counter equal period. unsupported on KL1. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_DUTY_LOAD_CNT_EQU_PRD,
							 | 
						||
| 
								 | 
							
								    /* load when counter equal zero or period. unsupported on KL1. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_DUTY_LOAD_CNT_EQU_ZERO_OR_PRD,
							 | 
						||
| 
								 | 
							
								}iot_epwm_duty_load_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* channel synchronization mode (when to load epwm period, compa and compb). */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* depend on soc sync signal. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_SOC_SYNC = 0,
							 | 
						||
| 
								 | 
							
								    /* depend on inner_sync_load */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_INNER_SYNC,
							 | 
						||
| 
								 | 
							
								}iot_epwm_ch_sync_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* channel usage, how to config channel frequency and duty. */
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    /* common config, set the frequency and duty cycle, the actual effective
							 | 
						||
| 
								 | 
							
								        value may deviate from the set value. Get the actual value with
							 | 
						||
| 
								 | 
							
								        iot_epwm_ch_status_get(). */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_USEAGE_COMMON = 0,
							 | 
						||
| 
								 | 
							
								    /*  precise config, set the counting period value and comparator value,
							 | 
						||
| 
								 | 
							
								        suitable for applications with precise requirements. */
							 | 
						||
| 
								 | 
							
								    IOT_EPWM_CH_USEAGE_PRECISE,
							 | 
						||
| 
								 | 
							
								}iot_epwm_ch_usage_e;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* config for iot epwm module. Notice: [x], x is the default value */
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    /* epwm clock source, enum in iot_epwm_clk_src_e. */
							 | 
						||
| 
								 | 
							
								    iot_epwm_clk_src_e clk_src;
							 | 
						||
| 
								 | 
							
								    /* (unsupported on KL1)
							 | 
						||
| 
								 | 
							
								        any gpio as input pin of extern synchronization: [0xFF], 0xFF means
							 | 
						||
| 
								 | 
							
								        not used.
							 | 
						||
| 
								 | 
							
								        NOTE: extern sync signal must be input to channel 0. it pass through
							 | 
						||
| 
								 | 
							
								        all channels.*/
							 | 
						||
| 
								 | 
							
								    uint8_t ext_sync_pin;
							 | 
						||
| 
								 | 
							
								    /* any gpio as input pins of trip-zone: [0xFF], 0xFF means not used
							 | 
						||
| 
								 | 
							
								        Notice: only tz_pins[IOT_EPWM_TZ_1] is used on KL1. */
							 | 
						||
| 
								 | 
							
								    uint8_t tz_pins[IOT_EPWM_TZ_MAX];
							 | 
						||
| 
								 | 
							
								}iot_epwm_global_config_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_EPWM_GLOBAL_CONFIG_DEFAULT                                      \
							 | 
						||
| 
								 | 
							
								{                                                                           \
							 | 
						||
| 
								 | 
							
								    .clk_src = IOT_PWM_CLK_SRC_25M,                                         \
							 | 
						||
| 
								 | 
							
								    .ext_sync_pin = 0xFF,                                                   \
							 | 
						||
| 
								 | 
							
								    .tz_pins[IOT_EPWM_TZ_1] = 0xFF,                                         \
							 | 
						||
| 
								 | 
							
								    .tz_pins[IOT_EPWM_TZ_2] = 0xFF,                                         \
							 | 
						||
| 
								 | 
							
								    .tz_pins[IOT_EPWM_TZ_3] = 0xFF,                                         \
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* config of epwm channel. Notice: [x], x is the default value. */
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    /* channel clock divider, ch_clk = clk_src/ch_clk_div: [25],1~256. */
							 | 
						||
| 
								 | 
							
								    uint16_t ch_clk_div;
							 | 
						||
| 
								 | 
							
								    /* output pin of EPWMA: [0xFF], 0xFF means no output. */
							 | 
						||
| 
								 | 
							
								    uint8_t ch_pin_outa;
							 | 
						||
| 
								 | 
							
								    /* output pin of EPWMB: [0xFF], 0xFF means no output. */
							 | 
						||
| 
								 | 
							
								    uint8_t ch_pin_outb;
							 | 
						||
| 
								 | 
							
								    /* EPWMA polarity: [IOT_EPWM_POLARITY_NORMAL] or IOT_EPWM_POLARITY_INVERTED */
							 | 
						||
| 
								 | 
							
								    iot_epwm_polarity_e ch_polarity_outa;
							 | 
						||
| 
								 | 
							
								    /* EPWMB polarity: IOT_EPWM_POLARITY_NORMAL or [IOT_EPWM_POLARITY_INVERTED] */
							 | 
						||
| 
								 | 
							
								    iot_epwm_polarity_e ch_polarity_outb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* alignment of epwm output: [IOT_EPWM_ALIGN_EDGE] or IOT_EPWM_ALIGN_CENTER.
							 | 
						||
| 
								 | 
							
								        Notice: epwm period time will be twice in IOT_EPWM_ALIGN_CENTER. */
							 | 
						||
| 
								 | 
							
								    iot_epwm_align_e ch_align_mode;
							 | 
						||
| 
								 | 
							
								    /* new period value load time, unsupported on KL1:
							 | 
						||
| 
								 | 
							
								     [IOT_EPWM_PERIOD_LOAD_CNT_EQU_ZERO] or IOT_EPWM_PERIOD_LOAD_IMMEDIATELY. */
							 | 
						||
| 
								 | 
							
								    iot_epwm_period_load_e ch_period_load_mode;
							 | 
						||
| 
								 | 
							
								    /* new duty value load time: [IOT_EPWM_DUTY_LOAD_CNT_EQU_ZERO], enum in
							 | 
						||
| 
								 | 
							
								        iot_epwm_duty_load_e. */
							 | 
						||
| 
								 | 
							
								    iot_epwm_duty_load_e ch_duty_load_mode;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* channel usage, how to config channel frequency and duty:
							 | 
						||
| 
								 | 
							
								        IOT_EPWM_CH_USEAGE_COMMON or [IOT_EPWM_CH_USEAGE_PRECISE]. */
							 | 
						||
| 
								 | 
							
								    iot_epwm_ch_usage_e ch_usage;
							 | 
						||
| 
								 | 
							
								    /* common config, active when ch_usage = IOT_EPWM_CH_USEAGE_COMMON. */
							 | 
						||
| 
								 | 
							
								    struct{
							 | 
						||
| 
								 | 
							
								        /* epwm frequency, unit is 1Hz: [0], 0 ~ channel_clock/2 */
							 | 
						||
| 
								 | 
							
								        uint32_t freq;
							 | 
						||
| 
								 | 
							
								        /* epwm duty cycle, unit is 0.01%: [0], 0~10000 */
							 | 
						||
| 
								 | 
							
								        uint32_t duty;
							 | 
						||
| 
								 | 
							
								    }ch_common_cfg;
							 | 
						||
| 
								 | 
							
								    /* precise config, active when ch_usage = IOT_EPWM_CH_USEAGE_PRECISE. */
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* KL1, counter period value: [1000], 1~0x8000(2^15) */
							 | 
						||
| 
								 | 
							
								        /* KL2/KL3, counter period value: [1000], 1~0x1000000(2^24) */
							 | 
						||
| 
								 | 
							
								        uint32_t period_cnt;
							 | 
						||
| 
								 | 
							
								        /* KL1, comparator value: [500], 0~0x7FFF */
							 | 
						||
| 
								 | 
							
								        /* KL2/KL3, comparator value: [500], 0~0xFFFFFF */
							 | 
						||
| 
								 | 
							
								        uint32_t compare_cnt;
							 | 
						||
| 
								 | 
							
								    }ch_precise_cfg;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* (unsupported on KL1)
							 | 
						||
| 
								 | 
							
								        phase synchronization enables: [0],disable; 1,enable; */
							 | 
						||
| 
								 | 
							
								    uint8_t ch_phs_en;
							 | 
						||
| 
								 | 
							
								    /* (unsupported on KL1)
							 | 
						||
| 
								 | 
							
								        phase synchronization value: [0], 0~0xFFFFFF(2^24) */
							 | 
						||
| 
								 | 
							
								    uint32_t ch_phase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* (unsupported on KL1)
							 | 
						||
| 
								 | 
							
								        single-pulse mode enables, outputs only one cycle, and then the counter
							 | 
						||
| 
								 | 
							
								        stops: [0],disable; 1,enable;*/
							 | 
						||
| 
								 | 
							
								    uint8_t ch_single_pulse_en;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* (KL3 only)
							 | 
						||
| 
								 | 
							
								        channel synchronization mode: IOT_EPWM_CH_SOC_SYNC or
							 | 
						||
| 
								 | 
							
								        [IOT_EPWM_CH_INNER_SYNC] */
							 | 
						||
| 
								 | 
							
								    iot_epwm_ch_sync_e ch_sync_mode;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* (KL3 only)
							 | 
						||
| 
								 | 
							
								        duty cycle auto-adjust function. at the end of period, the comparator
							 | 
						||
| 
								 | 
							
								        value is automatically adjusted from cmp_start to cmp_end, and then
							 | 
						||
| 
								 | 
							
								        cycled back and forth. */
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* [0],disable; 1,enable; */
							 | 
						||
| 
								 | 
							
								        uint8_t enable;
							 | 
						||
| 
								 | 
							
								        /* start value of comparator: [0], 0~0xFFFFFF(2^24) */
							 | 
						||
| 
								 | 
							
								        uint32_t cmp_start;
							 | 
						||
| 
								 | 
							
								        /* end value of comparator: [0], 0~0xFFFFFF(2^24) */
							 | 
						||
| 
								 | 
							
								        uint32_t cmp_end;
							 | 
						||
| 
								 | 
							
								        /* adjust step of comparator : [0], 0~0xFF */
							 | 
						||
| 
								 | 
							
								        uint8_t cmp_step;
							 | 
						||
| 
								 | 
							
								    }ch_auto_duty;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* dead band function. */
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* [0],disable; 1,enable; */
							 | 
						||
| 
								 | 
							
								        uint8_t enable;
							 | 
						||
| 
								 | 
							
								        /* delay before rising adge, unit is channel clock cycle time:
							 | 
						||
| 
								 | 
							
								            KL1: [0], 0~0x1FF
							 | 
						||
| 
								 | 
							
								            KL2/KL3: [0], 0~0x2FF */
							 | 
						||
| 
								 | 
							
								        uint16_t rising_delay;
							 | 
						||
| 
								 | 
							
								        /* delay after falling adge, unit is channel clock cycle time:
							 | 
						||
| 
								 | 
							
								            KL1: [0], 0~0x1FF
							 | 
						||
| 
								 | 
							
								            KL2/KL3: [0], 0~0x2FF */
							 | 
						||
| 
								 | 
							
								        uint16_t falling_delay;
							 | 
						||
| 
								 | 
							
								    }ch_dead_band;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* (unsupported on KL1)
							 | 
						||
| 
								 | 
							
								        epwm chopper. a carrier wave of specific frequencies and duty cycles will
							 | 
						||
| 
								 | 
							
								        be superimposed on the output waveform of the epwm.*/
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* [0],disable; 1,enable; */
							 | 
						||
| 
								 | 
							
								        uint8_t enable;
							 | 
						||
| 
								 | 
							
								        /* clock divider of carrier wave: [1], 1~8.
							 | 
						||
| 
								 | 
							
								            Notice: clock source of carrier wave is division 8 of channel clock.
							 | 
						||
| 
								 | 
							
								            so, clk_carrier = (clk_channel/8)/divider. */
							 | 
						||
| 
								 | 
							
								        uint8_t divider;
							 | 
						||
| 
								 | 
							
								        /* duty cycle of carrier wave, unit is 12.5%: [1], 1~7. */
							 | 
						||
| 
								 | 
							
								        uint8_t duty;
							 | 
						||
| 
								 | 
							
								        /* width of first pulse. unit is 8x channel clock cycle: [1], 1~16. */
							 | 
						||
| 
								 | 
							
								        uint8_t osht_width;
							 | 
						||
| 
								 | 
							
								    }ch_chopper;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* interrupt */
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* [0],disable; 1,enable; */
							 | 
						||
| 
								 | 
							
								        uint8_t enable;
							 | 
						||
| 
								 | 
							
								        /* trigger source for channel interrupt: [IOT_EPWM_INT_TRIG_CNT_EQU_PRD],
							 | 
						||
| 
								 | 
							
								            enum in iot_epwm_int_trigger_e. */
							 | 
						||
| 
								 | 
							
								        iot_epwm_int_trigger_e trigger;
							 | 
						||
| 
								 | 
							
								        /* (unsupported on KL1)
							 | 
						||
| 
								 | 
							
								            interrupt divider, i.e. how many times it is triggered to produce an
							 | 
						||
| 
								 | 
							
								            interrupt: [0], 0~255.
							 | 
						||
| 
								 | 
							
								            Notice: 0 means never produce an interrupt(software force trigger
							 | 
						||
| 
								 | 
							
								            is ignored too). */
							 | 
						||
| 
								 | 
							
								        uint8_t divider;
							 | 
						||
| 
								 | 
							
								        /* ISR for epwm interrupt: [null] */
							 | 
						||
| 
								 | 
							
								        uint32_t (*callback)(void);
							 | 
						||
| 
								 | 
							
								    }ch_interrupt;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* (unsupported on KL1)
							 | 
						||
| 
								 | 
							
								        SOCA function. SOC, Start of ADC Conversion. */
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* [0],disable; 1,enable; */
							 | 
						||
| 
								 | 
							
								        uint8_t enable;
							 | 
						||
| 
								 | 
							
								        /* trigger source of soca: [IOT_EPWM_INT_TRIG_CNT_EQU_ZERO], eunm in
							 | 
						||
| 
								 | 
							
								            iot_epwm_soc_trigger_e */
							 | 
						||
| 
								 | 
							
								        iot_epwm_soc_trigger_e trigger;
							 | 
						||
| 
								 | 
							
								        /* soca divider, i.e. how many times it is triggered to produce a SOC:
							 | 
						||
| 
								 | 
							
								            [0], 0~15. Notice: 0 means never produce SOC.  */
							 | 
						||
| 
								 | 
							
								        uint8_t divider;
							 | 
						||
| 
								 | 
							
								        /* ISR for soca: [null] */
							 | 
						||
| 
								 | 
							
								        uint32_t (*callback)(void);
							 | 
						||
| 
								 | 
							
								    }ch_soca;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* (unsupported on KL1)
							 | 
						||
| 
								 | 
							
								        SOCB function, the same as SOCA. this means that each epwm cycle can
							 | 
						||
| 
								 | 
							
								        trigger SOC twice.  */
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* [0],disable; 1,enable; */
							 | 
						||
| 
								 | 
							
								        uint8_t enable;
							 | 
						||
| 
								 | 
							
								        /* trigger source of socb: [IOT_EPWM_INT_TRIG_CNT_EQU_ZERO], eunm in
							 | 
						||
| 
								 | 
							
								            iot_epwm_soc_trigger_e */
							 | 
						||
| 
								 | 
							
								        iot_epwm_soc_trigger_e trigger;
							 | 
						||
| 
								 | 
							
								        /* socb divider, i.e. how many times it is triggered to produce a SOC:
							 | 
						||
| 
								 | 
							
								            [0], 0~15. Notice: 0 means never produce SOC.  */
							 | 
						||
| 
								 | 
							
								        uint8_t divider;
							 | 
						||
| 
								 | 
							
								        /* ISR for socb: [null] */
							 | 
						||
| 
								 | 
							
								        uint32_t (*callback)(void);
							 | 
						||
| 
								 | 
							
								    }ch_socb;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* the trip_zone function can be triggered in two ways:
							 | 
						||
| 
								 | 
							
								        OSHT: one-shot, tirgger status remained until cleared by software.
							 | 
						||
| 
								 | 
							
								        CBC: cycle-by-cycle trigger, tirgger status will be refreshed at every
							 | 
						||
| 
								 | 
							
								            epwm cycle begining(CNT=0).
							 | 
						||
| 
								 | 
							
								        Notice: these two way can coexist on KL2/KL3, but not coexist on KL1.*/
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* [0],disable; 1,enable; */
							 | 
						||
| 
								 | 
							
								        uint8_t enable;
							 | 
						||
| 
								 | 
							
								        /* TZ1-TZ3 for KL2/KL3, TZ1 for KL1, whether used as a trigger source
							 | 
						||
| 
								 | 
							
								            for OSHT(multiple select): [0],no; 1,yes; */
							 | 
						||
| 
								 | 
							
								        uint8_t tz_en_for_osht[IOT_EPWM_TZ_MAX];
							 | 
						||
| 
								 | 
							
								        /* TZ1-TZ3 for KL2/KL3, TZ1 for KL1, whether used as a trigger source
							 | 
						||
| 
								 | 
							
								            for CBC(multiple select): [0],no; 1,yes; */
							 | 
						||
| 
								 | 
							
								        uint8_t tz_en_for_cbc[IOT_EPWM_TZ_MAX];
							 | 
						||
| 
								 | 
							
								        /* action of outa: [IOT_EPWM_TZ_ACT_SET_HIGH],
							 | 
						||
| 
								 | 
							
								            eunm in iot_epwm_tz_action_e. */
							 | 
						||
| 
								 | 
							
								        iot_epwm_tz_action_e act_outa;
							 | 
						||
| 
								 | 
							
								        /* action of outb: [IOT_EPWM_TZ_ACT_SET_HIGH],
							 | 
						||
| 
								 | 
							
								            eunm in iot_epwm_tz_action_e. */
							 | 
						||
| 
								 | 
							
								        iot_epwm_tz_action_e act_outb;
							 | 
						||
| 
								 | 
							
								        /* ISR for OSHT interrupt: [null] */
							 | 
						||
| 
								 | 
							
								        uint32_t (*callback_osht)(void);
							 | 
						||
| 
								 | 
							
								        /* ISR for CBC interrupt: [null] */
							 | 
						||
| 
								 | 
							
								        uint32_t (*callback_cbc)(void);
							 | 
						||
| 
								 | 
							
								    }ch_trip_zone;
							 | 
						||
| 
								 | 
							
								}iot_epwm_ch_config_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IOT_EPWM_CHANNEL_CONFIG_DEFAULT                                     \
							 | 
						||
| 
								 | 
							
								{                                                                           \
							 | 
						||
| 
								 | 
							
								    /* default clock source is 25M. so, channel clock = 25M/25 = 1M. */     \
							 | 
						||
| 
								 | 
							
								    .ch_clk_div = 25,                                                       \
							 | 
						||
| 
								 | 
							
								    .ch_pin_outa = 0xFF,                                                    \
							 | 
						||
| 
								 | 
							
								    .ch_pin_outb = 0xFF,                                                    \
							 | 
						||
| 
								 | 
							
								    /* complementary output, outa is normal, outb is inverted.  */          \
							 | 
						||
| 
								 | 
							
								    .ch_polarity_outa = IOT_EPWM_POLARITY_NORMAL,                           \
							 | 
						||
| 
								 | 
							
								    .ch_polarity_outb = IOT_EPWM_POLARITY_INVERTED,                         \
							 | 
						||
| 
								 | 
							
								    .ch_align_mode = IOT_EPWM_ALIGN_EDGE,                                   \
							 | 
						||
| 
								 | 
							
								    .ch_period_load_mode = IOT_EPWM_PERIOD_LOAD_CNT_EQU_ZERO,               \
							 | 
						||
| 
								 | 
							
								    .ch_duty_load_mode = IOT_EPWM_DUTY_LOAD_CNT_EQU_ZERO,                   \
							 | 
						||
| 
								 | 
							
								    /* freq 1K Hz, duty 50%. */                                             \
							 | 
						||
| 
								 | 
							
								    .ch_usage = IOT_EPWM_CH_USEAGE_PRECISE,                                 \
							 | 
						||
| 
								 | 
							
								    .ch_common_cfg.freq = 1000,                                             \
							 | 
						||
| 
								 | 
							
								    .ch_common_cfg.duty = 5000,                                             \
							 | 
						||
| 
								 | 
							
								    .ch_precise_cfg.period_cnt = 1000,                                      \
							 | 
						||
| 
								 | 
							
								    .ch_precise_cfg.compare_cnt = 500,                                      \
							 | 
						||
| 
								 | 
							
								    /* phase synchronization is disable. */                                 \
							 | 
						||
| 
								 | 
							
								    .ch_phs_en = 0,                                                         \
							 | 
						||
| 
								 | 
							
								    .ch_phase = 0,                                                          \
							 | 
						||
| 
								 | 
							
								    /* single pulse is disable. */                                          \
							 | 
						||
| 
								 | 
							
								    .ch_single_pulse_en = 0,                                                \
							 | 
						||
| 
								 | 
							
								    .ch_sync_mode = IOT_EPWM_CH_INNER_SYNC,                                 \
							 | 
						||
| 
								 | 
							
								    /* auto duty is disable. */                                             \
							 | 
						||
| 
								 | 
							
								    .ch_auto_duty.enable = 0,                                               \
							 | 
						||
| 
								 | 
							
								    .ch_auto_duty.cmp_start = 0,                                            \
							 | 
						||
| 
								 | 
							
								    .ch_auto_duty.cmp_end = 0,                                              \
							 | 
						||
| 
								 | 
							
								    .ch_auto_duty.cmp_step = 0,                                             \
							 | 
						||
| 
								 | 
							
								    /* dead band is disable. */                                             \
							 | 
						||
| 
								 | 
							
								    .ch_dead_band.enable = 0,                                               \
							 | 
						||
| 
								 | 
							
								    .ch_dead_band.rising_delay = 0,                                         \
							 | 
						||
| 
								 | 
							
								    .ch_dead_band.falling_delay = 0,                                        \
							 | 
						||
| 
								 | 
							
								    /* chopper is disable. */                                               \
							 | 
						||
| 
								 | 
							
								    .ch_chopper.enable = 0,                                                 \
							 | 
						||
| 
								 | 
							
								    .ch_chopper.divider = 1,                                                \
							 | 
						||
| 
								 | 
							
								    .ch_chopper.duty = 1,                                                   \
							 | 
						||
| 
								 | 
							
								    .ch_chopper.osht_width = 1,                                             \
							 | 
						||
| 
								 | 
							
								    /* interrupt is disable. */                                             \
							 | 
						||
| 
								 | 
							
								    .ch_interrupt.enable = 0,                                               \
							 | 
						||
| 
								 | 
							
								    .ch_interrupt.trigger = IOT_EPWM_INT_TRIG_CNT_EQU_PRD,                  \
							 | 
						||
| 
								 | 
							
								    .ch_interrupt.divider = 0,                                              \
							 | 
						||
| 
								 | 
							
								    .ch_interrupt.callback = NULL,                                          \
							 | 
						||
| 
								 | 
							
								    /* soca is disable. */                                                  \
							 | 
						||
| 
								 | 
							
								    .ch_soca.enable = 0,                                                    \
							 | 
						||
| 
								 | 
							
								    .ch_soca.trigger = IOT_EPWM_INT_TRIG_CNT_EQU_ZERO,                      \
							 | 
						||
| 
								 | 
							
								    .ch_soca.divider = 0,                                                   \
							 | 
						||
| 
								 | 
							
								    .ch_soca.callback = NULL,                                               \
							 | 
						||
| 
								 | 
							
								    /* socb is disable. */                                                  \
							 | 
						||
| 
								 | 
							
								    .ch_socb.enable = 0,                                                    \
							 | 
						||
| 
								 | 
							
								    .ch_socb.trigger = IOT_EPWM_INT_TRIG_CNT_EQU_ZERO,                      \
							 | 
						||
| 
								 | 
							
								    .ch_socb.divider = 0,                                                   \
							 | 
						||
| 
								 | 
							
								    .ch_socb.callback = NULL,                                               \
							 | 
						||
| 
								 | 
							
								    /* trip zone is disable. */                                             \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.enable = 0,                                               \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.tz_en_for_osht[IOT_EPWM_TZ_1] = 0,                        \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.tz_en_for_osht[IOT_EPWM_TZ_2] = 0,                        \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.tz_en_for_osht[IOT_EPWM_TZ_3] = 0,                        \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.tz_en_for_cbc[IOT_EPWM_TZ_1] = 0,                         \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.tz_en_for_cbc[IOT_EPWM_TZ_2] = 0,                         \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.tz_en_for_cbc[IOT_EPWM_TZ_3] = 0,                         \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.act_outa = IOT_EPWM_TZ_ACT_SET_HIGH,                      \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.act_outb = IOT_EPWM_TZ_ACT_SET_HIGH,                      \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.callback_osht = NULL,                                     \
							 | 
						||
| 
								 | 
							
								    .ch_trip_zone.callback_cbc = NULL,                                      \
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* actual status of channel */
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								    /* actual channel clock */
							 | 
						||
| 
								 | 
							
								    uint32_t actual_ch_clk;
							 | 
						||
| 
								 | 
							
								    /* actual frequency, unit is Hz */
							 | 
						||
| 
								 | 
							
								    uint32_t actual_freq;
							 | 
						||
| 
								 | 
							
								    /* actual duty cycle, unit is 0.01% */
							 | 
						||
| 
								 | 
							
								    uint32_t actual_duty;
							 | 
						||
| 
								 | 
							
								    /* actual period value */
							 | 
						||
| 
								 | 
							
								    uint32_t actual_period;
							 | 
						||
| 
								 | 
							
								    /* actual compare value */
							 | 
						||
| 
								 | 
							
								    uint32_t actual_compare;
							 | 
						||
| 
								 | 
							
								    /* actual counter value */
							 | 
						||
| 
								 | 
							
								    uint32_t actual_counter;
							 | 
						||
| 
								 | 
							
								}iot_epwm_ch_status_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_pwm_api_mode_select() - select pwm api mode. can only be called
							 | 
						||
| 
								 | 
							
								 *          once.
							 | 
						||
| 
								 | 
							
								 * @param  api_mode IOT_API_MODE_PWM(default) or IOT_API_MODE_EPWM.
							 | 
						||
| 
								 | 
							
								 * @return 0 - successful; others - fail.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int iot_pwm_api_mode_select(iot_pwm_api_mode_e api_mode);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_pwm_api_mode_query() - query pwm api mode.
							 | 
						||
| 
								 | 
							
								 * @param  none.
							 | 
						||
| 
								 | 
							
								 * @return iot_pwm_api_mode_e current pwm api mode.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								iot_pwm_api_mode_e iot_pwm_api_mode_query(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_get_channel_count() - get available channel count.
							 | 
						||
| 
								 | 
							
								 * @param  none.
							 | 
						||
| 
								 | 
							
								 * @return available channel count.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_epwm_get_channel_count(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_global_config_set() - apply the epwm module config.
							 | 
						||
| 
								 | 
							
								 *          Notice: should be called when all channels are stoped.
							 | 
						||
| 
								 | 
							
								 * @param  cfg config of epwm module.
							 | 
						||
| 
								 | 
							
								 * @return 0 - successful; others - fail.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int iot_epwm_global_config_set(iot_epwm_global_config_t *cfg);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_global_config_get() - get the epwm module config.
							 | 
						||
| 
								 | 
							
								 * @param  none.
							 | 
						||
| 
								 | 
							
								 * @return iot_epwm_global_config_t * epwm module config
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								iot_epwm_global_config_t * iot_epwm_global_config_get(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_global_start() - start all epwm channels. open the main clock
							 | 
						||
| 
								 | 
							
								 *          gate of all channel.
							 | 
						||
| 
								 | 
							
								 * @param  none.
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_global_start(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_global_stop() - stop all epwm channels. close the main clock
							 | 
						||
| 
								 | 
							
								 *          gate of all channel.
							 | 
						||
| 
								 | 
							
								 * @param  none.
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_global_stop(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_global_sync() - generate a soc sync signal, which make
							 | 
						||
| 
								 | 
							
								 *          channel new period and compare value effective. works on all
							 | 
						||
| 
								 | 
							
								 *          channels which configured 'ch_sync_mode'=IOT_EPWM_CH_SOC_SYNC.
							 | 
						||
| 
								 | 
							
								 *          Notice: this api is unsupported on KL1.
							 | 
						||
| 
								 | 
							
								 * @param  none.
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_global_sync(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_start() - start epwm channel.
							 | 
						||
| 
								 | 
							
								 * @param  ch channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_ch_start(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_stop() - stop epwm channel, counter is stoped.
							 | 
						||
| 
								 | 
							
								 * @param  ch channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_ch_stop(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_close() - close epwm channel. all config of channel is
							 | 
						||
| 
								 | 
							
								 *          set to default and release resource such as pin, interrupt.
							 | 
						||
| 
								 | 
							
								 * @param  ch channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_ch_close(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_config_set() - apply channel config.
							 | 
						||
| 
								 | 
							
								 *          Notice: should be called when channel is stoped.
							 | 
						||
| 
								 | 
							
								 * @param  ch channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @param  cfg config of channel.
							 | 
						||
| 
								 | 
							
								 * @return 0 - successful; others - fail.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int iot_epwm_ch_config_set(uint8_t ch, iot_epwm_ch_config_t *cfg);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_config_get() - get channel config.
							 | 
						||
| 
								 | 
							
								 * @param  ch channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @return iot_epwm_ch_config_t * channel config.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								iot_epwm_ch_config_t * iot_epwm_ch_config_get(uint8_t ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_update() - update the specified parameter, when channel
							 | 
						||
| 
								 | 
							
								 *          is working.
							 | 
						||
| 
								 | 
							
								 * @param  ch: channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @param  field parameter to be updated, enum in iot_epwm_ch_updater_e.
							 | 
						||
| 
								 | 
							
								 * @param  val1 parameter1 value.
							 | 
						||
| 
								 | 
							
								 * @param  val2 parameter2 value, set to 0 if not used. only used while
							 | 
						||
| 
								 | 
							
								 *          'field' = IOT_EPWM_CH_UPDATER_FREQUENCY_DUTY or
							 | 
						||
| 
								 | 
							
								 *          IOT_EPWM_CH_UPDATER_PERIOD_COMPARE_CNT.
							 | 
						||
| 
								 | 
							
								 * @return 0 - successful; others - fail.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int iot_epwm_ch_update(uint8_t ch, iot_epwm_ch_updater_e field, uint32_t val1,
							 | 
						||
| 
								 | 
							
								    uint32_t val2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_sw_force() - software forced generate an event.
							 | 
						||
| 
								 | 
							
								 *          Notice: this api is unsupported on KL1.
							 | 
						||
| 
								 | 
							
								 * @param  ch channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @param  event event type, enum in iot_epwm_ch_event_e.
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_ch_sw_force(uint8_t ch, iot_epwm_ch_event_e event);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_clear() - clear an event flag.
							 | 
						||
| 
								 | 
							
								 *          Notice: this api is unsupported on KL1.
							 | 
						||
| 
								 | 
							
								 * @param  ch channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @param  event event type, enum in iot_epwm_ch_event_e.
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_ch_clear(uint8_t ch, iot_epwm_ch_event_e event);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @brief  iot_epwm_ch_status_get() - get the actual status of channel.
							 | 
						||
| 
								 | 
							
								 * @param  ch channel num, see IOT_EPWM_CHANNEL_X .
							 | 
						||
| 
								 | 
							
								 * @param  status status returned.
							 | 
						||
| 
								 | 
							
								 * @return none.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void iot_epwm_ch_status_get(uint8_t ch, iot_epwm_ch_status_t *status);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |