DRV_PWM
DRV_PWM API Status
API |
|---|
DRV_I2C UNIT Number
Capability |
Number |
|---|---|
UNIT Number |
11 |
DRV_PWM Pin and GPIO Map
SPI Pin |
Number |
|---|---|
PWM0 |
13 |
DRV_PWM API Reference
Header File
Functions
-
uint32_t drv_pwm_init(uint32_t dev_index, drv_pwm_src_clk_e e_clk_src)
init a PWM device.
初始化PWM设备. 调用其他pwm函数前需要初始化设备并获取device instance
- 参数:
dev_index – [in] device index, from 0(the first device), < PWM_DEVICE_NUM
e_clk_src – [in] pwm device source clock (32k or 26M)
- 返回值:
0 – fail
other – success
- 返回:
device instance
-
int32_t drv_pwm_deinit(uint32_t dev_instance)
deinit a PWM device.
反初始化PWM设备。是drv_pwm_init()的反向操作。所有channel都没有使用的时候该函数才会返回成功
- 参数:
dev_instance – [in] return value of drv_pwm_init()
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
-
int32_t drv_pwm_sel_channel_mode(uint32_t dev_instance, uint32_t chn_index, drv_pwm_mode_e e_mode, uint8_t pre_div_val)
config channel work mode.
每个channel都有3种工作模式: 呼吸灯、 pwm输出、 输入捕获模式 PWM 呼吸灯模式会有最高的优先级,即它工作的时候,pwm输出模式和输入捕获模式都不会生效 PWM 呼吸灯使用第1个timer(分频会生效),channel是第2个channel (其他channel无此功能) timer0 channel_1 PWM输出模式时: 配置 channel 0时会把channel 1的输出和它同时(反向)输出 配置 channel 2时会把channel 3的输出和它同时(反向)输出 配置 channel 4时会把channel 5的输出和它同时(反向)输出 但是,用户也可以单独配置 channel 1 3 5,不过它的限制是只有1个比较值
输入捕获模式时: 3个 timer 对应 3个channel timer0 –> channel 0 timer1 –> channel 2 timer2 –> channel 4
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] channel index (0 ~ 5)
e_mode – [in] work mode for this channel (e_mode = DRV_PWM_MODE_RESET_NULL时会复位该值到默认)
pre_div_val – [in] 该channel对应的timer的预分频值 0 ~ 255
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
-
int32_t drv_pwm_breath_config(uint32_t dev_instance, uint32_t chn_index, drv_pwm_breath_param_t *pt_breath_param)
config paramter in breath light mode.
呼吸灯模式时用来配置channel的参数的
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] channel index (0 ~ 5)
pt_breath_param – [in] 指向呼吸灯模式的参数的结构体指针
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
-
int32_t drv_pwm_breath_sel_output(uint32_t dev_instance, uint32_t chn_index, drv_pwm_breath_out_e e_output, bool output_reverse)
output control in breath light mode.
呼吸灯模式时的输出控制
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] channel index (0 ~ 5)
e_output – [in] see drv_pwm_breath_out_e
output_reverse – [in] 输出反向控制
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
-
int32_t drv_pwm_breath_reg_callback(uint32_t dev_instance, uint32_t chn_index, drv_pwm_breath_irq_e e_irq, uint16_t irq_pos, bool enable, pfunc_pwm_breath_cb_t pfn_cb, void *pv_cb_arg)
注册呼吸灯的长亮/长灭时的中断
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] 1 is the breath channel
e_irq – [in] see drv_pwm_breath_irq_e
irq_pos – [in] 在第几个步进时产生中断
enable – [in] true: enable false: disable
pfn_cb – [in] 对应的callback
pv_cb_arg – [in] 对应的callback 参数
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
-
int32_t drv_pwm_out_pwm_config(uint32_t dev_instance, uint32_t chn_index, drv_pwm_output_param_t *pt_out_param)
config paramter in PWM output mode.
PWM输出模式时用来配置channel的参数的 配置 channel 0时会把channel 1的输出和它同时(反向)输出 配置 channel 2时会把channel 3的输出和它同时(反向)输出 配置 channel 4时会把channel 5的输出和它同时(反向)输出 但是,用户也可以单独配置 channel 1 3 5,不过它的限制是只有1个比较值 即只有 cmp1_value 这个值是有效的,其他两个比较值无效
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] channel index (0 ~ 5)
pt_out_param – [in] 指向PWM输出模式的参数的结构体指针
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
-
int32_t drv_pwm_capture_config(uint32_t dev_instance, uint32_t chn_index, drv_pwm_capture_param_t *pt_capture_param)
config paramter in input capture mode.
输入捕获模式时用来配置channel的参数的, 注意,只有0/2/4 channel可以拿来做capture
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] channel index (0 2 4)
pt_capture_param – [in] 指向输入捕获模式的参数的结构体指针
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
-
uint32_t drv_pwm_capture_get_value(uint32_t dev_instance, uint32_t chn_index)
get capture value.
用在中断里面获取对应channel捕获的值
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] channel index (0 2 4)
- 返回:
capture value
-
int32_t drv_pwm_reg_irq_callback(uint32_t dev_instance, uint32_t chn_index, pfunc_pwm_cb_t pfn_cb, void *pv_cb_arg)
register callback for a channel.
公共函数,3种模式都需要用到. pfn_cb=NULL 会禁用中断
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] channel index (0 ~ 5)
pfn_cb – [in] callback for this channel, diable interrupt if pfn_cb=NULL
pv_cb_arg – [in] callback argument
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
-
int32_t drv_pwm_enable_channel(uint32_t dev_instance, uint32_t chn_index, bool enable)
enable or disable channel.
公共函数,3种模式都需要用到
- 参数:
dev_instance – [in] return value of drv_pwm_init()
chn_index – [in] channel index (0 ~ 5)
enable – [in] true:enable false:disable
- 返回值:
0 – success [BK_RET_OK]
other – fail
- 返回:
result
Structures
-
struct _drv_pwm_breath_param_t
-
struct _drv_pwm_output_param_t
-
struct _drv_pwm_capture_param_t
Macros
-
PWM_DEVICE_NUM
PWM device number.
-
PWM_CHANNEL_NUM
Type Definitions
-
typedef enum _drv_pwm_src_clk_e drv_pwm_src_clk_e
PWM source clock.
-
typedef enum _drv_pwm_mode_e drv_pwm_mode_e
PWM work mode channel_0~5 support DRV_PWM_MODE_OUT_PWM & DRV_PWM_MODE_IN_CAPTURE channel_1 support DRV_PWM_MODE_BREATH too.
-
typedef enum _drv_pwm_breath_irq_e drv_pwm_breath_irq_e
-
typedef struct _drv_pwm_breath_param_t drv_pwm_breath_param_t
-
typedef enum _drv_pwm_breath_out_e drv_pwm_breath_out_e
-
typedef enum _drv_pwm_output_mode_e drv_pwm_output_mode_e
-
typedef enum _drv_pwm_output_count_e drv_pwm_output_count_e
-
typedef struct _drv_pwm_output_param_t drv_pwm_output_param_t
-
typedef enum _drv_pwm_slave_mode_e drv_pwm_slave_mode_e
-
typedef enum _drv_pwm_trig_input_e drv_pwm_trig_input_e
-
typedef enum _drv_pwm_input_parity_e drv_pwm_input_parity_e
-
typedef struct _drv_pwm_capture_param_t drv_pwm_capture_param_t
-
typedef void (*pfunc_pwm_cb_t)(uint32_t chn_index, drv_pwm_mode_e e_irq_mode, void *pv_arg)
-
typedef void (*pfunc_pwm_breath_cb_t)(uint32_t chn_index, drv_pwm_breath_irq_e e_irq_mode, void *pv_arg)
Enumerations
-
enum _drv_pwm_src_clk_e
PWM source clock.
Values:
-
enumerator DRV_PWM_SRC_CLK_32K
-
enumerator DRV_PWM_SRC_CLK_26M
-
enumerator DRV_PWM_SRC_CLK_32K
-
enum _drv_pwm_mode_e
PWM work mode channel_0~5 support DRV_PWM_MODE_OUT_PWM & DRV_PWM_MODE_IN_CAPTURE channel_1 support DRV_PWM_MODE_BREATH too.
Values:
-
enumerator DRV_PWM_MODE_RESET_NULL
-
enumerator DRV_PWM_MODE_BREATH
-
enumerator DRV_PWM_MODE_OUT_PWM
-
enumerator DRV_PWM_MODE_IN_CAPTURE
-
enumerator DRV_PWM_MODE_RESET_NULL
-
enum _drv_pwm_breath_irq_e
Values:
-
enumerator DRV_PWM_BREATH_IRQ_ON
-
enumerator DRV_PWM_BREATH_IRQ_OFF
-
enumerator DRV_PWM_BREATH_IRQ_ON
-
enum _drv_pwm_breath_out_e
Values:
-
enumerator DRV_PWM_BREATH_OUT
-
enumerator DRV_PWM_LIGHT_ON
-
enumerator DRV_PWM_LIGHT_OFF
-
enumerator DRV_PWM_BREATH_OUT
-
enum _drv_pwm_output_mode_e
Values:
-
enumerator DRV_PWM_OUTPUT_MODE_KEEP
-
enumerator DRV_PWM_OUTPUT_MODE_CMP_INVERT
-
enumerator DRV_PWM_OUTPUT_MODE_ALWAYS_1
-
enumerator DRV_PWM_OUTPUT_MODE_CMP_AND_END_INVERT
-
enumerator DRV_PWM_OUTPUT_MODE_ALWAYS_0
-
enumerator DRV_PWM_OUTPUT_MODE_KEEP
-
enum _drv_pwm_output_count_e
Values:
-
enumerator DRV_PWM_OUTPUT_DIR_INCREASE
-
enumerator DRV_PWM_OUTPUT_BIDIR_UP_CMP
-
enumerator DRV_PWM_OUTPUT_BIDIR_DOWN_CMP
-
enumerator DRV_PWM_OUTPUT_BIDIR_UP_DOWN_CMP
-
enumerator DRV_PWM_OUTPUT_DIR_DECREASE
-
enumerator DRV_PWM_OUTPUT_DIR_INCREASE
-
enum _drv_pwm_slave_mode_e
Values:
-
enumerator DRV_PWM_SLAVE_OFF
-
enumerator DRV_PWM_SLAVE_LED
-
enumerator DRV_PWM_SLAVE_ENCODER_1
-
enumerator DRV_PWM_SLAVE_ENCODER_2
-
enumerator DRV_PWM_SLAVE_ENCODER_3
-
enumerator DRV_PWM_SLAVE_RESET
-
enumerator DRV_PWM_SLAVE_GATE
-
enumerator DRV_PWM_SLAVE_TRIGGER
-
enumerator DRV_PWM_SLAVE_HALL_1IN
-
enumerator DRV_PWM_SLAVE_HALL_3xorIN
-
enumerator DRV_PWM_SLAVE_OFF