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.

[参考译文] TMS320F28P650DH:CPU2 上的 CLB HLC

Guru**** 2805425 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1607618/tms320f28p650dh-clb-hlc-on-cpu2

器件型号: TMS320F28P650DH
主题: SysConfig 中讨论的其他器件

尊敬的专家:

我能够成功使用 CPU1 上的 CLB 和 HLC。 它在做它应该做的事情。
我的应用程序需要将 CLB 移至我所做的 CPU2、并且 CLB 正在根据我所能看到的内容运行。

为此、我需要通过在 CPU1 上添加以下文件夹代码将所有权移至 CPU2:

    SysCtl_selectCPUForPeripheralInstance( SYSCTL_CPUSEL_CLB1, SYSCTL_CPUSEL_CPU2 );
    SysCtl_setPeripheralAccessControl(SYSCTL_ACCESS_CLB1, SYSCTL_ACCESS_CPUX, SYSCTL_ACCESS_FULL);

这样就可以正常工作、我可以在此找到允许 CLB1 在 CPU2 上工作的资源。

我向大家提问的是、HLC 没有像我在 CPU1 上设置 CLB IRQ 时那样在 CPU2 上触发 CLB IRQ。 我在 CPU2 上启用了中断、因为 IPC 正在切换 LED。

我还在 CPU2 上测试了 CLB 的 IRQ 路由、这也有效。 我在 CPU2 上添加了以下行、然后按照我的预期触发 ISR:

HWREGH(PIECTRL_BASE + 0x0B) |=(1<<4);

我将事件导出到 LUT0、也可以在我的示波器上看到、因此 CLB1 在 CPU2 上工作非常高兴。

您能告诉我、为了使 HLC 也能在 CPU2 上工作、我缺少了什么步骤吗?

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

    你好 Wynand、
    我刚刚被分配了这个主题,我将在几天内返回给你。
    谢谢、
    Praneeth

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

    您好 Praneeth、

    谢谢你。
    我非常希望您能帮助我解决这个问题、因为该项目已经处于高级状态。

    此致

    Wynand

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

    你好 Wynand、
    我正在研究这个。 同时、我能否知道您为什么添加这一行?   

    HWREGH(PIECTRL_BASE + 0x0B) |=(1<<4);

    谢谢
    Praneeth



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

    您好 Praneeth、

    此线路已添加为 CPU2 上 IRQ 路由的测试。

    我想看看来自 HLC 的中断请求是否会按原样触发我的 ISR。 此行证明了它触发了正确的 ISR、中断在 CPU2 上工作。
    我猜此时的问题出在 HLC 和 PIE 之间、或者可能是 CLB 和 HLC 之间、但我怀疑最后一个问题。

    感谢您的帮助、我非常感谢您的帮助。

    Wynand

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

    你好 Wynand、
    我测试了一个简单的代码、其中 HLC 会生成中断。 CLB 分配给 CPU2。 它是有效的。  

    删除这一行。       HWREGH(PIECTRL_BASE + 0x0B) |=(1<<4);

    请在“Debug"视“视图中查看 PIECTRL 寄存器、检查在运行代码时是否设置了 PIEIFR5 中的中断 5。 如果设置了该位、则在 PIEIER5 中检查同一中断。  

    谢谢
    Praneeth

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

    您好 Praneeth、

    感谢您的确认。 我看不到 PIEIER5 中设置的标志。
    我说过、当我添加您要我删除的行时、ISR 会按我的预期触发。

    能否请与我共享 CPU1 中的配置代码、以便查看缺少的内容。

    我甚至在 LAUNCHXL 板上尝试了此设计、并体验了与在电路板上相同的行为。 不同的控制器当然是 659 和 650。

    您正在使用 SysConfig、或者是否进行手动设置?

    我还测试了一个非常基本的代码。

    此致

    Wynand

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

    只是为了增加清晰度。
    我能够在 CPU1 上运行 HLC 没有任何问题、只有在将其分配给 CPU2 时才会遇到问题。 可能是所有权或访问控制。

    以下是 CPU1 上主代码的一部分:

    void main(void)
    {
        Device_init();
    
        Device_initGPIO();
    
        SysCtl_allocateFlashBank(SYSCTL_FLASH_BANK1, SYSCTL_CPUSEL_CPU2);
        SysCtl_allocateFlashBank(SYSCTL_FLASH_BANK4, SYSCTL_CPUSEL_CPU2);
        SysCtl_allocateDxRAM(SYSCTL_D2RAM, SYSCTL_CPUSEL_CPU2);
        SysCtl_allocateDxRAM(SYSCTL_D3RAM, SYSCTL_CPUSEL_CPU2);
        MemCfg_setGSRAMControllerSel(MEMCFG_SECT_GS4, MEMCFG_GSRAMCONTROLLER_CPU2);
    
        Device_bootCPU2(BOOTMODE_BOOT_TO_FLASH_BANK1_SECTOR0);
    
        Interrupt_initModule();
        Interrupt_initVectorTable();
    
        SysCtl_selectCPUForPeripheralInstance( SYSCTL_CPUSEL_CLB1, SYSCTL_CPUSEL_CPU2 );
        SysCtl_setPeripheralAccessControl(SYSCTL_ACCESS_CLB1, SYSCTL_ACCESS_CPUX, SYSCTL_ACCESS_FULL);
        SysCtl_selectCPUForPeripheralInstance( SYSCTL_CPUSEL_CLB2, SYSCTL_CPUSEL_CPU2 );
        SysCtl_setPeripheralAccessControl(SYSCTL_ACCESS_CLB2, SYSCTL_ACCESS_CPUX, SYSCTL_ACCESS_FULL);
        SysCtl_selectCPUForPeripheralInstance( SYSCTL_CPUSEL_CLB3, SYSCTL_CPUSEL_CPU2 );
        SysCtl_setPeripheralAccessControl(SYSCTL_ACCESS_CLB3, SYSCTL_ACCESS_CPUX, SYSCTL_ACCESS_FULL);
    
        Board_init();
     

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

    Wynand、
    我使用了 SysConfig。  
    我为 CLB1 选择了 CPU2

    已检查是否提供了完全访问权限。

    我注意到运行代码时未启用 PIEIER 和 IER 寄存器。 然后我在末尾添加了 interrupt_init ();函数,如下所示,然后是中断工作器。

    除了这一点,我没有做任何其他的。  
    谢谢
    Praneeth

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

    您好 Praneeth、

    感谢您的答复。
    老实说、我没有在 SysConfig 中使用“器件支持“。
    我将在新的几分钟内试一下、看看它是否能解决我的问题。
    感谢您的支持。

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

    当然、如果您仍然遇到任何问题、请告诉我

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

    谢谢 Praneeth。
    明天我应该知道这是否正常工作。

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

    好的、谢谢。 如果工作正常、请进行更新。  

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

    您好 Praneeth、

    再次感谢您的帮助。 现在可以正常使用、我认为修复方法是在启用器件支持的情况下完全使用 SysConfig 工具。 如果从 empty_dual_sysconfig 工程开始并从中进行编译、您将无法正确使用 CPU2、因为它不包含 CPU2 工程所需的所有设置。

    我现在已经从头开始设计使用 SysConfig 配置的工程、到目前为止它可以按我想要的方式正常运行。 因此、我对同事的建议是在启动新项目时从头开始、而不是从提供的示例代码开始。

    此致

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

    很高兴听到它在工作
    谢谢
    Praneeth