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:在 SCI 初始化之前发送数据时中断错误

Guru**** 2616675 points

Other Parts Discussed in Thread: TMS320F28377D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1577858/tms320f28377d-break-error-when-data-is-sent-before-sci-initialization

器件型号: TMS320F28377D
主题: C2000WARE 中讨论的其他器件

您好:

我正在 TMS320F28377D 上使用 SCI 模块。

如果另一个器件在 SCI 初始化之前开始发送数据、则有时会发生中断错误。

您能否解释一下为什么会发生这种情况?

谢谢你。

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

    您好:

    我建议查看器件 TRM 的 SCI 一章中对中断检测功能的说明。 请仔细检查您的初始化序列。 对 我来说、好像您正在启用 SCI  开始发送数据之前对另一个器件进行寻址。 在这种情况下、RX 线路可能较低、从而导致中断错误。 您可以尝试在 RX 上添加一个上拉电阻器、以查看中断错误是否消失。 上拉电阻将确保在 MCU 结束复位时 RX 线路处于高电平。  

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

    感谢您的答复。
    但是、我指的顺序与您描述的顺序不同。
    我面临的问题是由以下顺序引起的:
    已发送 SCI→我的器件开始初始化。
    我感谢您的帮助、并期待您的想法。

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

    SCI RX 引脚由您的“另一个“器件驱动。 为了避免中断条件、在启用 MCU 上的 SCI 之前、该引脚需要为高电平。

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

    再次感谢您的持续支持。
    我想澄清顺序并分享另一个观察结果、这可能有助于缩小问题范围。
    在我的设置中、外部器件持续传输数据、并且此传输在 F28377D 上的 SCI 模块初始化之前开始。
    我已经确认、当外部器件未传输时、即使稍后初始化 SCI、也不会发生中断错误。
    这表明中断条件并不是由于 RX 线路默认为低电平、而是由于 SCI 尚未就绪时发生了有效传输。
    外部器件无法延迟传输、因此我正在寻找一种在 MCU 侧处理这种时序不匹配的方法。
    对于在这些情况下安全初始化 SCI、或者在模块完全准备就绪之前忽略传入的数据、您是否有任何建议?

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

    感谢您提供更多详细信息。 请检查 C2000 端的 SCI 初始化软件序列。 一种可能是 在 设置 C2000 的 pinmux 之前初始化并启用 SCI。 这将在设置 pinmux 之前阻止外部 RX 引脚与 SCI、从而可能导致中断错误。 您可以在 C2000ware 中导入任何 SCI 示例以检查初始化序列。  

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

    MCU 的所有 GPIO 引脚上还有一个内部上拉选项。 您可以尝试在 RX GPIO 上启用这个内部上拉电阻、并查看行为是否有任何差异。  

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

    再次感谢您的持续支持。
    我在启用内部上拉电阻后检查了 SCI 寄存器。
    但是、在此设置中、TMS320F28377D 仍偶尔检测到中断条件。
    我还在 SCIRX 引脚附近测量了电压、但没有观察到任何长时间的低电平电压。
    谢谢你。

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

    我仍然不清楚您的引脚多路复用器和 SCI 初始化序列。 您能解释一下吗?  

    此外、MCU 使用哪种时钟模式? INTOSC、外部晶体?  

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

    您好:
    对于延迟的回复以及由此造成的任何混淆、我深表歉意。 我之前在不同的帐户下发帖、但由于登录问题、我想使用另一个帐户继续讨论。
    感谢您的持续支持。 我想分享 SCIC 初始化序列和相应的源代码。


    时钟配置
    •外部晶体振荡器:16MHz
    •系统时钟:156MHz
    初始化序列
    GPIO 配置(内核 1)
    2.内核 2 闪存引导
    GPIO 配置(内核 2)
    4. SCI 配置(核心 2)


    工程
    /*时钟配置*/
    /*•外部晶体振荡器:16MHz */
    /*•系统时钟:156MHz */
    #define VAL_PCLKCR7 0x00000006
    define INIT_SCIC_SCICTL1 0x0003
    #define VAL_SCIC_SCICCR 0x0027
    #define VAL_SSCIC_SCIHBAUD 0x0000
    #define VAL_SSCIC_SCILBAUD 0x00A8
    #define VAL_SCIC_SCICTL2 0x0000
    #define INIT_SCIC_SCIFFTX 0x4060
    #define INIT_SCIC_SCIFFRX 0x4061
    #define VAL_SCIC_SCIFFCT 0x0000
    #define VAL_SCIC_SCIPRI 0x0000
    #define VAL_SCIC_SCIFFTX 0xE060
    #define VAL_SCIC_SCIFFRX 0x6061
    #define VAL_SCIC_SCICTL1 0x0023

    void vInitSciPeri( void );
    void vReadyInitSciPeri( void );
    void vSetSciCRegs ( void );
    /****************************************************************************************************************************
    ********************************************************************************************************************** /
    void vInitSciPeri( void ){
    vReadyInitSciPeri();
    vSetSciCRegs ();
    }

    /****************************************************************************************************************************
    ********************************************************************************************************************** /
    void vReadyInitSciPeri( void ){
    __ eallow();
    G_stRegsCpuSys.uPCLKCR7.dwWord =(无符号长整型)VAL_PCLKCR7;
    __ EDIS ();
    }


    /****************************************************************************************************************************
    ********************************************************************************************************************** /
    void vSetSciCRegs ( void ){
    __ eallow();

    /* SCIC 控制寄存器 1:启用发送和接收;启用复位;禁用错误中断*/
    G_stRegsSciC.uSCICTL1.unWord =(unsigned int) init_SCIC_SCITL1;

    /* SCIC 通信控制寄存器:
    O 1 字= 8 位
    o 无地址位加法
    O 环回模式已禁用
    o 启用奇偶校验位
    O 1 停止位
    */
    G_stRegsSciC.uSCICCR.unWord =( unsigned int ) VAL_SCIC_SCICCR;

    /* SCIC 控制寄存器 1(更新):启用接收和发送;禁用错误中断*/
    G_stRegsSciC.uSCICTL1.unWord =(无符号整数)VAL_SCIC_SCITL1;

    /* SCIC 波特率高寄存器:设置 BRR = 168 */
    G_stRegsSciC.uSCIHBAUD.unWord =(无符号整数)VAL _ SCIC_SCIHBAUD;

    /* SCIC 波特率低寄存器:设置 BRR = 168 */
    G_stRegsSciC.uSCILBAUD.unWord =(无符号整数)VAL_SSCIC_SCIBAUD;

    /* SCIC 控制寄存器 2:启用 TXRDY、RXRDY 和 BRKDT 中断*/
    G_stRegsSciC.uSCICTL2.unWord =(无符号整数)VAL_SCIC_SCICTL2;

    /* SCIC FIFO 发送寄存器:禁用发送 FIFO 中断;复位发送 FIFO */
    G_stRegsSciC.uSCIFFTX.unWord =(unsigned int) init_SCIC_SCIFFTX;

    /* SCIC FIFO 接收寄存器:在 1 个字节上启用接收 FIFO 中断;复位接收 FIFO */
    G_stRegsSciC.uSCIFFRX.unWord =(unsigned int) init_SCIC_SCIFFRX;

    /* SCIC FIFO 控制寄存器:无延迟*/
    G_stRegsSciC.uSCIFFCT.unWord =(无符号整数)VAL_SCIC_SCIFFCT;

    /* SCIC SCI 优先级控制:发生故障时立即停止传输*/
    G_stRegsSciC.uSCIPRI.UNWord =( unsigned int ) VAL_SCIC_SCIPRI;

    /* SCIC FIFO 发送寄存器(更新):禁用发送 FIFO 中断;释放发送 FIFO 复位*/
    G_stRegsSciC.uSCIFFTX.unWord =(无符号整数)VAL_SCIC_SCIFFTX;

    /* SCIC FIFO 接收寄存器(更新):启用 1 字节时接收 FIFO 中断;释放接收 FIFO 复位*/
    G_stRegsSciC.uSCIFFRX.unWord =(无符号整数)VAL_SCIC_SCIFFRX;

    /* SCIC 控制寄存器 1(最终):启用发送和接收;释放复位;禁用错误中断*/
    G_stRegsSciC.uSCICTL1.unWord =(无符号整数)VAL_SCIC_SCITL1;

    __ EDIS ();
    }

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

    您好、

    时钟配置
    •外部晶体振荡器:16MHz
    •系统时钟:156MHz
    初始化序列
    GPIO 配置(内核 1)
    2.内核 2 闪存引导
    GPIO 配置(内核 2)
    4. SCI 配置(内核 2)[/报价]

    感谢您提供了初始化序列。 这看起来不错。  

    void vSetSciCRegs( void ){

    我建议查看 C2000ware 中的 SCI 位字段示例中的 SCI 配置步骤、以了解您的 SCI 配置是否存在差异、这可以 解释 您所面临的中断问题。

    C:\ti\c2000\C2000Ware_6_00_00\device_support\f2837xd\examples\cpu1\sci_loopback

    C:\ti\c2000\C2000Ware_6_00_00\device_support\f2837xd\examples\cpu1\sci_echoback

    [/quote]