Edit online

调试指南

18 Dec 2024
Read time: 9 minute(s)

调试开关

  1. 在 SDK 根目录下,执行下列命令,进入 kernel 的功能配置界面:
    make kernel-menuconfig

    或使用简写命令

    make km
  2. 在内核配置界面,打开 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 中的状态信息

在 PWM/EPWM 驱动初始化成功后,会在 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 中的背光设置

Linux 背光子系统提供了用来获取和设置当前背光的 Sysfs 节点。例如,执行下列命令可以查看和修改 Linux 系统中背光的当前亮度和最大亮度:
  1. 查看背光配置:
    • 进入背光配置目录:
      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
  2. 修改背光配置:
    • 将亮度设置为 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 参数。

假设需要动态配置一个 PWM 通道,设备路径为 /sys/devices/platform/soc/1924000.pwm/config,以及一个 EPWM 通道,设备路径为 /sys/devices/platform/soc/18200000.epwm/config
注: 关于config 节点参数,详情可查看 config 节点参数描述
  1. 使用一步 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
  2. 修改完配置后,查看 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   -   -   -   -   -   -
                                -   -   -   -   -   -
  3. 编译 U-Boot 和镜像文件。
  4. 重启板子后下载最新镜像。
  5. 使用示波器查看该 PWM 通道的信号输出是否符合预期。
  6. 配置 PWM 输出占空比。
    同一 PWW 中的两个 action 输出不同占空比。配置不同占空比需要依赖两个 action 在不同时间发生变化:
    1. config 节点中,配置 PWMx,action0 在 CAU、ZRO 动作,action1 在 CBU、ZRO 动作。
    2. 分别控制 output0output1

      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
  7. 如果需要指定数目的脉冲输出,可以使用以下命令:

    以下示例表示配置输出 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
    注: 脉冲输出方向与 action 配置有关,并且指定脉冲数目输出依赖中断,中断模式需要与 action 配置相对应,详情可查看脉冲输出方向与 Action 配置指定脉冲数目输出依赖中断

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 可以独立配置其触发条件、输出电平以及是否产生中断等。

假设需要动态配置一个 PWM 通道,设备路径为 /sys/devices/platform/soc/1924000.pwm/config,执行下列命令,可配置两个 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 且计数器正在递减时触发事件