调试指南
调试开关
在 luban 根目录下执行 make kernel-menuconfig,进入 kernel 的功能配置,可以打开 PWM 模块的 DEBUG 选项:
LinuxKernelhackingArtinchipDebug[*]PWMdriverdebug
此 DEBUG 选项打开的影响:
-
PWM 驱动以-O0 编译
-
PWM 的 pr_dbg()和 dev_dbg()调试信息会被编译
在系统运行时,如果要打印 pr_dbg()和 dev_dbg()信息,还需要调整 loglevel 为 8,两个方法:
-
在 dts 中修改 bootargs,增加“loglevel=8”
-
在板子启动到 shell 后,执行命令:
echo8 > /proc/sys/kernel/printk
Sysfs 节点
在 PWM/EPWM 驱动初始化成功后,会在 Sysfs 中注册生成一个 status
节点,其中打印了当前的 PWM/EPWM
配置及状态信息:
# cat /sys/devices/platform/soc/19240000.pwm/status In PWM V1.00: Module Enable: 1, IRQ Enable: 0x0 Ch En Mode Tb-clk-rate Def CBD CBU CAD CAU PRD ZRO 0 0 Up 0 0 - - - - - - - - - - - - 1 0 Up 0 0 - - - - - - - - - - - - 2 1 Up 24000000 0 - - - Hgh Low - - - - Low Hgh - 3 0 Up 0 0 - - - - - - - - - - - -
# cat /sys/devices/platform/soc/18200000.epwm/status Ch Mode Tb-clk-rate Def CBD CBU CAD CAU PRD ZRO 0 Up 24000000 1 - - - Hgh - Low - Hgh - - - Low 1 Up 24000000 1 - - - Hgh - Low - Hgh - - - Low 2 Up 24000000 1 - - - Hgh - Low - Hgh - - - Low 3 Up 0 0 - - - - - - - - - - - - 4 Up 0 0 - - - - - - - - - - - - 5 Up 0 0 - - - - - - - - - - - -
- 设置背光Linux Backlight 子系统提供一些 Sysfs 节点,可用来获取、设置当前背光:
# cd /sys/class/backlight/backlight/ # ls /sys/class/backlight/backlight/ actual_brightness device/ subsystem/ bl_power max_brightness type brightness scale uevent # cat max_brightness 10 # cat brightness 8 # echo 9 > brightness [ 146.913635] backlight: set brightness to 9 [ 154.054433] aic-pwm 19240000.pwm: ch0 duty 900000 period 1000000 # echo 10 > brightness [ 192.145595] backlight: set brightness to 10 [ 192.151118] aic-pwm 19240000.pwm: ch0 duty 1000000 period 1000000 # echo 9 > brightness [ 194.681923] backlight: set brightness to 9 [ 194.687264] aic-pwm 19240000.pwm: ch0 duty 900000 period 1000000 # echo 8 > brightness [ 197.748816] backlight: set brightness to 8 [ 197.753606] aic-pwm 19240000.pwm: ch0 duty 800000 period 1000000 # echo 7 > brightness
- 动态配置 PWM 通道通常情况下,可以通过以下方法修改 PWM 通道的配置:
-
修改 dts 中的 PWM 通道参数;
-
编译 uboot、镜像;
-
重启板子,下载最新镜像;
-
然后用示波器查看该 PWM 通道的信号输出是否符合预期。
为了提供调试的效率,PWM/EPWM 驱动设计了一个
config
节点,可实现 运行时动态修改任意 PWM/EPWM 通道的任意参数 ,并且立即生效,一步 shell 中的echo
操作可实现上述 1、2、3 步骤的效果。如下:pwm config 节点操作:# echo "0 1 0 24000000 1 0 2 0 0 1 0" > /sys/devices/platform/soc/1924000.pwm/config [aic@] # cat /sys/devices/platform/soc/19240000.pwm/status In PWM V1.00: Module Enable: 1, IRQ Enable: 0x0 Ch En Mode Tb-clk-rate Def CBD CBU CAD CAU PRD ZRO 0 1 Up 24000000 1 - - - Hgh Low - - Hgh - - Low - 1 0 Up 24000000 1 - - - Hgh Low Low - - - - - - 2 0 Up 24000000 0 - - - - - - - - - - - - 3 0 Up 24000000 0 - - - - - - - - - - - -
epwm config 节点操作:# echo "0 0 0 24000000 0 0 0 0 1 0 2" > /sys/devices/platform/soc/18200000.epwm/config [aic@] # cat /sys/devices/platform/soc/18200000.epwm/status Ch Mode Tb-clk-rate Def CBD CBU CAD CAU PRD ZRO 0 Up 24000000 0 - - - Low - Hgh - Hgh - - - Low 1 Up 24000000 1 - - - Hgh - Low - Hgh - - - Low 2 Up 24000000 1 - - - Hgh - Low - Hgh - - - Low 3 Up 0 0 - - - - - - - - - - - - 4 Up 0 0 - - - - - - - - - - - - 5 Up 0 0 - - - - - - - - - - - -
config
的参数格式定义如下(按从左到右的输入顺序):参数名称 取值范围 含义 channel No. [0, 3] 通道号 action No. [0, 1] 0 和 1 分别代表 action0、action1 mode [0, 2] 0, up-count; 1, down-count; 2, up-down-count tb-clk-rate [0, 24000000] 时基计数器的工作时钟 default level [0, 1] 初始电平 CBD [0, 3] 0, none;
1, low;
2, high;
3, inverse
CBU CAD CAU PRD ZRO -
同一 PWM,2 个 action 输出不同占空比配置。
配置不同占空比需要依赖两个 action 在不同时间发生变化,首先使用
config
节点,配置 PWMx,action0 在 CAU、ZRO 动作,action1 在 CBU、ZRO 动作。然后分别控制output0
和output1
。 其中output0
修改的是 CMPA 寄存器,此处对应 action0,output1
修改的是 CMPB 寄存器,此处对应 action1pwm output 配置:[aic@] # echo "3 1000000 800000" > /sys/devices/platform/soc/1924000.pwm/output0 [aic@] # echo "3 1000000 200000" > /sys/devices/platform/soc/1924000.pwm/output1
epwm output 配置:[aic@] # echo "0 1000000 800000" > /sys/devices/platform/soc/18200000.epwm/output0 [aic@] # echo "0 1000000 200000" > /sys/devices/platform/soc/18200000.epwm/output1
-
指定数目脉冲输出。
pwm output 配置:[aic@] # echo "3 0 1000000 800000 8" > /sys/devices/platform/soc/1924000.pwm/pulse
epwm output 配置:[aic@] # echo "0 0 1000000 500000 8" > /sys/devices/platform/soc/18200000.epwm/pulse
脉冲输出的方向与 action 配置有关,同时指定脉冲数目输出依赖中断,中断模式需要与 action 配置相对应。
其中 mode 范围为 0-3,依次为:
-
0: TBCTR=CMPA 且计数器正在递增时触发事件
-
1: TBCTR=CMPA 且计数器正在递减时触发事件
-
2: TBCTR=CMPB 且计数器正在递增时触发事件
-
3: TBCTR=CMPB 且计数器正在递减时触发事件
-
-