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.

[参考译文] RTOS/AM5708:eCAP 在 DSP 中作为 APWM 时出现问题

Guru**** 2540720 points
Other Parts Discussed in Thread: AM5708, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/746597/rtos-am5708-problem-with-ecap-as-apwm-in-dsp

器件型号:AM5708
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 工作正常。

谢谢、此致、

劳拉

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

    vin2a 部分与此问题无关。 您需要找到 ECAP 部分并确保其已禁用。 如果不起作用,您可能需要将其全部删除。

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

    我同意 Brad 的说法。 这听起来像是 RT Linux 尝试使用 eCAP PWM 输出来控制 LCD 背光。

    Processor SDK 在 AM571x IDK + LCD EVM 的'arch/arm/boot/dts/am57xx-idk-lcd-osd101t2045.dtsi'文件中提供了相关示例。 在该文件中、您将看到 LCD 使用如下节点为背光应用配置 PWM:
    LCD_BL:背光{
    兼容="PWM 背光";
    PWM =<&ecap0 50000 1>;
    亮度等级=<0 51 53 56 62 75 101 152 255>;
    default-brightse-level =<8>;
    };

    据我所知、在 TI 的 Linux 发行版中、eCAP 外设的唯一用法是为背光创建 PWM。 因此、如果您的应用没有需要控制背光的 LCD、则可以从器件树中删除节点。 但是、如果您确实需要 eCAP 来控制背光、那么您将需要使用不同的 eCAP 实例来实现 DSP RTOS。

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

    您好!

    首先、感谢您的帮助。

    ECAP 在 DTS 中显示如下:

    高斯@0{
        兼容="ti、am5728-pruss";
        reg =<0x0 0x80000>;
        中断=<0x0 0xba 0x4 0x0 0xbb 0x4 0x0 0xbc 0x4 0x0 0xbd 0x4 0x0 0xbe 0x4 0x0 0xbf 0x4 0xc0 0x4 0x0 0xc1 0x4>;
        interrupt-names ="host2"、"host3"、"host4"、"host5"、"host6"、 "host7"、"host8"、"host9";
        #address-cells =<0x1>;
        大小单元格=<0x1>;

        范围;
        STATUS ="禁用";
        相位=<0x1ce>;

        存储器@0{
         REG =<0x0 0x2000 0x2000 0x2000 0x2000 0x10000 0x8000 0x2e000 0x31c 0x30000 0x60>;
         reg-names ="dram0"、"dram1"、"shrdram2"、"IEP"、"ecap"
         相位=<0x1cf>;
        };

        (笑声)

     高斯@0{
        兼容="ti、am5728-pruss";
        reg =<0x0 0x80000>;
        中断=<0x0 0xba 0x4 0x0 0xbb 0x4 0x0 0xbc 0x4 0x0 0xbd 0x4 0x0 0xbe 0x4 0x0 0xbf 0x4 0xc0 0x4 0x0 0xc1 0x4>;
        interrupt-names ="host2"、"host3"、"host4"、"host5"、"host6"、 "host7"、"host8"、"host9";
        #address-cells =<0x1>;
        大小单元格=<0x1>;
        范围;
        STATUS ="禁用";
        相位=<0x1ce>;

        存储器@0{
         REG =<0x0 0x2000 0x2000 0x2000 0x2000 0x10000 0x8000 0x2e000 0x31c 0x30000 0x60>;
         reg-names ="dram0"、"dram1"、"shrdram2"、"IEP"、"ecap"
         相位=<0x1cf>;
        };

        CFG@26000{
         兼容="SYSCON";
         REG =<0x26000 0x2000>;
         phandle =<0x1d0>;
        };

        MII_RT@32000{
         兼容="SYSCON";
         REG =<0x32000 0x58>;
         phandle =<0x1d1>;

    (笑声)

    epwmss@4843e000{
       compatible ="ti、dra746-pwms"、"ti、am33xx-pwms";
       REG =<0x4843e000 0x30>;
       ti、hwmonds ="epwmss0";
       #address-cells =<0x1>;
       大小单元格=<0x1>;
       STATUS ="禁用";
       范围;
       相位=<0x201>;

       PWM@4843e200{
        兼容="ti、dra746-ehrpwm"、"ti、am3352-ehrpwm";
        #PWM-Cells =<0x3>;
        REG =<0x4843e200 0x80>;
        时钟=<0x121 0xA>;
        时钟名称="TBCLK"、"fck";
        STATUS ="禁用";
        相位=<0x202>;
       };

       ECAP@4843e100{
        兼容="ti、dra746-ECAP"、"ti、am3352-ECAP";
        #PWM-Cells =<0x3>;
        REG =<0x4843e100 0x80>;
        时钟=<0xA>;
        时钟名称="Fck";
        STATUS ="禁用";
        相位=<0x203>;
       };
      };

    epwmss@48440000{
       compatible ="ti、dra746-pwms"、"ti、am33xx-pwms";
       REG =<0x48440000 0x30>;
       ti、hwmonds ="epwmss1";
       #address-cells =<0x1>;
       大小单元格=<0x1>;
       STATUS ="禁用";
       范围;
       相位=<0x204>;

       PWM@48440200{
        兼容="ti、dra746-ehrpwm"、"ti、am3352-ehrpwm";
        #PWM-Cells =<0x3>;
        reg =<0x48440200 0x80>;
        时钟=<0x122 0xA>;
        时钟名称="TBCLK"、"fck";
        STATUS ="禁用";
        相位=<0x205>;
       };

       ECAP@48440100{
        兼容="ti、dra746-ECAP"、"ti、am3352-ECAP";
        #PWM-Cells =<0x3>;
        reg =<0x48440100 0x80>;
        时钟=<0xA>;
        时钟名称="Fck";
        STATUS ="禁用";
        相位=<0x206>;
       };
      };

      epwmss@48442000{
       compatible ="ti、dra746-pwms"、"ti、am33xx-pwms";
       REG =<0x48442000 0x30>;
       ti、hwmonds ="epwmss2";
       #address-cells =<0x1>;
       大小单元格=<0x1>;
       STATUS ="禁用";
       范围;
       相位=<0x207>;

       PWM@48442200{
        兼容="ti、dra746-ehrpwm"、"ti、am3352-ehrpwm";
        #PWM-Cells =<0x3>;
        REG =<0x48442200 0x80>;
        时钟=<0x123 0xA>;
        时钟名称="TBCLK"、"fck";
        STATUS ="禁用";
        相位=<0x208>;
       };

       ECAP@48442100{
        兼容="ti、dra746-ECAP"、"ti、am3352-ECAP";
        #PWM-Cells =<0x3>;
        REG =<0x48442100 0x80>;
        时钟=<0xA>;
        时钟名称="Fck";
        STATUS ="禁用";
        相位=<0x209>;
       };
      };

    ecap0 ="/ocp/epwmss@4843e000/ECAP@4843e100";

    eCAP1 ="/ocp/epwmss@48440000/ECAP@48440100";

    ecap2 ="/ocp/epwmss@48442000/ECAP@48442100";

    ECAP 显示为已禁用、但 PRU 是否可以使用 它?

    谢谢、此致、

    劳拉

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

    [引用用户="Laura Valverde"]    ECAP@4843e100{
        兼容="ti、dra746-ECAP"、"ti、am3352-ECAP";
        #PWM-Cells =<0x3>;
        REG =<0x4843e100 0x80>;
        时钟=<0xA>;
        时钟名称="Fck";
        STATUS ="禁用";
        相位=<0x203>;
       };
      };[/报价]

    [引用用户="Laura Valverde"] ecap0 ="/ocp/epwmss@4843e000/ECAP@4843e100";[/quot]

    这些条目是与 eCAP1_IN_PWM1_OUT 信号(AM5708的引脚 A7)相关的条目。  下一步是了解如何从 DTS 中完全删除此节点。  执行此操作的正确方法是将以下内容添加到您的主 DTS 文件中:

    /delete-node/ecap0

    我正在使用关联的标签名称(ecap0)删除关联的属性。  原始定义来自 dra7.dtsi、但这是 TI 拥有和维护的一个文件、许多平台都使用了该文件。  因此、您不想直接在 dra7.dtsi 中这样做。  而是在主 DTS 文件中使用此"删除节点"语法。  以下是一个参考资料、以防有疑问:

    https://elinux.org/Device_Tree_Source_Undocumented#Deleting_nodes_and_properties

    我认为这应该达到目的。  请检查您的侧边。  请在解编译的设备树中验证是否确实删除了该设备。

    此致、
    Brad

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

    Brad、您好!

    我们尝试使用 delete-node 擦除节点、但在尝试生成 DTB 时会出现语法错误。 我们是否必须复制结构 OCP、epwmss 才能将其删除?

    作为临时测试、我们从 DTB 生成了一个 DTS。 在其 DTS 中,我们已擦除了 ECAP (直接擦除,而不是使用删除节点),并生成了另一个 DTB。

    虽然 DTS 中不存在 ECAP、但在 Linux 运行时 ECAP 中的 APWM 不工作。 我们可能还需要配置其他一些寄存器。 如果是、为什么在 Linux 未运行时它可以正常工作?

    感谢您的支持。

    此致、

    劳拉

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

    您的 DSP 代码是如何以及何时加载的? 它是由 Linux 加载、还是通过 JTAG 加载? 如果是、何时? 例如、加载代码时 Linux 是否已完全启动?

    此外、您能否告诉我在不同时间点 CM_L4PER2_PWMSS1_CLKCTRL (地址0x4A00 97C4)的值:

    1. Linux 启动后。
    2.当您启动 DSP 程序时,即 DSP 是否能成功写入该寄存器?
    3."稍后"、即 Linux 是否在某种程度上改变了这一点?

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

    另一个想到的想法是、是否可能发生任何类型的时钟转换。 您可能需要查看 CM_L4PER_CLKSTCTRL (0x4A00 9700)。 PWM 子系统(包括 eCAP)由 L3_GICLK 计时(即该寄存器的位8显示其状态)。 您也可以查看位1:0 CLKTRCTRL。 也许可以尝试将这些位设置为2 SW_WKUP、以确保时钟保持开启状态。 如果 CTKTRCTRL=2 SW_WKUP 关闭、它将开启时钟并保持开启状态。

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

    Brad、您好!

    Linux 正在加载 DSP。

    读取这些寄存器的结果为:

    在 Uboot 中:

    0x4A00 97C4 -- 0x00030000

    0x4A00 9700–0x01378903

    在 Linux 中(DSP 未运行):

    0x4A00 97C4 -- 0x00030000

    0x4A00 9700–0x00028503

    Linux + DSP 运行

    0x4A00 97C4 -- 0x00020002

    0x4A00 9700–0x00028503

    (在建议的更改之后(它仍然不起作用))

    0x4A00 97C4 -- 0x00020002

     0x4A00 9700–0x00028502

    UBoot (Linux 未运行+ DSP 正在运行)。  PWM 工作正常

    0x4A00 97C4 -- 0x00000002

    0x4a00 9700 -- 0x01F7FF02

    我删除了桁架二进制文件并更改了 DTB 以删除 ECAP 节点。

    谢谢、此致、

    劳拉

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

    PWM 现在工作。 问题是 CM_L4PER2_CLKSTCTRL。 CLKTRCTRL 位为1 (SW_SLEEP)。 对于 SW_WKUP、它可以正常工作。

    谢谢、此致、

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

    劳拉

    我刚刚检查了运行两个不同版本 Linux 的两个不同板、并且一直看到 CM_L4PER_CLKSTCTRL[1:0] CLKTRCTRL = 0x3 HW_AUTO。  您的电路板上的值为1、这一点有点可疑。  是否有人修改 了 arch/arm/mach-omap2/omap_hwmod_7xx_data.c 中的 Linux hwmod 数据?  我不确定为什么将其设置为 SW_SLEEP。  如果我们不了解如何首先将其设置为 SW_SLEEP、我担心它可能会在运行时随机设置回该设置。

    我们可能需要在 Linux 方面做更多的挖掘工作、以便找到合适的解决方案。  作为一种临时解决方案、您可以从 DSP 写入该值。

    Brad

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

    Brad、您好!

    我们已更改文件的部分、但与 L4PER2无关

     我们如何看待 Linux 中的价值? 这是什么器件?

    /* L4_per2 */
    静态结构 omap_hwmod dra7xx_l4_per2_hwmod ={
     .name  ="L4_per2"、
     .class  =&dra7xx_L4_hwmod_class、
     clkdm_name ="l4per2_clkdm"、
     .prcm ={
      .OMAP4 ={
       clkctrl_offs = DRA7XX_CM_L4PER2_L4_PER2_CLKCTRL_OFFSET、
       flags = HWMOD_OMAP4_NO_CONTEXT LOW_BIT、
      }、
     }、
    };

    HWMOD_OMAP4_NO_CONTEXT LOW_BIASE_BIT = 1.

    我附上该文件、以防它有用。

    非常感谢。

    此致、

    Laurae2e.ti.com/.../8322.omap_5F00_hwmod_5F00_7xx_5F00_data.c

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

    e2e.ti.com/.../omap_5F00_hwmod_5F00_7xx_5F00_data_5F00_c.txtHello、

    我昨天发了一篇帖子、但我认为它缺失了、所以我再次发送它。 arch/arm/mach-omap2/omap_hwmod_7xx_data.c 已按此方式修改。

    这些是更改:

    /*

    *'kbd'类

    *键盘控制器

    *

    静态结构 omap_hwmod_class_sysconfig dra7xx_kbd_sysc ={

    .rev_fs = 0x0000、

    .sysc_fs = 0x0010、

    .sysc_flags =(SYSC_has _EMUFREE | SYSC_has _sIDLEMODE |

     SYSC_WAS_SOFTRESET)、

    .idlemodes =(sidle_force | sidle_no | sidle_smart)、

    .sysc_fields =&omap_hwmod_sysc_type1、

    };

    静态结构 omap_hwmod_class dra7xx_kbd_hwmod_class ={

    .name ="kbd"、

    .sysc =&dra7xx_kbd_sysc、

    };

    /* kbd */

    静态结构 omap_hwmod dra7xx_kbd_hwmod ={

    .name ="kbd"、

    .class =&dra7xx_kbd_hwmod_class、

    clkdm_name ="wkupaON_clkdm"、

    main_clk ="sys_32k_clk"、

    .prcm ={

    .OMAP4 ={

    clkctrl_offs = DRA7XX_CM_WKUPAON_KBD_CLKCTRL_OFFSET、

    .context_offs = DRA7XX_RM_WKUPAON_KBD_context_offset、

    .modulemode = MODULEMODE_SWCTRL、

    }、

    }、

    };

    /* mu1 - dsp2 */

    静态结构 omap_hwmod dra7xx_mu1_dsp2_hwmod ={

    .name ="mu1_dsp2"、

    .class =&dra7xx_MMU_hwmod_class、

    clkdm_name ="dsp2_clkdm"、

    rst_lines = dra7xx_MMU_DSP_RESET、

    .rst_LINes_cnt = array_size (dra7xx_MMU_DSP_RESET)、

    main_clk ="DPLL_DSP_m2_clk"、

    .prcm ={

    .OMAP4 ={

    rstctrl_offs = DRA7XX_RM_DSP2_RSTCTRL_offset、

                flags = HWMOD_OMAP4_NO_CONTEXT LOW_BIT、

    }、

    }、

    };

    /* mu1 - dsp2 */

    静态结构 omap_hwmod dra7xx_mu1_dsp2_hwmod ={

    .name ="mu1_dsp2"、

    .class =&dra7xx_MMU_hwmod_class、

    clkdm_name ="dsp2_clkdm"、

    rst_lines = dra7xx_MMU_DSP_RESET、

    .rst_LINes_cnt = array_size (dra7xx_MMU_DSP_RESET)、

    main_clk ="DPLL_DSP_m2_clk"、

    .prcm ={

    .OMAP4 ={

    rstctrl_offs = DRA7XX_RM_DSP2_RSTCTRL_offset、

                flags = HWMOD_OMAP4_NO_CONTEXT LOW_BIT、

    }、

    }、

    };

    /* L4_wkup -> kbd */

    静态结构 omap_hwmod_opc_if dra7xx_l4_wkup_kbd ={

    .master =&dra7xx_L4_wkup_hwmod、

    .slave =&dra7xx_kbd_hwmod、

    .clk ="wkupaON_iclk_mux"、

    .user = OCP_USER_MPU | OCP_USER_SDMA、

    };

    静态结构 omap_hwmod_opc_if *dra7xx_hwmod_opc_ifs[]__initdata ={

    …μ A

    &dra7xx_ipu2__L3_main_1、

    &dra7xx_L4_wkup_kbd、

    &dra7xx_L4_cfg_mailbox1、..

    这里是否有任何东西导致 L4per2进入睡眠状态?

    未修改类本身。

    /* L4_per2 */

    静态结构 omap_hwmod dra7xx_l4_per2_hwmod ={

    .name ="L4_per2"、

    .class =&dra7xx_L4_hwmod_class、

    clkdm_name ="l4per2_clkdm"、

    .prcm ={

    .OMAP4 ={

    clkctrl_offs = DRA7XX_CM_L4PER2_L4_PER2_CLKCTRL_OFFSET、

    flags = HWMOD_OMAP4_NO_CONTEXT LOW_BIT、

    }、

    }、

    };

    HWMOD_OMAP4_NO_CONTEXT LOW_BIASE_BIT = 1.

    我们如何通过读取该文件来获取该寄存器的状态? 是否有任何有关这方面的德州文档或培训?

    我还发送随附的文件。

    谢谢、此致、

    劳拉

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

    很抱歉、上周美国假期造成延误。 我现在回来、再深入研究一下这个问题。 我想找一个对 hwmod 框架有更深入了解的人进行评论。

    如果您想在等待时尝试一个实验、我想知道是否恢复 OMAP-hwmod_7xx_data_c 返回其默认状态对 CM_L4PER_CLKSTCTRL[1:0] CLKTRCTRL 配置有任何影响。 我不确定问题是否与该文件或 DTS 中的内容有关、因此该实验可能有助于我们了解问题所在。

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

    我一直在与团队进一步讨论。 我有几个请求:

    请在不同的时间检查 CM_L4PER_CLKSTCTRL 的值、例如在 u-boot 命令提示符、DSP 运行前的 Linux 命令提示符、DSP 运行后的 Linux 命令提示符等 目标是查看此值的变化位置/时间。

    2.是否还可以附加 clockdomains7xx_data.c 文件?

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

    Brad、您好!

    问题是 CM_L4PER2_CLKSTCTRL (0x4A00 98FC)

    该寄存器的值为:

    在 Uboot:

    4a0098fc:00011000

    4a009700:01378903

    在 Linux (DSP 未运行)

    0x4A0098FC:0x00000001

    0x4a009700:0x00028503

    在 Linux (DSP 运行)

    0x4A0098FC:0x00000001

    0x4a009700:0x00028503

    因此、当 Linux 运行时(与 DSP 无关)、问题是0x4A0098FC。

    我将随附的文件发送给您。

    再次感谢您的支持!

    劳拉

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

    劳拉

    首先、感谢寄存器上的注释。  我应该是说 CM_L4PER2_CLKSTCTRL、而不是 CM_L4PER_CLKSTCTRL

    我与 Linux 团队进行了交谈。  感兴趣的代码是 来自 arch/arm/mach-omap2/clockdomains7xx_data.c 的这个结构:

    静态结构时钟域 l4per2_7xx_clkdm ={
    .name="l4per2_clkdm"、
    .pwrdm={.name ="l4per_pwrdm"}、
    .prcm_partition= DRA7XX_CM_CORE_PARTITION、
    .cm_DEP= PER7XX_CM_CORE_LOCK_RE_L4xx
    
    、RATE_CL4xx = DRA7XX_LD_IN_R_BRE_CLUST_CLUST_L4xx
    .wkdep_SRCS= l4per2_wkup_sleep_deps、
    .slepdep_SRCS= l4per2_wkup_sleep_deps、
    .flags= CLKDM_CAN_SWSup、
    };
    

    当前、此域配置为软件监控(SWSup)。  这意味着、如果未使用任何相关模块、Linux 将使该域进入睡眠状态。  在您的情况下、我们希望 Linux 仅保留此域。  解决方法是删除".flags"行。  在这种情况下、Linux 应单独保留此域、并且应始终保持可用。

    请使用该更改重新构建内核、然后从 Linux 重新检查 CM_L4PER2_CLKSTCTRL (0x4A00 98FC)、以验证其是否具有预期值。

    此致、
    Brad

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

    再次感谢 Brad 的解释! 我现在已经看到了您的答案。 我们将对其进行更改并检查结果。

    此致、

    劳拉