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.

[参考译文] TMS320F280039C:SCI 通信

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1322699/tms320f280039c-sci-communication

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

//##########################################################################出################################出
//
//文件:sci_ex3_echoback.c
//
//标题:SCI 回送示例。
//
//! \addtogroup driver_example_list
//!

SCI 回送


//!
//! 该测试通过 SCI-A 端口接收和回传数据。
//!
//! 可以使用'putty'等终端查看来自
//! 和向 SCI 发送信息。 已接收的字符
//! 数据包被发送回主机。
//!
//! \b 正在运行\b 应用程序
//! 使用终端按照以下设置打开 COM 端口:
//! -找到正确的 COM 端口
//! -每秒位数= 9600
//! -数据位= 8
//! -奇偶校验=无
//! -停止位= 1
//! -硬件控制=无
//!
//! 该程序将打印出问候语、然后要求您
//! 输入一个字符、它将回显到终端。
//!
//! \b 监视\b 变量\n
//! - loopCounter -发送的字符数
//!
//! /b 外部连接\n
//! 使用 USB 电缆将控制卡 J1:A 连接到 PC
//!
//
//##########################################################################出################################出
//
//
//$Copyright:
//版权所有(C) 2023德州仪器(TI)公司- http://www.ti.com/
//
//以源代码和二进制形式重新分发和使用,无论有无
//修改,前提是满足以下条件
//已满足:
//
//重新分发源代码必须保留以上版权
//通知,此条件列表和下述免责声明。
//
//以二进制形式重新分发必须复制上述版权
//通知,此条件列表和以下免责声明(位于
///文件和/或其他材料
//分布。
//
// TI 公司名称或公司名称
//其贡献者可用于认可或推广派生的产品。
//未经事先书面许可从本软件获得。
//
//此软件由版权持有者和贡献者提供
//"按原样"和任何明示或暗示的保证、包括但不限于
//仅限于对适销性和适用性的暗示保证
//不考虑特定目的。 在任何情况下、版权均不得
//所有者或贡献者对任何直接、间接、偶然、
//特殊、示例或后果性损害(包括但不包括
//仅限于采购替代货物或服务;不能使用、
///数据或利润;或业务中断)
//责任理论,无论是在合同,严格的责任,或侵权
//(包括疏忽或其他)以任何方式产生的使用
//本软件,即使已被告知此类损坏的可能性。
//$
//##########################################################################出################################出

//
//包含的文件
//
#include "driverlib.h"
#include "device.h"

//
//定义
//
//定义自动波特以使用自动波特锁定功能
//#define autobaud (定义自动波特)

//
//全局变量
//
uint16_t loopCounter = 0;
uint16_t receivedChar;
uint16_t rxStatus = 0u;

//
//主菜单
//
__interrupt void sciaRXFIFOISR (void);
空 main (void)
{

unsigned char * msg;


//
//配置 PLL,禁用 WD,启用外设时钟。
//
device_init();

//
//禁用引脚锁定并启用内部上拉。
//
device_initGPIO();

//
// GPIO28是 SCI Rx 引脚。
//
GPIO_setPinConfig (DEVICE_GPIO_CFG_SCIRXDA);
GPIO_setDirection 模式(DEVICE_GPIO_PIN_SCIRXDA、GPIO_DIR_MODE_IN);
GPIO_setPadConfig (DEVICE_GPIO_PIN_SCIRXDA、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (DEVICE_GPIO_PIN_SCIRXDA、GPIO_QUAL_ASYNC);

//
// GPIO29是 SCI Tx 引脚。
//
GPIO_setPinConfig (DEVICE_GPIO_CFG_SCITXDA);
GPIO_setDirection 模式(DEVICE_GPIO_PIN_SCITXDA、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (DEVICE_GPIO_PIN_SCITXDA、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (DEVICE_GPIO_PIN_SCITXDA、GPIO_QUAL_ASYNC);

//
//初始化中断控制器和矢量表。
//
interrupt_initModule();
interrupt_initVectorTable();

//
//初始化 SCIA 及其 FIFO。
//
SCI_performSoftwareReset (SCIA_BASE);

//
//为回显配置 SCIA。
//
SCI_setConfig (SCIA_BASE、DEVICE_LSPCLK_FREQ、9600、(SCI_CONFIG_WLEN_8 |
SCI_CONFIG_STOP_ONE |
SCI_CONFIG_PAR_NONE);
SCI_resetChannels (SCIA_BASE);
SCI_resetRxFIFO (SCIA_BASE);
SCI_resetTxFIFO (SCIA_BASE);
SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_TXFF | SCI_INT_RXFF);
SCI_enableFIFO (SCIA_BASE);
SCI_enableModule (SCIA_BASE);
SCI_performSoftwareReset (SCIA_BASE);

#ifdef 自动波特
//
//执行自动波特锁定。
// SCI 希望使用'A'或'A'来锁定波特率。
//
SCI_lockAutobaud (SCIA_BASE);
#endif
//CPUTimer_startTimer (myCPUTIMER0_BASE);
//
//发送启动消息。
//
MSG ="\r\n\n\nHello World!\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、17);
MSG ="\r\n 您将输入一个字符、DSP 将回显它!\n\n";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、62);

for (;;)
{
MSG ="\r\n 输入字符:\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、22);

//
//从 FIFO 中读取一个字符。
//
receivedChar = SCI_readCharBlockingFIFO (SCIA_BASE);
SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);
rxStatus = SCI_getRxStatus (SCIA_BASE);
if (((rxStatus 和 SCI_RXSTATUS_ERROR)!= 0)
{
//
//如果执行在这里停止,有一些错误
//分析 SCI_getRxStatus () API 返回值
//
ESTOP0;


//回显字符。
//
MSG ="您已发送:\0";
SCI_writeCharArray (SCIA_BASE、(uint16_t*) msg、13);
SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);

//
//递增循环计数变量。
//
DEVICE_DELAY_US (20000);
循环计数器++;


__interrupt void sciaRXFIFOISR (void)
{
//
//从 FIFO 中读取一个字符。
//
receivedChar = SCI_readCharBlockingFIFO (SCIA_BASE);

rxStatus = SCI_getRxStatus (SCIA_BASE);
if (((rxStatus 和 SCI_RXSTATUS_ERROR)!= 0)
{
//
//如果执行在这里停止,有一些错误
//分析 SCI_getRxStatus () API 返回值
//
ESTOP0;

//
//回显字符。
//
SCI_writeCharBlockingFIFO (SCIA_BASE、receivedChar);


SCI_clearOverflowStatus (SCIA_BASE);
//
SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_RXFF);

//
//发出 PIE 回路
//
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);

//
//文件结束
//

上面的代码在这里停止

//如果执行在这里停止,有一些错误
//分析 SCI_getRxStatus () API 返回值

有人能帮助我解决这个问题吗?

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

    尊敬的 Varun:

    感谢您联系 E2E 论坛!

    您能否查看变量 rxStatus 以了解它包含的值? 基于、您可以参考寄存器 SCIRXST 以了解该错误对应的更多详细信息。

    在此之前、您是否按照初始说明中所述进行硬件连接?

    谢谢。
    阿迪亚

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

    是、我更改了引脚选择

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

    您好!

    您能否分享您在终端建立的硬件连接? 此外、请求也共享 rxStatus 变量值以进行错误识别。


    谢谢。

    阿迪亚

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

    您好  

    我已将 GPIO35分配为 scia Rx、将 GPIO 37分配为 scia TX  

      rxStatus 变量值 为176

    谢谢

    瓦伦克尔

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

    您好

    #define DEVICE_GPIO_PIN_SCIRXDA 35u // SCI RX 的 GPIO 编号
    #define DEVICE_GPIO_PIN_SCITXDA 37U // SCI TX 的 GPIO 编号
    #define DEVICE_GPIO_CFG_SCIRXDA GPIO_35_SCIA_RX // SCI RX 的"pinConfig"
    #define DEVICE_GPIO_CFG_SCITXDA GPIO_37_SCIA_TX // SCI TX 的"pinConfig"

    引脚配置  

    谢谢

    瓦伦

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

    您是否能够使用 GPIO 28-29测试功能? 您能否检查引导模式选择开关的配置?

    此外、如何在 GPIO 35和 GPIO 37之间建立外部连接?

    阿迪亚

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

    IM 使用 TMS320F280039C 子板时未启动焊盘、我可以将 gpio28-29配置为 Rx TX  

    谢谢!  

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

    我也更改了引脚、但结果相同

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

    您能否描述一下在 controlCARD 集线站上建立的硬件连接? 您是否使用 DB9连接器与 PC 通信?


    阿迪亚

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

    IM 使用 RS232通信、im 使用终端软件查看输出、im 使用 DB9连接器、im 使用 TTL 到 RS232转换器

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

    您能否尝试更改硬件连接电缆? C2000Ware 中提供的软件示例经过验证并可正常工作、因此在硬件方面需要修复一些问题。

    阿迪亚

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

    您好  

    我移除了硬件连接、但代码仅在那里停止

    谢谢!

    瓦伦吉隆坡

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

    是的、如果移除了硬件连接、Rx 在引脚上看不到任何内容。 预计会停止。 我的请求是尝试另一个 DB9连接器/硬件并使用可用的软件示例验证硬件。

    阿迪亚