DRV_PWM

[English]

DRV_PWM API Status

API

drv_pwm_init()

drv_pwm_deinit()

drv_pwm_sel_channel_mode()

drv_pwm_breath_config()

drv_pwm_breath_sel_output()

drv_pwm_breath_reg_callback()

drv_pwm_out_pwm_config()

drv_pwm_capture_config()

drv_pwm_capture_get_value()

drv_pwm_reg_irq_callback()

drv_pwm_enable_channel()

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
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
enum _drv_pwm_breath_irq_e

Values:

enumerator DRV_PWM_BREATH_IRQ_ON
enumerator DRV_PWM_BREATH_IRQ_OFF
enum _drv_pwm_breath_out_e

Values:

enumerator DRV_PWM_BREATH_OUT
enumerator DRV_PWM_LIGHT_ON
enumerator DRV_PWM_LIGHT_OFF
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
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
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
enum _drv_pwm_trig_input_e

Values:

enumerator DRV_PWM_INPUT_CH1st_EDGE1
enumerator DRV_PWM_INPUT_CH2nd_EDGE1
enumerator DRV_PWM_INPUT_CH1st_EDGE2
enumerator DRV_PWM_INPUT_CH2nd_EDGE2
enumerator DRV_PWM_INPUT_TRI2
enumerator DRV_PWM_INPUT_TRI1
enumerator DRV_PWM_INPUT_TRI0
enum _drv_pwm_input_parity_e

Values:

enumerator DRV_PWM_INPUT_PARITY_POSE_EDGE
enumerator DRV_PWM_INPUT_PARITY_NEG_EDGE
enumerator DRV_PWM_INPUT_PARITY_2EDGE