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.

[参考译文] TMS320F28377D:TMS320F28377D:CPU2上 SCID 的使用

Guru**** 2587345 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/651968/tms320f28377d-tms320f28377d-usage-of-scid-on-cpu2

器件型号:TMS320F28377D

我们有一个 SCID 驱动程序、该驱动程序在 CPU1上运行(即它传输数据)时可以正常工作、但当它必须在 CPU2上工作时、它不能工作。

要将 SCID 驱动程序移至 CPU2、我们已执行以下步骤:

一个示例

  • SCID 的多路复用器配置
  • 配置 DevConfRegs、以便为 SCID 放置 CPU2主器件
  • GPIOCtrlRegs.GPCSEl4.bit.GPIO93 =0x2的配置
  • GPIOCtrlRegs.GPCSEl4.bit.GPIO94 =0x2的配置

 

的示例

  • PIE 矢量的初始化
  • 配置了 CpuSysRegs、以便为 SCID 放置 CPU2主器件
  • 完整的 SCID 配置(与 CPU1上的配置相同、包括 Tx 和 Rx ISR 设置)

 

所有寄存器工作正常、但没有 Tx ISR 跳闸。

我注意到 CPU2上的 PIE 矢量表未更新。

 

我在哪里出错了?

顺便说一下、是否有处理这些问题的教程、即如何使用 CPU2上的外设所需的完整步骤列表?

 

谢谢、

Nicola

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

    当使用 GPIO 作为外设功能(在本例中为 SCI)时、您不必更改其内核选择。 改变外设所有权将会考虑到这一点。 因此不需要执行以下操作。

    GPIOCtrlRegs.GPCSEl4.bit.GPIO93 =0x2的配置
    GPIOCtrlRegs.GPCSEl4.bit.GPIO94 =0x2的配置

    它不应导致任何问题、但我会将其删除。

    请确认已从 CPU2启用 SCID 的时钟。 需要从拥有外设所有权的内核启用 PCCLKCRx 寄存器。

    此致、
    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nicola、这个问题是否已解决?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Vivek、

    我删除了您报告我无用的以下代码行:

     

    GPIOCtrlRegs.GPCSEl4.bit.GPIO93 =0x2的配置

    GPIOCtrlRegs.GPCSEl4.bit.GPIO94 =0x2的配置

     

    我确认、通过 CPU2、我对必要的寄存器进行所有配置、其中写入时钟寄存器(CpuSysRegs.PCLKCR7)。

    在我们的项目中、我们开发了用于 SCI 器件配置的驱动程序、这些驱动程序执行所有必须由想要使用 SCI 的 CPU 执行的设置。

    我们已经针对 SCIA 和 SCID 测试了驱动程序的操作:CPU1能够同时使用 SCIA 和 SCID。

    但是、当我们尝试使用 CPU2上的两个 SCI 之一、例如 SCID 时、SCID 无法使用它。

    CPU1为使 CPU2使用 SCID 而执行的操作如下:

    //Rx
    GPIO_IoctlMux (94U、6U);
    //TX
    GPIO_IoctlMux (93U、6U);
    GPIO_IoctlOptions (93U、 1U、GPIO_FLAG_QUALTYPE_ASYNC, 0U);
    
    core_Elowext();
    CpuSysRegs.PCLKCR1.bit.EMIF1 = 1;
    DevCfgRegs_377D->CPUSEL5.bit.SCI_D = USED_BY_CPU2;//#define USED_BY_CPU2(1U)
    CORE_Edisext();
    
    CPU2在驱动程序特定的初始化之前执行以下操作:
    
    /**将 PIE 控制寄存器初始化为默认状态。
    *默认状态是禁用所有 PIE 中断并
    清除标志*。
    //
    if (result=RET_OK){
    result = core_InitPieCtrl();
    }
    
    //初始化 PIE 矢量表,其中包含指向 shell 中断
    *服务例程(ISR)的指针。
    *这将填充整个表、即使未
    使用中断*也是如此。
    //
    if (result=RET_OK){
    result = core_InitPieVectTable ();
    }
    
    core_Elowext ();
    CpuSysRegs.PCLKCR1.bit.EMIF1 = 1;
    core_Edisext ();
    

    根据我们的调试操作、我们注意到所执行的所有配置都是成功的、并正确写入 CPU1和 CPU2的寄存器中。 我们注意到、与 CPU2使用的 SCID 相关的串行中断例程从未执行。 我们还注意到 CPU2 vectorTable 似乎未更新。 我们可以做些什么?

     

    顺便说一下、CPU2对外设使用是否存在限制?

    非常感谢、

    Nicola

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

    您好、Nicola、

    我们对 CPU2的使用没有任何限制。

    [引用]我们还注意到 CPU2 vectorTable 似乎未更新。 我们可以做些什么? [/报价]

    如果矢量表未更新、则不会注意到中断。 在 IF 条件内进行 PIE 矢量表初始化。 是否已检查此条件是否为真(RET_OK)? 似乎 CPU1和 CPU2之间存在一些握手问题。

    此致、

    Vivek Singh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否能够解决此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们已经解决了编译器明显错误的行为(我们为此打开了一个线程)导致的问题、该行为不允许我们正确设置 GPIO 的引脚 MUX。