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.
工具/软件:Code Composer Studio
你(们)好
我通过 HAL 生成了 PWM 代码、但我无法理解这两行代码的含义
hetRAM->指令[(PWM << 1U)+ 41U].Control =((hetRAM->指令[(PWM << 1U)+ 41U].Control)&(~(UINT32)(0x00000018U)))|(操作<< 3U);
hetRAM->指令[(PWM << 1U)+ 41U].Data =((pwmPeriod * pwmDuty)/100U)<< 7U)+ 128U;
请说明发生了什么情况以及如何使用值班操作员。
为什么 pwmDuty 必须左移7位、然后添加128位
在控制设置中、为什么操作向左移动3位、为什么向左移动18位、或者随操作一起移动
您好、Rajat、
例如、这些是 pwmSetDuty 函数中使用的指令。 HALCoGen 使用模板高端计时器(HET)程序、然后根据 PWM 的用户配置和输入捕捉对其进行定制。
以 PWM1的一组指令为例。 这是一组4条指令:
CNT
PWCNT
DJZ
MOV64
(1<<1 + 41)处的指令是43号指令、这是与 PWM1相对应的 MOV64指令。 现在看看 TRM 中 MOV64指令的"控制"字段。
首先读取控制字段、然后与~(0x18)进行 AND 运算、然后与所选的"操作"进行 OR 运算。 这基本上是一个只更新上述控制字段中"操作"的读取-修改-写入操作。
现在考虑 MOV64指令的数据字段:
该数据字段由7位高分辨率数据字段和25位环路分辨率数据字段组成。 此 HALCoGen 示例不使用高分辨率功能、因此不使用"HR 数据"字段。 这就是更新后的数据值被7移位、然后添加128的偏移(2^7 = 128)的原因。
希望这对您有所帮助。
此致、Sunil