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.

[参考译文] TMS570LC4357:SCI FLR寄存器始终卡在值0x0.0904万处

Guru**** 2465890 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1092327/tms570lc4357-sci-flr-register-always-stuck-at-value-0x00000904

部件号:TMS570LC4357

我们正在使用TMS570lc4357并实施SCI驱动程序,在进行测试时,我们观察到SCI标志寄存器始终卡在值"0x0.0904万"处,不管SCI是否已初始化。 当我们解码此值时,已设置空闲标志,因此SCI无法接收任何数据。能否指导我们如何解决此问题?

我在下面给出了SCI初始化顺序,

/**@b初始化@b SCI2 */

/**-使SCI2退出复位*/
sciREG2->GCR0 = 0U;
sciREG2->GCR0 = 1U;

/**-禁用所有中断*/
sciREG2->CLEARINT = 0xFFFFFFFFU;
sciREG2->CLEARINTLVL = 0xFFFFFFFFU;

/**-全局控制1 */
sciREG2->GCR1 =(UINT32)((UINT32)1U <<25U)/*启用传输*/
|(UINT32)((UINT32)1U <<24U)/* enable receive */
|(UINT32)((UINT32)1U <5U)/*内部时钟(设备没有时钟引脚)*/
|(UINT32)((UINT32)(2U-1U)<4U)/*停止位数*/
|(UINT32)((UINT32) 0U << 3U)/*偶数奇偶校验,否则为奇数*/
|(UINT32)((UINT32) 0U << 2U)/* enable parity */
|(UINT32)((UINT32) 1U <1U);/*异步定时模式*/

/**-设置波特率*/
sciREG2->BRS = 40U;/*波特率*/

/**-传输长度*/
sciREG2->format =8U - 1U;/* length */

/**-设置SCI2引脚功能模式*/
sciREG2->PIO0 =(UINT32)((UINT32) 1U <2U)/* TX引脚*/
|(UINT32)((UINT32) 1U <1U);/* Rx引脚*/

/**-设置SCI2针脚默认输出值*/
sciREG2->PIO3 =(UINT32)((UINT32) 0U << 2U)/* TX引脚*/
|(UINT32)((UINT32) 0U << 1U);/* Rx引脚*/

/**-设置SCI2引脚输出方向*/
sciREG2->PIO1 =(UINT32)((UINT32) 1U <2U)/* TX引脚*/
|(UINT32)((UINT32) 0U << 1U);/* Rx引脚*/

/**-设置SCI2引脚打开排放启用*/
sciREG2->PIO6 =(UINT32)((UINT32) 0U << 2U)/* TX引脚*/
|(UINT32)((UINT32) 0U << 1U);/* Rx引脚*/

/**-设置SCI2引脚上拉/下拉启用*/
sciREG2->PIO7 =(UINT32)((UINT32) 0U << 2U)/* TX引脚*/
|(UINT32)((UINT32) 0U << 1U);/* Rx引脚*/

/**-设置SCI2引脚上拉/下拉选择*/
sciREG2->PIO8 =(UINT32)((UINT32) 1U <2U)/* TX引脚*/
|(UINT32)((UINT32) 1U <1U);/* Rx引脚*/

/**-设置中断级别*/
sciREG2->SETINTLVL =(UINT32)((UINT32) 0U << 26U)/*帧错误*/
|(UINT32)((UINT32) 0U << 25U)/*溢出错误*/
|(UINT32)((UINT32) 0U << 24U)/*奇偶校验错误*/
|(UINT32)((UINT32) 0U << 9U)/*接收*/
|(UINT32)((UINT32) 0U << 8U)/*传输*/
|(UINT32)((UINT32) 0U << 1U)/*唤醒*/
|(UINT32)((UINT32) 0U << 0U);/*中断检测*/

/**-设置中断启用*/
sciREG2->SEINT =(UINT32)((UINT32)0U <<26U)/*帧错误*/
|(UINT32)((UINT32) 0U << 25U)/*溢出错误*/
|(UINT32)((UINT32) 0U << 24U)/*奇偶校验错误*/
|(UINT32)((UINT32) 0U << 9U)/*接收*/
|(UINT32)((UINT32) 0U << 1U)/*唤醒*/
|(UINT32)((UINT32) 0U << 0U);/*中断检测*/

/**-初始化全局传输变量*/
G_sciTransfer_t[1U].mode =(UINT32) 0U << 8U;
G_sciTransfer_t[1U].TX_length = 0U;
G_sciTransfer_t[1U].rx_length = 0U;

/**-最终启动SCI2 */
sciREG2->GCR1 |= 0x80U;

  

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

    您好,

    总线必须处于空闲状态11位,以清除SCIFLR空闲此位。 调用sciInit()后,SCI应输入空闲统计信息,因为在对SCI寄存器编程时SCI模块处于SW复位(SWnRST=0)状态。

    您知道哪个指令设置了SCIFLR的空闲位吗?

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

    您好,QJ  

    非常感谢您的回复! SCI现在工作正常。

    此致,

    苏巴什