Thread 中讨论的其他器件: SysConfig
工具/软件:TI-RTOS
您好!
我们希望 在 AM5708中将 ECAP1配置为来自 DSP 的 PWM、但当 RT-Linux 在 A15上运行时、它不起作用。
我们看到一个方波、但频率和占空比发生了变化、就好像有东西在写入/更改系统时钟一样。
如果我们检查寄存器的值、则周期和比较值是可以的。 但是、尽管 PWMSS1_CLKCTRL 最初为0、然后初始化校正、之后等于 0x20000。
该方案如下:
/*启用 PWM 模块的时钟*/
静态空 pwmClockConfig (空)
{
/*为 PWMSS1启用 PRCM */
HW_WR_REG32 (SOC_L4PER_CM_CORE_BASE + CM_L4PER2_PWMSS1_CLKCTRL、0x2);
//TODO:发生故障时返回的计时器
while ((HW_RD_REG32 (SOC_L4PER_CM_CORE_BASE +)
CM_L4PER2_PWMSS1_CLKCTRL)&(0x00030000)!= 0x0);
PWMSS1模块的/*时基时钟*/
HW_WR_FIELD32 (SOC_CTRL_MODULE_CORE_CORE_REGISTER_BASE +
CTRL_CORE_CONTRAL_IO_2、
CTRL_CORE_CONTRAL_IO_2_PWMSS1_TBCLKEN、1);
}
/*为 PWM 模块配置引脚多路复用器*/
静态空 pwmPinmuxConfig (空)
{
uint32_t regVal;
regVal = HW_RD_REG32 (CTRL_CORE_PAD_VIN2A_D2_ADDR);
regVal =((regVal &~0x0F)| 0x0A);
HW_WR_REG32 (CTRL_CORE_PAD_VIN2A_D2_ADDR、regVal);
}
int APWM_Init (void)
{
pwmClockConfig();
pwmPinmuxConfig();
ECAP 操作模式选择(APWM_BASE_ADDRESS、ECAP_APWM_MODE);
ECAPCounterConfig (APWM_BASE_ADDRESS、0);
ECAPWMPolarityConfig (APWM_BASE_ADDRESS、ECAP_APWM_ACTIVE_HIGH);
ECAPWMCaptureConfig (APWM_BASE_ADDRESS、COMPARE_APWM、PERIOD_APWM);
ECAPCounterControl (APWM_BASE_ADDRESS、ECAP_COUNTER_FREE_Running);
}
在 DTS VIN2A 中为:
vin2a ="/ocp/vip@0x48970000/端口@1";
VIP@0x48970000{
兼容="ti、vip1";
REG =<0x48970000 0x114 0x48975500 0xd8 0x48975700 0x18 0x48975800 0x80 0x48975a00 0xd8 0x48975c00 0x18 0x48975d00 0x80 0x4897d000 0x400>;
reg-names ="vIP"、"parser0"、"csc0"、"sc0"、"parser1"、 "csc1"、"sc1"、"vpdma";
ti、hwmods ="vip1";
中断=<0x0 0x15f 0x4 0x0 0x188 0x4>;
SYSCON-POL =<0x8 0x534>;
#address-cells =<0x1>;
大小单元格=<0x0>;
STATUS ="禁用";
相位=<0x210>;
端口@0{
#address-cells =<0x1>;
大小单元格=<0x0>;
reg =<0x0>;
STATUS ="禁用";
相位=<0x211>;
};
端口@1{
#address-cells =<0x1>;
大小单元格=<0x0>;
reg =<0x1>;
STATUS ="禁用";
相位=<0xCF>;
端点@0{
从模式;
远程端点=<0x124>;
};
这是否意味着它被禁用、不应干扰 DSP 中的 APWM? 问题出在哪呢?
当 RT Linux 不在 A15上时、APWM 工作正常。
谢谢、此致、
劳拉