a77b0dc866
* update lhal api comments * add cam driver * add efuse driver * add iso11898 driver
309 lines
7.4 KiB
C
309 lines
7.4 KiB
C
#ifndef _BFLB_PWM_V2_H
|
|
#define _BFLB_PWM_V2_H
|
|
|
|
#include "bflb_core.h"
|
|
|
|
/** @addtogroup LHAL
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup PWM_V2
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup PWM_CHANNEL pwm channel definition
|
|
* @{
|
|
*/
|
|
#define PWM_CH0 0
|
|
#define PWM_CH1 1
|
|
#define PWM_CH2 2
|
|
#define PWM_CH3 3
|
|
#define PWM_V2_CH_MAX 4
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWM_POLARITY pwm polarity definition
|
|
* @{
|
|
*/
|
|
#define PWM_POLARITY_ACTIVE_LOW 0
|
|
#define PWM_POLARITY_ACTIVE_HIGH 1
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWM_STATE pwm state definition
|
|
* @{
|
|
*/
|
|
#define PWM_STATE_INACTIVE 0
|
|
#define PWM_STATE_ACTIVE 1
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWM_TRIG_SDC_SRC pwm trigger adc source definition
|
|
* @{
|
|
*/
|
|
#define PWM_TRIG_ADC_SRC_CH0_L 0
|
|
#define PWM_TRIG_ADC_SRC_CH0_H 1
|
|
#define PWM_TRIG_ADC_SRC_CH1_L 2
|
|
#define PWM_TRIG_ADC_SRC_CH1_H 3
|
|
#define PWM_TRIG_ADC_SRC_CH2_L 4
|
|
#define PWM_TRIG_ADC_SRC_CH2_H 5
|
|
#define PWM_TRIG_ADC_SRC_CH3_L 6
|
|
#define PWM_TRIG_ADC_SRC_CH3_H 7
|
|
#define PWM_TRIG_ADC_SRC_PERIOD 8
|
|
#define PWM_TRIG_ADC_SRC_NONE 0xF
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWM_INTEN pwm interrupt enable definition
|
|
* @{
|
|
*/
|
|
#define PWM_INTEN_CH0_L (1 << 0)
|
|
#define PWM_INTEN_CH0_H (1 << 1)
|
|
#define PWM_INTEN_CH1_L (1 << 2)
|
|
#define PWM_INTEN_CH1_H (1 << 3)
|
|
#define PWM_INTEN_CH2_L (1 << 4)
|
|
#define PWM_INTEN_CH2_H (1 << 5)
|
|
#define PWM_INTEN_CH3_L (1 << 6)
|
|
#define PWM_INTEN_CH3_H (1 << 7)
|
|
#define PWM_INTEN_PERIOD (1 << 8)
|
|
#define PWM_INTEN_BRAKE (1 << 9)
|
|
#define PWM_INTEN_REPT (1 << 10)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWM_INTSTS pwm interrupt status definition
|
|
* @{
|
|
*/
|
|
#define PWM_INTSTS_CH0_L (1 << 0)
|
|
#define PWM_INTSTS_CH0_H (1 << 1)
|
|
#define PWM_INTSTS_CH1_L (1 << 2)
|
|
#define PWM_INTSTS_CH1_H (1 << 3)
|
|
#define PWM_INTSTS_CH2_L (1 << 4)
|
|
#define PWM_INTSTS_CH2_H (1 << 5)
|
|
#define PWM_INTSTS_CH3_L (1 << 6)
|
|
#define PWM_INTSTS_CH3_H (1 << 7)
|
|
#define PWM_INTSTS_PERIOD (1 << 8)
|
|
#define PWM_INTSTS_BRAKE (1 << 9)
|
|
#define PWM_INTSTS_REPT (1 << 10)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWM_INTCLR pwm interrupt clear definition
|
|
* @{
|
|
*/
|
|
#define PWM_INTCLR_CH0_L (1 << 0)
|
|
#define PWM_INTCLR_CH0_H (1 << 1)
|
|
#define PWM_INTCLR_CH1_L (1 << 2)
|
|
#define PWM_INTCLR_CH1_H (1 << 3)
|
|
#define PWM_INTCLR_CH2_L (1 << 4)
|
|
#define PWM_INTCLR_CH2_H (1 << 5)
|
|
#define PWM_INTCLR_CH3_L (1 << 6)
|
|
#define PWM_INTCLR_CH3_H (1 << 7)
|
|
#define PWM_INTCLR_PERIOD (1 << 8)
|
|
#define PWM_INTCLR_BRAKE (1 << 9)
|
|
#define PWM_INTCLR_REPT (1 << 10)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup PWM_CMD pwm feature control cmd definition
|
|
* @{
|
|
*/
|
|
#define PWM_CMD_SET_TRIG_ADC_SRC (0x01)
|
|
#define PWM_CMD_SET_EXT_BRAKE_POLARITY (0x02)
|
|
#define PWM_CMD_SET_EXT_BRAKE_ENABLE (0x03)
|
|
#define PWM_CMD_SET_SW_BRAKE_ENABLE (0x04)
|
|
#define PWM_CMD_SET_STOP_ON_REPT (0x05)
|
|
#define PWM_CMD_SET_REPT_COUNT (0x06)
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @brief PWM channel configuration structure
|
|
*
|
|
* @param positive_polarity PWM posotive channel polarity, use @ref PWM_POLARITY
|
|
* @param negative_polarity PWM negative channel polarity, use @ref PWM_POLARITY
|
|
* @param positive_stop_state PWM posotive channel state when stop, use @ref PWM_STATE
|
|
* @param negative_stop_state PWM negative channel state when stop, use @ref PWM_STATE
|
|
* @param positive_brake_state PWM posotive channel state when brake, use @ref PWM_STATE
|
|
* @param negative_brake_state PWM negative channel state when brake, use @ref PWM_STATE
|
|
* @param dead_time PWM channel dead time
|
|
*/
|
|
struct bflb_pwm_v2_channel_config_s {
|
|
uint8_t positive_polarity;
|
|
uint8_t negative_polarity;
|
|
uint8_t positive_stop_state;
|
|
uint8_t negative_stop_state;
|
|
uint8_t positive_brake_state;
|
|
uint8_t negative_brake_state;
|
|
uint8_t dead_time;
|
|
};
|
|
|
|
/**
|
|
* @brief PWM configuration structure
|
|
*
|
|
* @param clk_source PWM clock source, use @ref BFLB_SYSTEM_CLOCK
|
|
* @param clk_div PWM clock dividor, should be in 1~65535
|
|
* @param period PWM period count, should be in 2~65535
|
|
*/
|
|
struct bflb_pwm_v2_config_s {
|
|
uint8_t clk_source;
|
|
uint16_t clk_div;
|
|
uint16_t period;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief Initialize pwm.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] config pointer to save pwm config
|
|
*/
|
|
void bflb_pwm_v2_init(struct bflb_device_s *dev, const struct bflb_pwm_v2_config_s *config);
|
|
|
|
/**
|
|
* @brief Deinitialize pwm.
|
|
*
|
|
* @param [in] dev device handle
|
|
*/
|
|
void bflb_pwm_v2_deinit(struct bflb_device_s *dev);
|
|
|
|
/**
|
|
* @brief Start pwm output.
|
|
*
|
|
* @param [in] dev device handle
|
|
*/
|
|
void bflb_pwm_v2_start(struct bflb_device_s *dev);
|
|
|
|
/**
|
|
* @brief Stop pwm output.
|
|
*
|
|
* @param [in] dev device handle
|
|
*/
|
|
void bflb_pwm_v2_stop(struct bflb_device_s *dev);
|
|
|
|
/**
|
|
* @brief Set pwm period to change pwm frequence. Frequcence(hz) = pwm source clock /div/period.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] period pwm period
|
|
*/
|
|
void bflb_pwm_v2_set_period(struct bflb_device_s *dev, uint16_t period);
|
|
|
|
/**
|
|
* @brief Get pwm frequcency.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @return frequcency
|
|
*/
|
|
float bflb_pwm_v2_get_frequency(struct bflb_device_s *dev);
|
|
|
|
/**
|
|
* @brief Config pwm channel.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] ch channel number
|
|
* @param [in] config pointer to save pwm channel config
|
|
*/
|
|
void bflb_pwm_v2_channel_init(struct bflb_device_s *dev, uint8_t ch, struct bflb_pwm_v2_channel_config_s *config);
|
|
|
|
/**
|
|
* @brief Set pwm dutycycle. Dutycycle(%) = (high_threhold - low_threhold)/period * 100%.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] ch channel number
|
|
* @param [in] low_threhold pwm low threhold
|
|
* @param [in] high_threhold pwm high threhold
|
|
*/
|
|
void bflb_pwm_v2_channel_set_threshold(struct bflb_device_s *dev, uint8_t ch, uint16_t low_threhold, uint16_t high_threhold);
|
|
|
|
/**
|
|
* @brief Start pwm positive output.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] ch channel number
|
|
*/
|
|
void bflb_pwm_v2_channel_positive_start(struct bflb_device_s *dev, uint8_t ch);
|
|
|
|
/**
|
|
* @brief Start pwm negative output.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] ch channel number
|
|
*/
|
|
void bflb_pwm_v2_channel_negative_start(struct bflb_device_s *dev, uint8_t ch);
|
|
|
|
/**
|
|
* @brief Stop pwm positive output.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] ch channel number
|
|
*/
|
|
void bflb_pwm_v2_channel_positive_stop(struct bflb_device_s *dev, uint8_t ch);
|
|
|
|
/**
|
|
* @brief Stop pwm negative output.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] ch channel number
|
|
*/
|
|
void bflb_pwm_v2_channel_negative_stop(struct bflb_device_s *dev, uint8_t ch);
|
|
|
|
/**
|
|
* @brief Enable pwm interrupt.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] int_en interrupt type
|
|
* @param [in] enable true means enable, otherwise disable
|
|
*/
|
|
void bflb_pwm_v2_int_enable(struct bflb_device_s *dev, uint32_t int_en, bool enable);
|
|
|
|
/**
|
|
* @brief Get pwm interrupt status.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @return interrupt status, use @ref PWM_INTSTS
|
|
*/
|
|
uint32_t bflb_pwm_v2_get_intstatus(struct bflb_device_s *dev);
|
|
|
|
/**
|
|
* @brief Clear pwm interrupt status.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] int_clear clear value, use @ref PWM_INTCLR
|
|
*/
|
|
void bflb_pwm_v2_int_clear(struct bflb_device_s *dev, uint32_t int_clear);
|
|
|
|
/**
|
|
* @brief Control pwm feature.
|
|
*
|
|
* @param [in] dev device handle
|
|
* @param [in] cmd feature command, use @ref PWM_CMD
|
|
* @param [in] arg user data
|
|
* @return A negated errno value on failure.
|
|
*/
|
|
int bflb_pwm_v2_feature_control(struct bflb_device_s *dev, int cmd, size_t arg);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif |