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.

[参考译文] LAUNCHXL-TMS57004:将 HalCoGen 代码与 FreeRTOS 一起使用,HET PWM 不启动...

Guru**** 2747405 points

Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/997533/launchxl-tms57004-using-halcogen-gen-code-with-freertos-het-pwm-not-starting

器件型号:LAUNCHXL-TMS57004
主题中讨论的其他器件:HALCOGEN

我花了一些时间尝试弄清为什么、 除非我设置任务的"Privilee"位、否则我的 HET 的 PWM 将不起作用。  使用 HalCoGen 为带 FreeRTOS 的 LS043xx 生成的所有'scock'代码、并将'dbrive'/ halt init 放入任务中。  

奇怪的是:我可以执行初始化调用,如- adcInit()、hetInit()-而不设置任务 MPU 特权位,并且,这些外设看起来是初始化的。 初始化的 I 意味着:ADC 采样工作,例如使用 RTI 0触发器,并且我在正确的时间和值上获得与输入电压匹配的 ADC 中断。  HET 会初始化、它似乎_、至少在我从外部看到的情况下、HET 输出引脚会达到初始化时设置的默认输出(例如、设置 DOUT 1)。

但是, 当涉及到来自 HET 的 PWM 时,除非在调度程序启动之前从特权任务或从 main 调用了 hetInit(),否则这不会启动。  因此,无论您是在 HET 初始化的 HalCoGen 中默认启用 PWM,还是调用 pwmStart()。 稍后 、这不起作用、PWM 不会启动。  此外、尝试触发与 RTI 触发器一起工作但来自 HET Pinx 的同一 ADC 也不会触发。  换言之、我的 ADC 具有从 RTI 触发的组、但用于例如从 HET1_8触发的组不会与该 HET 的任何输入相同。

同样奇怪的是、它都"明显"失败、没有任何原因、也没有崩溃或异常中断、我认为、如果 MPU 正在工作并且我尝试初始化特权段、我应该会得到这种情况。 但没有什么。

所以我在概念上不理解它:为什么这样, hetInit()会安静地阻止 PWM 在以后工作,除非它是从特权任务中调用的。  (即优先级的特权位)。  

我会期待 MPU (如果配置了相应的)。 在 初始化时、或者在尝试启动 PWM 时访问 HET RAM 寄存器时、当我触摸 HET 寄存器时、立即触发中止。 但这种情况下,所有的一切似乎都是无提示的,但 PWM 将不起作用。

此上是否有任何指示灯?  从非特权任务调用时、所有 HalCoGen 的自动生成驱动程序/所有类型是否都保持静默? 为什么我有这样的 HET issue……  

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

    大多数外设都有只能在 CPU 处于特权模式时才能写入的寄存器。 参考手册中明确说明了这些内容。 特定的位字段被指定为"R/WP"类型、这意味着该位字段可以在任何 CPU 模式下读取、并且只能在特权 CPU 模式(任何模式、但用户模式)下写入。  这个检查在外设内部完成、并且定义的响应是、如果在用户模式下由 CPU 执行写入访问、则将忽略写入访问。

    您可以根据外设选择配置 PCR 寄存器、为特定(或全部)外设中的所有寄存器启用特权模式访问限制。 在这种情况下、如果在用户模式下尝试对选择外设进行写入、PCR 本身将会发出错误响应。

    希望这对您有所帮助。

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

    您好、 

    部分是肯定的。  但是、正如我在上面写的那样、对于某些 HalCoGen 驱动程序(例如我的示例中的 ADC)、似乎不起作用-即外设 W 访问不被忽略、然而对于 HET、只有_部分_(正如我在 OP 中解释的那样)被忽略(例如、HET 被部分初始化、正如我看到的那样)。

    我猜、HalCoGen 自动编码在对受保护的存储器进行分区时可能不一致、或者 我需要查看在 HalCoGen 中默认情况下如何配置。

    感谢您的回答。

    编辑:不确定、因为例如 、我可以在特权任务中初始化 HET、然后从 非特权任务中启动 PWM -执行 W 访问-。 这应该不起作用,我理解是...?  除非 NHET1存储器(在我的情况下) 不被视为 特权访问...

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

    并非所有控制寄存器都有这种限制、只能在特权模式下写入。 例如、在 ADC 外设中、唯一具有此限制的寄存器是 ADC 复位控制寄存器和 ADC 奇偶校验控制寄存器。 默认情况下、ADC 模块不会复位、因此如果您不为 ADC RAM 启用奇偶校验、那么配置 ADC 不需要 CPU 处于特权模式。

    同样、您可以检查 HET、哪些寄存器需要特权模式写访问。