Driver: QDEC & PWM¶
1 功能概述¶
本文主要介绍PAN1080 EVB板QDEC外设模块的使用,检测外部PWM信号,触发QDEC计数。
2 环境要求¶
board: pan1080a_afld_evb
uart (option): 显示串口log
Panchip Serial Assistant V0.0.006.exe
3 编译和烧录¶
项目位置:zephyr\samples_panchip\drivers\qdec\qdec_pwm
目前可使用ZAL工具或quick build脚本进行编译和下载。
脚本位置:quick_build_samples\drivers\qdec_pwm.bat
。
打开脚本后默认会编译项目,编译完成时,可输入字符进行后续下载等操作:
Input the keyword to continue:
'b' build 编译项目
'r' make clean and rebuild 重新编译项目
'f' flash download 下载
'e' erase chip 擦除芯片
'o' open project by VS Code 打开 `VS Code`,可查看源码,执行编译下载等
others exit 退出
wait input:
4 演示说明¶
5 开发说明¶
5.2 初始QDEC¶
const struct device *qdec_dev = DEVICE_DT_GET(DT_NODELABEL(qdec));
5.3 配置QDEC¶
在“pan1080a_afld_evb.overlay”文件中添加QDEC参数配置:
&qdec {
event-threshold = <100>;
polarity = "polarity-low";
resolution = "cnt-resolution-1x";
filter-threshold = "filter-threshold-3";
pinctrl-0 = <&p0_4_qdec_x0 &p0_5_qdec_x1>;
status = "okay";
};
Config Type |
Description |
---|---|
event-threshold |
设置qdec事件触发阈值(此处是100) |
polarity |
设置qdec电平极性,可设置为高或者低电平有效(此处是低电平有效) |
resolution |
设置qdec分辨率,可设置为1x、2x、4x(此处是1x) |
filter-threshold |
设置qdec短脉冲过滤,设置范围为0~7(此处是3) |
QDEC PIN脚配置:
pinctrl-0 = <&p0_4_qdec_x0 &p0_5_qdec_x1>;
配置X0、X1两个通道。
同理配置Y0、Y1和Z0、Z1两个通道
pinctrl-0 = <&p0_4_qdec_x0 &p0_5_qdec_x1 &p0_6_qdec_y0 &p0_7_qdec_y1 &p2_0_qdec_z0 &p2_1_qdec_z1>;
5.4 QDEC中断配置使能¶
通道配置:
uint8_t channel = QDEC_CNT_IDX_X;
qdec_clear_event_cnt(qdec_dev, channel);
代码默认配置通道X,也可配置成QDEC_CNT_IDX_Y、QDEC_CNT_IDX_Z。
qdec_irq_add_cb(qdec_dev, qdec_irq_cb);
qdec_clear_int_msk(qdec_dev, ENABLE, QDEC_INT_CNT_OVERFLOW_Msk | QDEC_INT_CNT_UNDERFLOW_Msk);
qdec_clear_event_cnt(qdec_dev, channel);
qdec_clear_int_flag(qdec_dev, QDEC_FUNC_ALL);
qdec_clear_raw_int_flag(qdec_dev, QDEC_FUNC_ALL);
qdec_set_enable(qdec_dev, ENABLE, QDEC_EN_Msk | QDEC_FILTER_EN_Msk | (QDEC_CHANNEL_X_EN_Msk << channel) | QDEC_EVENT_EN_Msk);
注册中断回调函数“qdec_irq_cb”,配置通道X、向上计数和向下计数中断,清中断标志位。