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.

[参考译文] TMS570LS1227:TMS570LS1227的 SCI2无法正确传输数据

Guru**** 2611705 points
Other Parts Discussed in Thread: TMS570LS1227, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/770892/tms570ls1227-sci2-of-tms570ls1227-can-not-transmit-data-correctly

器件型号:TMS570LS1227
主题中讨论的其他器件: HALCOGEN

大家好、我使用 TMS570LS1227的双通道 SCI 接口同时发送数据。 SCI/LIN 传输数据正常、但另一个 SCI 接口未正确发送、且其 TX 引脚始终为低电平! 有谁可以回答这个问题? 非常感谢!

以下是初始化完成后我的代码和相关寄存器的内容。

 

空 sciInit (空)

  /**@b intalise @b SCI1 */

  /**-使 SCI 退出复位*/

  sciREG1->GCR0 = 1U;

        

  /**-禁用所有中断*/

  sciREG1->CLRINT  = 0xFFFFFFFF;

  sciREG1->CLRINTLVL = 0xFFFFFFFF;

 

  /**-全局控制1 */

  sciREG1->GCR1 =(1 << 25)//启用传输*/

                |(1 << 24)//启用接收*/

                |(1 << 5)  /*内部时钟(器件没有时钟引脚)*/

                |(0 << 4)  /*停止位数*/

                |(0 << 3)  /*偶数奇偶校验、否则为奇数*/

                |(0 << 2)  /*启用奇偶校验*/

                |(1 << 1)  /*异步计时模式*/

                |(0 < 0);

                  

  sciREG1->GCR1 = 0x03000022;

  /**-设置波特率*/

  sciREG1->baud = 259;    /* 19.2kHz,波特率*/

  

  /**-传输长度*/

  sciREG1->length = 7;/* length 为7+1 */

 

  /**-设置 SCI 引脚功能模式*/

  sciREG1->fy =(1 << 2)/* TX 引脚*/

                |(1 << 1)/* Rx 引脚*/

                |(0);/* clk 引脚*/

                                    

  /**-设置 SCI 引脚默认输出值*/

  sciREG1->DOUT =(0 << 2)/* TX 引脚*/

                |(0 << 1)/* Rx 引脚*/

                |(0);/* clk 引脚*/

 

  /**-设置 SCI 引脚输出方向*/

  sciREG1->DIR =(0 << 2)/* TX 引脚*/

                |(0 << 1)/* Rx 引脚*/

                |(0);/* clk 引脚*/

 

  /**-设置 SCI 引脚开漏使能*/

  sciREG1->ODR =(0 << 2)/* TX 引脚*/

                |(0 << 1)/* Rx 引脚*/

                |(0);/* clk 引脚*/

 

  /**-设置 SCI 引脚上拉/下拉使能*/

  sciREG1->PD =(0 << 2)/* TX 引脚*/

              |(0 << 1)/* Rx 引脚*/

              |(0);/* clk 引脚*/

 

  /**-设置 SCI 引脚上拉/下拉选择*/

  sciREG1->PSL =(1 << 2)/* TX 引脚*/

                |(1 << 1)/* Rx 引脚*/

                |(1);/* clk 引脚*/

 

  /**-设置中断级别*/

  sciREG1->SETINTLVL =(0 << 26)/*帧错误*/

                      |(0 < 25)/*溢出错误*/

                      |(0 < 24)/*存在毛利错误*/

                      |(0 << 9)  /*接收*/

                      |(0 < 8)  /*发送*/

                      |(0 << 1)  /*唤醒*/

                      |(0);      /*中断检测*/

 

  /**-设置中断使能*/

  sciREG1->SETINT =(0 << 26)/*帧错误*/

                  |(0 < 25)/*溢出错误*/

                  |(0 < 24)/*存在毛利错误*/

                  |(1 << 9)  /*接收*/

                  |(0 << 1)  /*唤醒*/

                  |(0);/*中断检测*/

 

  /**-设置中断使能*/

  sciREG1->CLRINT =(0 << 26)/*帧错误*/

                  |(0 < 25)/*溢出错误*/

                  |(0 < 24)/*存在毛利错误*/

                  |(0 << 9)/*接收*/

                  |(0 << 1)/*唤醒*/

                  |(0);/*中断检测*/

 

 

  /**- inialise 全局传输变量*/

  // g_sciTransfer[0]。mode  = 0 << 8;

  // g_sciTransfer[0].length = 0;

 

  /**-最终启动 SCI1 */

  sciREG1->GCR1 |= 0x80;

                                    

        /**@b intalise @b SCI2 */       

  /**-使 SCI 退出复位*/

        

  sciREG2->GCR0 = 1U;

                  

  /**-禁用所有中断*/

  sciREG2->CLRINT  = 0xFFFFFFFF;

  sciREG2->CLRINTLVL = 0xFFFFFFFF;

                                    

        tmp_reg = sciREG2->DIN;

 

  /**-全局控制1 */

  sciREG2->GCR1 =(1 << 25)//启用传输*/

                |(1 << 24)//启用接收*/

                |(1 << 5)  /*内部时钟(器件没有时钟引脚)*/

                |(0 << 4)  /*停止位数*/

                |(0 << 3)  /*偶数奇偶校验、否则为奇数*/

                |(0 << 2)  /*启用奇偶校验*/

                |(1 << 1)  /*异步计时模式*/

                |(0 < 0);

                  

  sciREG2->GCR1 = 0x03000022;

  /**-设置波特率*/

  sciREG2->baud = 259;    /* 19.2kHz,波特率*/

  

  /**-传输长度*/

  sciREG2->length = 7;/* length 为7+1 */

                                    

        /**-设置 SCI 引脚功能模式*/

  sciREG2->fy =(1 << 2)/* TX 引脚*/

                |(1 << 1)/* Rx 引脚*/

                |(0);/* clk 引脚*/

                                    

  /**-设置 SCI 引脚默认输出值*/

  sciREG2->DOUT =(0 << 2)/* TX 引脚*/

                |(0 << 1)/* Rx 引脚*/

                |(0);/* clk 引脚*/

  /**-设置 SCI 引脚输出方向*/

  sciREG2->DIR =(0 << 2)/* TX 引脚*/

                |(0 << 1)/* Rx 引脚*/

                |(0);/* clk 引脚*/

 

  /**-设置 SCI 引脚开漏使能*/

  sciREG2->ODR =(0 << 2)/* TX 引脚*/

                |(0 << 1)/* Rx 引脚*/

                |(0);/* clk 引脚*/

                                    

        /**-设置 SCI 引脚上拉/下拉使能*/

  sciREG2->PD =(0 << 2)/* TX 引脚*/

              |(0 << 1)/* Rx 引脚*/

              |(0);/* clk 引脚*/

 

  /**-设置 SCI 引脚上拉/下拉选择*/

  sciREG2->PSL =(1 << 2)/* TX 引脚*/

                |(1 << 1)/* Rx 引脚*/

                |(1);/* clk 引脚*/

                                    

  /**-设置中断级别*/

  sciREG2->SETINTLVL =(0 << 26)/*帧错误*/

                      |(0 < 25)/*溢出错误*/

                      |(0 < 24)/*存在毛利错误*/

                      |(0 << 9)  /*接收*/

                      |(0 < 8)  /*发送*/

                      |(0 << 1)  /*唤醒*/

                      |(0);      /*中断检测*/

 

  /**-设置中断使能*/

  sciREG2->SETINT =(0 << 26)/*帧错误*/

                  |(0 < 25)/*溢出错误*/

                  |(0 < 24)/*存在毛利错误*/

                  |(1 << 9)  /*接收*/

                  |(0 << 1)  /*唤醒*/

                  |(0);/*中断检测*/

 

  /**-设置中断使能*/

  sciREG2->CLRINT =(0 << 26)/*帧错误*/

                  |(0 < 25)/*溢出错误*/

                  |(0 < 24)/*存在毛利错误*/

                  |(0 << 9)/*接收*/

                  |(0 << 1)/*唤醒*/

                  |(0);/*中断检测*/

 

  /**- inialise 全局传输变量*/

  // g_sciTransfer[0]。mode  = 0 << 8;

  // g_sciTransfer[0].length = 0;

        tmp_reg = sciREG2->DIN;

  /**-最终启动 SCI2 */

  sciREG2->GCR1 |= 0x80;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您是否使用 HALCoGen 配置 SCI 端口?

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

    感谢您的回复!

    我没有使用 HALCoGen 配置 SCI 端口。 只需参考官方网站的一个例程、此例程是为 TMS570LS31x 开发的、包括两个 SCI 接口的初始化。

    现在 SCI/LIN 传输数据正常、但另一个 SCI 接口未正确发送、其 TX 引脚始终为低电平! 配置完成后、上图中 DIN 寄存器的值反映了两个通道 TX 引脚值的差异。

    在我的程序中、两个通道的 sci 接口使用相同的配置、硬件上也使用相同的连接方法! 这两个通道之间的区别是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我建议您使用 HALCoGen 配置 MCU。
    我在上面的代码中看到的是传输变量没有被初始化。您可以对它们进行注释。 您稍后可能会这样做。
    此外、请先将模块置于复位状态、然后再将其退出复位状态:
    sciREG->GCR0 = 0U;
    sciREG->GCR0 = 1U;

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

    非常感谢您的回复!
    根据您的建议、我添加了以下代码:

    sciREG->GCR0 = 0U;

    遗憾的是、问题仍未解决。我使用 HALCoGen 配置 MCU 的 sci 接口、HALCoGen 工具生成的代码也无法正常工作!

    根据我的经验、传输变量未初始化不会影响 SCITX 引脚的电平状态!
    以下是我的原理图:的一部分

    SCITX 和 SCIRX 默认为下拉状态。 在我的配置 SCIRX 变为高电平、但我不知道为什么、SCITX 始终为低电平!

    您是否已调试了不与 LIN 复用的 SCI 接口?

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

    您好!

    是否在 HALCoGen->PINMUX 选项卡中启用了 SCI 复选框?

    关于复位拉电阻状态:

    此致、

    米罗

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

    根据您的建议、我在 HALCoGen->PINMUX 选项卡中启用 SCI 复选框,SCI 接口正常工作!
    再次感谢!

    此致、
    兰斯