调试指南
调试开关
-
在 SDK 根目录下,执行下列命令,进入 kernel 的功能配置界面:
make kernel-menuconfig
或使用简写命令
make km
-
在内核配置界面,打开 PWM 模块的 DEBUG 选项:
Linux Kernel hacking Artinchip Debug [*] PWM driver debug
打开 DEBUG 选项后:-
驱动以
-O0
编译。 -
pr_dbg() 和 dev_dbg() 调试信息会被编译。
在系统运行时,如果要打印 pr_dbg() 和 dev_dbg() 信息,还需要调整 loglevel 为 8,可以通过以下两种方式实现:-
在 board.dts 中修改 bootargs,增加 “loglevel=8”
-
在板子启动到 Linux Shell 后,执行下列命令:
echo8 > /proc/sys/kernel/printk
-
-
查看 Sysfs 中的状态信息
status
状态节点,其中打印了当前的 PWM/ EPWM
配置及状态信息:-
查看 PWM 状态节点:
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 - - - - - - - - - - - -
-
查看 EPWM 状态节点:
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 - - - - - - - - - - - -
查看 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
- 进入背光配置目录:
-
修改背光配置:
-
将亮度设置为 9:
echo 9 > brightness
输出示例如下:[ 146.913635] backlight: set brightness to 9 [ 154.054433] aic-pwm 19240000.pwm: ch0 duty 900000 period 1000000
-
将亮度设置为 10:
echo 10 > brightness
输出示例如下:[ 192.145595] backlight: set brightness to 10 [ 192.151118] aic-pwm 19240000.pwm: ch0 duty 1000000 period 1000000
-
将亮度重新设置为 9
echo 9 > brightness
输出示例如下:[ 194.681923] backlight: set brightness to 9 [ 194.687264] aic-pwm 19240000.pwm: ch0 duty 900000 period 1000000
-
将亮度设置为 8
echo 8 > brightness
输出示例如下:[ 197.748816] backlight: set brightness to 8 [ 197.753606] aic-pwm 19240000.pwm: ch0 duty 800000 period 1000000
-
将亮度设置为 7
echo 7 > brightness
-
动态配置 PWM 通道
为了提供调试的效率,PWM/ EPWM 驱动都包含一个 config 节点,可在系统运行时动态修改任意 PWM 或 EPWM 通道的任意参数 ,且修改可立即生效。动态配置 PWM 通道,允许开发者在不重新编译固件或重启设备的情况下调整 PWM 参数。
- 使用一步 Shell 中的 echo 操作,修改 dts
中的通道参数。
- PWM:
echo "0 1 0 24000000 1 0 2 0 0 1 0" > /sys/devices/platform/soc/1924000.pwm/config
-
EPWM
echo "0 0 0 24000000 0 0 0 0 1 0 2" > /sys/devices/platform/soc/18200000.epwm/config
- PWM:
-
修改完配置后,查看
status
文件确认配置是否生效:- PWM
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
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 - - - - - - - - - - - -
- PWM
- 编译 U-Boot 和镜像文件。
- 重启板子后下载最新镜像。
- 使用示波器查看该 PWM 通道的信号输出是否符合预期。
- 配置 PWM 输出占空比。同一 PWW 中的两个 action 输出不同占空比。配置不同占空比需要依赖两个 action 在不同时间发生变化:
- 在
config
节点中,配置 PWMx,action0 在 CAU、ZRO 动作,action1 在 CBU、ZRO 动作。 分别控制
output0
和output1
。output0
修改的是 CMPA 寄存器,此处对应 action0,output1
修改的是 CMPB 寄存器,此处对应 action1- 配置 PWM 输出占空比,例如配置通道 3
的输出占空比:
echo "3 1000000 800000" > /sys/devices/platform/soc/1924000.pwm/output0
echo "3 1000000 200000" > /sys/devices/platform/soc/1924000.pwm/output1
-
配置 EPWM 输出占空比,例如配置通道 0 的输出占空比:
echo "0 1000000 800000" > /sys/devices/platform/soc/18200000.epwm/output0
echo "0 1000000 200000" > /sys/devices/platform/soc/18200000.epwm/output1
- 配置 PWM 输出占空比,例如配置通道 3
的输出占空比:
- 在
-
如果需要指定数目的脉冲输出,可以使用以下命令:
以下示例表示配置输出 8 个脉冲:- PWM
echo "3 0 1000000 800000 8" > /sys/devices/platform/soc/1924000.pwm/pulse
- EPWM
echo "0 0 1000000 500000 8" > /sys/devices/platform/soc/18200000.epwm/pulse
- PWM
config 节点参数描述
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 |
脉冲输出方向与 Action 配置
在 PWM 和 EPWM 中,脉冲输出的方向和行为可以通过配置不同的 action
来实现。每个
action
可以独立配置其触发条件、输出电平以及是否产生中断等。
action
,分别用于控制脉冲输出的方向和行为:- 配置 action
0
echo "0 1 0 24000000 1 0 2 0 0 1 0" > /sys/devices/platform/soc/1924000.pwm/config
- 配置 action
1
echo "1 1 0 24040000 1 0 2 0 0 1 0" > /sys/devices/platform/soc/1924000.pwm/config
指定脉冲数目输出依赖中断
指定脉冲数目输出通常需要配置中断,以便在达到指定的脉冲数时触发中断处理程序。中断模式需要与 action
配置相对应,以确保正确的事件触发。
action
配置相匹配。例如:echo "3 1000000 800000 8" > /sys/devices/platform/soc/1924000.pwm/pulse
-
mode
设置为3
,表示 TBCTR=CMPB 且计数器正在递减时触发事件。确保与action
的配置相匹配。 -
mode
取值范围如下:-
0: TBCTR=CMPA 且计数器正在递增时触发事件
-
1: TBCTR=CMPA 且计数器正在递减时触发事件
-
2: TBCTR=CMPB 且计数器正在递增时触发事件
-
3: TBCTR=CMPB 且计数器正在递减时触发事件
-