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.

[参考译文] AM335x-TMW-IEC61850-demo:在 AM335x 芯片上设置斩波器寄存器(eHRpwm 的一部分)

Guru**** 2893300 points

Other Parts Discussed in Thread: AM3358, AM3359

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1630476/am335x-tmw-iec61850-demo-setting-chopper-register-part-of-ehrpwm-on-am335x-chip

器件型号: am335x-TMW-IEC61850-demo
《Thread 中讨论的其他器件: AM3358AM3359》

大家好、我将在使用 AM3359 和 AM3358 芯片的 Beagle bone black beagle 上对 EHRPWM 进行编程。

大多数 PWM 寄存器都可以正常编程、但尝试通过每组 ePWM 寄存器内的 PCCTL 对斩波器进行编程、我无法写入任何变量或启用斩波。

我习惯了这是一个订购问题、只能在芯片的其余部分启用时对 PCCTL 进行编程。 现在、我需要启用 PWM,甚至可以尝试对寄存器进行写入,但尝试几乎所有顺序 — 我没有设法将 PCCTL 设置为零以外的任何值。

我仔细阅读了 TRM (spruh73q.pdf)、但并未提及对寄存器进行编程所需的 PWM 状态。

“那我呢?

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

    您好:
    感谢您的查询。 有关专家因** TI 印度**假期而离职。
    请预计响应会延迟。 感谢您的耐心和理解。

    此致、
    TI E2E 支持团队
    ——
    *这是一个自动通知。*

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

    你好 — 你有机会看看这个吗?

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

    TA、感谢您的讲解。 我现在正在旅行、回家时会尝试一下。

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

    现在在家进行测试:

    PM_PER_pwrstctrl = 0xee0000eb
    PWMSS0->CLKCONFIG&=~(1<<8);//时钟禁用 ePWM
    PWMSS1->CLKCONFIG&=~μ s (1<<8);//时钟禁用 ePWM
    EPWM0->PCCTL=CHP1_8D<<<8|// 1/8 斩波
    CHP_DIV2<<5|//将 PWM 时钟除以 2
    CHP_PSPW16<<1|//第一个脉冲的长度= 16
    CHP_ENABLE;//和斩波器已启用
    fprintf (stdout、“PCCTL (0)=\t0x%08x\n“、EPWM0->PCCTL);
    EPWM1->PCCTL=CHP1_8<<8|// 1/8 斩波
    CHP_DIV2<<5|//将 PWM 时钟除以 2
    CHP_PSPW16<<1|//第一个脉冲的长度= 16
    CHP_ENABLE;//和斩波器已启用
    fprintf (stdout、“PCCTL (1)=\t0x%08x\n“、EPWM1->PCCTL);

    结果是写入 EPWM0->PCCTL 可能会导致总线错误、因此即使通过 pm_per_pwrstctrl  = 0xee0000eb、该寄存器也不是可写的、这应该将所有外设存储器设置为可写。  

    猜我错过了什么? 有什么想法吗?

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

    啊、误读了你的信息。 它是控制模块中需要禁用的 tbclken 位。 因为这我似乎不能改变,它锁定到 7。 所以其他的东西一定是锁定它…

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

    啊是 CTLMOD->pwmss_ctrl 是关键步骤。 如果我在 Linux 内核中启用 PWM、则将其设置为 7、无法更改它。 另一方面、如果我不在 Linux 内核中启用 PWM、则将 VALE 设置为 0、我无法更改它。 我会检查 Linux 源代码...

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

    TI 是否对此有任何想法、例如需要什么来写入 CLTMOD->pwmss_ctrl 寄存器?

    我们确认的是、主线 Linux 内核使用 TI 员工编写的模块、可以更改上述寄存器。 但是、无论是在以 root 身份运行的 Linux 环境中、还是在 PRU 内核上运行的独立代码、都不能写入寄存器、因为它显然是出于某种原因被锁定的。

    已对 TRM 进行 了大量详细扫描、无法看到锁定此寄存器的是什么。

    唉、如果无法写入该寄存器、则无法写入 eHRpwm 中的斩波器、因此无法正常工作。

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

    我仍然没有做到这一点。 具体来说:

    • PRCM: L4LS_CLKCTRL:0x00004102  
             EPWMSS_CLKCTRL 0=0x00000002 1=0x00000002 2=0x00000002
    • CTLMOD->pwmss_ctrl 无法设置此寄存器

    因此、PRCM 已启用、但无法更改 TBCCLKEN

    因此,需要执行另一个步骤 — 我在 TRM 中仍然找不到这一点。

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

    一些建议

    //如果使用/dev/mem、请确保映射正确:
    INT FD = OPEN(“INT“/dev/mem O_RDWR | O_SYNC );
    void *pwmss0_base = mmap(NULL 0x1000 PROT_READ|PROT_WRITE
    MAP_SHARED FD、 0x48300000);
    if (pwmss0_base == mAP_FAILED ){
    perror(“mmap failed “)//这将导致总线错误
    }

    #如果加载了内核 PWM 驱动程序,则它拥有硬件
    lsmod | grep pwm
    Cat /sys/class/pwm/pwmchip */ export #内核可能具有独占访问权限
    潜在原因: AM335x 上的存储器管理单元 (MMU) 尚未配置为允许访问 PWMSS 外设存储器区域。 即使硬件经过计时并正常运行、MMU 也会阻止 CPU 到达这些地址。
    //需要 MMU 映射的 PWMSS 外设地址范围:
    // PWMSS0:0x48300000 - 0x48300FFF
    // PWMSS1:0x48302000 - 0x48302FFF
    // PWMSS2:0x48304000 - 0x48304FFF
    //每一个都需要映射为:
    //-设备存储器(不可缓存)
    //-读/写权限
    //-特权和用户访问权限(如果从用户空间运行)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     L4_WKUP 配置 地址/保护 (AP) 是否与 CM/PWM 寄存器的保护相关? 它没有在 TRM 中描述...