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.

[参考译文] TMS320C28346:C28 双核芯片的引脚分配

Guru**** 2903660 points

Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1638920/tms320c28346-pin-assignment-for-c28-dual-core-chip

部件号: TMS320C28346
Thread 中讨论的其他器件: SysConfigC2000WARE

您好、

我的 DSP 是 TMS320F28P650DK9。 双核场景和硬件引脚分配的示例非常有限。 事实上、我唯一知道的就是 LED。  

要求是:在多核(双核)环境中使用 SysConfig 时、每个 CPU 工程都有一个 SysConfig 文件。  根据我的研究、看起来这些 SysConfig 文件是内部连接的。  

在 SysConfig 实用程序(在 CCS IDE 中)中查看这些代码时、每个 代码都有 CPU1 和 CPU2 部分。 因此、在 4 个位置可以分配硬件引脚(例如 GPIO 或 SCI 端口)。

问题在于、如果我尝试在两个内核之间隔离硬件资源、并假设不会以交叉内核方式访问硬件外设(例如,CPU2 拥有但由 CPU1 切换的 GPIO)、 如何设置 SysConfig 文件?

一个直接的选择是 -

CPU1 工程

Syconfig - CPU1 区域分配 CPU1 将使用的引脚/外设(对 CPU2 部分不执行任何操作)

CPU2 工程

SysConfig - CPU2 区域分配 CPU2 将使用的引脚(CPU1 内无内容)。

 

然而、例如、它不适用于 SCI。 您能推荐正确的方法吗?

 

谢谢。

 

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

    尊敬的 Jwalant,  

    CPU2 无法分配自己的外设或 GPIO。 这一切都由 CPU1 完成。 CPU1 是系统管理器、 在启动时拥有所有外设、GPIO 等、CPU1 必须显式转移这些资源的所有权。  

    在 C2000ware/driverlib/f28p65x/examples/c28x_dual/flash_kernel/c28x_dual_ex1_c28x1 中可以找到一个要遵循的良好示例、并查看文件 flash_kernel_c28x_dual_ex1_sci_get_function_cpu1.c 此文件显示了一个示例、说明如何 在不使用 syscfg 的情况下将 SCIA 模块分配给 CPU2。  

    此外、为了便于将来参考、请确保在 E2E 的 TI 器件型号字段中添加正确的完整 GPN、因为这将有助于我们向正确的专家筛选查询。  

    此致、
    Aj Favela.  

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

    AJ、

    感谢您的回答。 我将查看该示例、看看它是否解决了我的问题。 顺便说一下、我们使用的是 syscfg。 那么、是否说我的 CPU2 工程的 syscfg 应为空并且所有设置/操作都在 CPU1 的 syscfg 内?

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

    我查看了具体的示例和 flash_kernel_c28x_dual_ex1_sci_get_function_cpu1.c 我可以看到、在链路 967 处、CPU1 将 SCIA 所有权分配给 CPU2。 但是、我发现这个示例不完整。 为了正确理解用法、我尝试查找 CPU1 如何以及何时调用此函数以及 CPU2 如何协调该函数。 但此示例中没有我找到的与 CPU2 相关的代码。 第二,当我搜索赋值 SciaCPU2 调用时,我什么都没有。

    我想我会将我的原始问题转述成多个问题:

    1. SYSCFG 编辑器中的 SCIA 部分不显示任何允许分配核心的设置。 此外、您建议的示例没有 syscfg。 那么、我们是否提到 syscfg 不能用于双核场景?

    2.理想情况下、我想看看 CPU1、CPU2 和 1+2 工程中包含 syscfg 或 devicelib 调用的清晰示例。 它应该能够清楚地展示如何使用 SCIA 模块和其他硬件外设。

    谢谢你。

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

    尊敬的 Jwalant,  

    我为混淆而道歉、

    可以将 syscfg 用于双核应用。 具体而言、如果转到 syscfg 的 CPU1 部分、选择“SYSCTL module“->“CPU select for Peripherals“、您可以 通过在下拉列表中设置正确的值将 SCIA 分配给 CPU2。  

    请注意、通过执行此操作、您需要调用 board_init ();以在 CPU1 的 main () 代码中初始化此传输。

    根据使用的 SCI 模块、您可以通过查看 DevCfgRegs 下的 CPUSEL5 寄存器并查看位 0 或位 1、再次检查是否发生了此传输。  

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

    这是 CPU1 的工程 SYSCONFIG 视图、因为您可以看到它没有为 SCI 分配的内核进行任何选择、即 CCS 20.04

    什么是我的缺失?

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

    尊敬的 Jwalant,  

    在 syscfg 中、请转到 SYSCTL 模块、如下所示。 在这里、您可以根据需要将外设分配给 CPU1 或 CPU2。 如前所述、请确保在您的主代码中调用 Board_init ();因为这是在 syscfg 中选择此项后将转移所有权的函数调用。  



    要仔细检查是否已发生此所有权转移、您可以查看 DEVCFGREG 中的 CPUSEL 寄存器并逐步执行代码。 调用 Board_init ();后,您应该会看到传输发生。   

    此致、
    Aj Favela.  

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

    AJ、

    感谢您的回复! 我确保在 CPU1 端、调用 Board_init () 后、 CPU1 处的 CPUSEL5 寄存器 会设置 SCI_A 位。 因此、所有权必须得到转让。 然而,它仍然不起作用。 以下是我的两个问题:

    1.我需要启用 RX 中断并使用 SYSCFG 注册一个处理程序、目前对于 CPU1 和 CPU2 工程、我要在这两个 工程的 syscfg - CPU1 部分中添加一个 SCI 条目。 但是、如何将 RX 中断处理程序寄存在 CPU2 端?

    2.除了处理程序之外,当我逐步执行在 SCI TX buf 寄存器中加载一个字节的代码时,我注意到在 CPU1 寄存器中 SCI 一个端口似乎被正确配置。 然而、观察 CPU2 寄存器、SCI A 似乎根本没有配置! 因此、当 CPU2 端例程尝试加载一个字节时、它不起作用! 什么是我的缺失? 下面是 CPU 2 寄存器视图的快照。

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

    尊敬的 Jwalant,

    1.您是否尝试在 syscfg 的 CPU2 侧配置中断和处理程序?



    2.您是否尝试在 CPU1 和 CPU2 上同时使用 SCIA?  

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

    我的目标是让 CPU2 专门使用 SCIA。  

    除此之外、为了确保我了解您对中断的评论、您建议的是  

    1.在 CPU1 侧设置 SCI 并通过 SYSCTL 将其分配给 CPU2(我的用例)

    2.启用 RX 中断(我的用例)、在 CPU1 端进行注册

    3.启用中断并在 CPU2 端注册相同的处理程序。

    我明白了吗? 谢谢你。

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

    尊敬的 Jwalant,

    感谢您的解释、我现在了解您的目标。  

    第 1 步是正确的、您确实需要通过 CPU1 将 SCI 模块的所有权转移到 CPU2。

    但是、一旦转移所有权、该 SCI 模块的所有配置都需要来自 CPU2、因为它现在拥有模块的所有权。  由于 CPU 不再拥有所有权、因此对 CPU1 syscfg 文件中该 SCI 模块所做的任何更改都不会反映出来。  

    在 CPU2 syscfg 文件中进行正确的配置后、 请确保您再次在 CPU2 侧调用 Boardinit ();因为这将初始化您在 CPU2 的 syscfg 中所做的更改。  

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

    AJ、

    谢谢你的答复,与此同时,经过一些混乱,我有 SCIA 工作. 但是、现在我看到了另一个与 RX 中断相关的问题。  

    具体而言、当 CPU2 程序运行时、它会通过 SCIA 打印字符串。 效果完美。 然而、当一个字符被发送到 SCIA 时、不会触发 RX 中断。  

    我将项目的单核版本与双核版本(我遇到问题的地方)进行了比较。  我注意到的是、CPU 中断寄存器似乎没有设置正确。 IER 和 IFR 在运行时均显示为 0x0000。 在单核版本上、它正确地启用了中断。 我认为这就是 RX 中断无法正常工作的原因。

    当我比较单核与双核的 syscfg 文件时、它们与 SCIA 配置非常匹配。 另一个观察结果是、syscfg 实用程序生成的 board.c 也非常匹配(双核除外,“CPU1“下列出了 SCI 的 pinmux、但“SCI config“列出的是 CPU1。

    因此、我想知道这是否是导致问题的原因。 再次感谢。

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

    Jwalant,

    我将这个问题重定向到 SCI 专家、因为中断问题看起来更像是  外设 级别的、而不是多核级别的。 请给他们一些时间来答复。  

    此致、
    Aj Favela.  

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

    尊敬的 Jwalant,

    对我延迟的回复表示歉意。 CPU2 主代码中是否有以下行?

    如果是、您能否尝试在 CPU2 上逐步完成这些线路、看看 PIE 初始化设置是否正确?  

    此致、

    Delaney

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

    那是为小费! 我在这里发现了一些奇怪的东西。 当我尝试在 CPU2 端进入 Interrupt_initModule 时、会抛出工程中从未指定的路径错误。 好像这是一条硬编码的 TI 内部路径!  

    也许这是问题。  

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

    尊敬的 Jwalant,

    此错误只是因为 CCS 无法找到源文件、所以不应该影响已编程到器件中的。 要解决此问题、您能否点击“Browse“并导航至本地安装中的[C2000ware install]\driverlib\f28p65x\driverlib\interrupt.c 文件?

    此致、

    Delaney

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

    我这样做了,但它没有改变任何东西。 我最终仍然出现相同的错误、 IER 没有设置正确。 是否要进行实时呼叫?

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

    我再接再厉。 似乎是 Interrupt_initVectorTable() 抛出异常、它被捕获到非法操作处理程序中。

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

    尊敬的 Jwalant,

    为了进行验证、您首先在 CPU1 上连接、加载和运行代码、对吧? 在连接到 CPU2 之前?

    此外、您在 CPU2 工程中使用的是哪个链接器 cmd 文件? 是为 CPU2 打造的(例如:28P65x_generic_flash_lnk_CPU2)吗?

    您能否检入.map 文件以查看 CPU2 工程的 PIE 矢量表在存储器中的位置? 似乎 CPU2 在运行 Interrupt_initVectorTable () 时没有获得对该位置的正确访问权限。

    此致、

    Delaney