This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3354:用于背光的 eHRPWM 配置

Guru**** 2542810 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/600790/linux-am3354-ehrpwm-configuration-for-backlight

器件型号:AM3354

工具/软件:Linux

我需要一个简单的连续 PWM 信号从 AM335x GPMC_AD8 [GPIO0_22]引脚输出。 无需同步、所有时序/启动都不重要、因为这只能驱动 LCD 背光以实现亮度-只需在具有几个占空比设置的1kHz 镇流器中实现某种效果。 TRM (spru73o pdf)示例15-27 pg2308非常完美。 我无法安装 BloaterWare PWM 混乱、并且在我继承的内核上没有 sysfs PWM 功能。 我似乎无法正确配置。 下面是一些用于定义我的设置序列的伪代码。 有人看不到我遗漏了什么? 该引脚仅处于 HI 位置、从不启动脉冲链。

谢谢- Steve

----  

//所需的连续 PWM 输出 GPMC_ad8/GPIO0_22引脚、无需同步。
//格式为 WRITE_Some PWM_BASE_REGISTER[OFFSET]|=值
//大多数定义的名称都是按照 StarterWare 命名的
//

#define SOC_CONTRAL_REGS 0x44E10000 // TRM pg1411
#define PWM_CLOCK _ENABLE 0x2
#define PWMS_CLOCK _CONFIG 0x08

#define PER_EPWMSS0_CLKCTRL_OFFSET 0xd4
#define PER_EPWMSS1_CLKCTRL_OFFSET 0xcc
#define PER_EPWMSS2_CLKCTRL_OFFSET 0xd8

#define CONTRAL_PWMS_CTRL 0x0664 // TRM pg1449
#define CONTRAL_CONF_GPMC_AD (n)(0x0800 +(n * 4))
#define CONTRAL_CONF_GPMC_AD8 0x0820

#define SOC_PWMSS0_regs 0x48300000
#define SOC_PWMSS1_regs 0x48302000
#define SOC_PWMSS2_regs 0x48304000 //这是所需的 PWM2基址
#define SOC_ECAP_REGS 0x00000100
#define SOC_eQEP_regs 0x00000180
#define SOC_ePWM_regs 0x00000200 // ePWM 寄存器偏移
#define SOC_ePWM_2_regs (SOC_PWMSS2_regs + SOC_ePWM_regs)// epwm2 base

#define PWMS_CLOCK _CONFIG 0x08
#define PWMS_EHRPWM_CLK_EN_ACK 0x0100
#define PWMSS_CTRL_PWMSS2_TBCLKEN 0x04

// ePWMx 初始化寄存器
#define EHRPWM_TBCTL 0x0 //选择向上计数或 dwn 计数、选择时钟等
#define EHRPWM_TBSTS 0x2
#define EHRPWM_TBPHSHR 0x4
#define EHRPWM_TBPHS 0x6 //用于清除相位寄存器
#define EHRPWM_TBCTR 0x8 //这应该是 TBCNT,用于清除 TB 计数器寄存器
在 TBCLK 计数中#define EHRPWM_TBPRD 0xA //周期寄存器
#define EHRPWM_CMPCTL 0xE //设置影子模式
#define EHRPWM_CMPAHR 0x10
#define EHRPWM_CMPA 0x12 //时钟计数中的比较寄存器
#define EHRPWM_CMPB 0x14
#define EHRPWM_AQCTLA 0x16
#define EHRPWM_AQCTLB 0x18


/********
* PWM en 寄存器基地址地址0x44E00000
(二 /
printf ("启用 PWM2");
write_per_regs[per_EPWMSS2_CLKCTRL_offset]= PWM_CLOCK_ENABLE;


/*********
* PWM 寄存器基地址地址0x44E10000
(三 /

printf ("设置 pinmux CTRL \n");
//将 GPIO0_22、GPMC_AD8的引脚多路复用设置为 Mode4
//写入[0x44E10000 + 0x820]|= 0x14;//引脚 Mode4应为 ehrpwm2a,上拉使能
WRITE_PWM_REGs[CONTACT_CONF_GPMC_AD8]|= 0x14;//引脚模式4应为 ehrpwm2a、上拉使能


//启用 pwm2的时基时钟,44E10000 + 664 |= 4,TRM pg1449
//写入[0x44E10000 + 0x664]= 0;//启用所有 pwm2 tbclks
WRITE_PWM_regs[CONTINL_PWMSS_CTRL]|=~PWMSS_CTRL_PWMSS2_TBCLKEN;


/********
* pwm2寄存器基地址为0x48304000
(二 /
printf ("pwm2时序设置\n");
//启用时钟,48304000 + 08 |= 100
write_pwm2_regs[PWMSS_clock_config]|= PWMSS_EHRPWM_CLK_EN_ACK;

//设置 TBPRD、x48304200 + 0x0A、TRM pg2376
write_pwm2_regs[SOC_ePWM_regs + EHRPWM_TBPRD]|= 0x04;//根据 TRM 示例图15-27、pg2308

//清除 TBPHS、TRM pg2374、复位为0、但应清除。
write_pwm2_regs[SOC_ePWM_regs + EHRPWM_TBPHS]= 0x0;

//清除 TBCNT,TRM pg2374,重置为0。
write_pwm2_regs[SOC_ePWM_regs + EHRPWM_TBCTR]|= 0x0;

//设置 TBCTL、TRM pg2370、[0x48304000 + 0x200 + 0]|= 0xCB2、CTRMODE=2、CLKDIV=3
write_per_regs[SOC_ePWM_regs + EHRPWM_TBCTL]|= 0x0CB2;// TRM ex 图15-27

//设置比较值 A 和 B,尽管不需要 B。TRM pg2380
write_pwm2_regs[SOC_ePWM_regs + EHRPWM_CMPA]|= 0x02;
write_pwm2_regs[SOC_ePWM_regs + EHRPWM_CMPB]|= 0x02;

//设置 CMPCTL,应复位为0。

//设置 AQCTLx 寄存器、TRM pg2382、CAU=2、CAD=1、CBU=2、 CBD = 1。
write_pwm2_regs[SOC_ePWM_regs + EHRPWM_AQCTLA]|= 0x0660;
write_pwm2_regs[SOC_ePWM_regs + EHRPWM_AQCTLB]|= 0x0660;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    背光控制在 Linux SDK 中提供。 有关详细信息、请参阅 processors.wiki.ti.com/.../Linux_Core_PWM_User's_Guide。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    看起来不在我的内核中。 甚至重新执行 menuconfig 并验证是否已检查和重建 DiVinci EHRPWM。 当我尝试 sysfs 命令时、没有文件:

    root@mitysom-335x:~# echo 1 >/sys/class/pwm/ehrpwm.2:0/request
    -sh:/sys/class/pwm/ehrpwm.2:0/request:no such file or directory
    root@mitysom-335x:~#

    当我正确设置寄存器和序列后、应该可以轻松地在该引脚上启动 PWM。

    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是什么内核版本? 您从哪里下载了它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    内核 v3.2、由 SOM 供应商提供(3.2.0-00366-ga976da6-mad脏)。

    SS

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TI 不再支持这一功能。 但是、下面是 v3.2的 wiki 链接: processors.wiki.ti.com/.../AM335x_PWM_Driver's_Guide