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.

[参考译文] CCS/TMS320F28069:F28069中的 SCI

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/733956/ccs-tms320f28069-sci-in-f28069

器件型号:TMS320F28069

工具/软件:Code Composer Studio

你(们)好。

上次我在这个论坛上提出问题时,我认为我的计划进展顺利。 但是 、它不是。 我尝试通过 SCI-A 将 Arduino Uno 中的数据发送到 TI 我希望 TI 的串行监视器(我正在使用 PuTTY)能够显示 Arduino 数据。 如果我使用默认程序,特别是此部分:

无效
scia_msg (char * msg)

int i;
I = 0;

while (msg[i]!='\0')

scia_xmit (msg[i]);
i++;

PuTTY 可以显示主消息(Hello World 等),但我从 Arduino 发送的数据未完全发送。 例如,如果我发送“123456”,则 PuTTY 仅显示:

大家好

您将输入一个字符、DSP 将回显它!

输入字符:  数据 A': 1.

输入字符:  数据 A': 0

输入字符:  数据 A':   

输入字符:  数据 A':  

输入字符:  数据 A':  

输入字符:

但是, 如果我像这样更改程序:

无效
scia_msg (char * msg)

int i;
I = 0;

while (msg[i]='#')  //因为我在 Arduino 程序中使用'#'进行 ENTER 操作

scia_xmit (msg[i]);
i++;

 


TI 的串行监视器(PuTTY)可以显示我从 Arduino 发送的数据。 但是、PuTTY 上不会显示 CCS 程序的主消息(Hello World 等)。  

重点是、我想显示主消息(Hello World 等)以及我 从 Arduino (键盘)发送的数据。  

这里是我的 CCS 代码(我使用的是 sci_echoback 示例代码):

//######################################################################################################################
//
//文件:example_2806xScia_Echoback.c
//
//标题:SCI 回波示例
//
//! addtogroup f2806x_example_list
//!

SCI 回送(sci_echoback)


//!
//! 此测试通过 SCI-A 端口接收和回波数据。
//!
//! PC 应用程序'hyptertermination'可用于查看数据
//! 并将信息发送到 SCI。 接收到的字符
//! 将被发送回主机。
//!
//! b 正在运行\b 应用程序
//! -#配置超级终端:
//! 使用随附的超级终端配置文件 SCI_96.HT。
//! 超级终端中加载此配置
//! -#打开超级终端
//! -#转至文件->打开
//! -#浏览至项目位置和
//! 选择 SCI_96.HT 文件。
//! -#检查 COM 端口。
//! 当前已为 COM1设置配置文件。
//! 如果不正确,请断开连接(呼叫->断开连接)
//! 打开"File-Properties"对话框并选择正确的 COM 端口。
//! -#连接超级终端呼叫->呼叫
//! 然后开始2806x SCI 回送程序执行。
//! -#该程序将打印一条问候语,然后请您回答
//! 输入一个字符、它将回显到超级终端。
//!
//! 注意:如果无法打开.HT 文件,则可以创建
//! 具有以下设置的新设置
//! -找到正确的 COM 端口
//! -每秒位数= 9600
//! -日期位= 8
//! -奇偶校验=无
//! -停止位= 1
//! -硬件控制=无
//!
//! b 监视\b 变量\n
//! -\b 循环计数,表示发送的字符数
//! -错误计数
//!
//! b 外部连接\n
//! 通过收发器和电缆将 SCI-A 端口连接到 PC。
//! - GPIO28为 SCI_A-RXD (连接到串行 DB9电缆的引脚3、PC-TX)
//! - GPIO29为 SCI_A-TXD (通过串行 DB9电缆连接到 PIN2、PC-RX)
//
//######################################################################################################################
//$TI 发行版:F2806x 支持库 v2.04.00.00 $
//$Release Date:Tue Jun 26 03:13:59 CDT 2018 $
//版权所有:
//版权所有(C) 2009-2018 Texas Instruments Incorporated - http://www.ti.com/
//
//以源代码和二进制形式重新分发和使用,有无
//如果满足以下条件,则允许进行修改
//满足:
//
//重新分发源代码必须保留上述版权
//注意、此条件列表和以下免责声明。
//
//二进制形式的重新分发必须复制上述版权
//注意、中的条件列表和以下免责声明
//随提供的文档和/或其他材料
//分布。
//
//德州仪器公司的名称和的名称都不是
//其贡献者可用于认可或推广衍生产品
//未经特定的事先书面许可,从该软件下载。
//
//本软件由版权所有者和作者提供
//“原样”以及任何明示或暗示的保证,包括但不包括
//限于对适销性和适用性的暗示保证
//一个特定的目的是免责的。 在任何情况下、版权均不得
//所有者或贡献者应对任何直接、间接、偶然、
//特殊、典型或必然的损害(包括但不包括)
//仅限于采购替代货物或服务;
//数据或利润;或业务中断)
//责任理论,无论是合同责任、严格责任还是侵权行为
//(包括疏忽或其他)以任何方式因使用而产生
//此软件,即使已被告知可能会发生此类损坏。
//$
//######################################################################################################################

//
//包含的文件
//
#include "DSP28x_Project.h"//器件头文件和示例 include 文件

//
//函数原型
//
void scia_echoback_init (void);
void scia_fifo_init (void);
void scia_xmit (int a);
void scia_msg (char * msg);

//
//全局
//
uint16环计数;
UINT16错误计数;
uint16 ReceivedChar;

//
//主函
//
void main (void)

char *msg;

//
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2806x_SYSCTRL.c 文件中。
//
InitSysCtrl();

//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2806x_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
//InitGpio();针对此示例跳过

//
//对于这个示例、只初始化针对 SCI-A 端口的引脚。
//此函数位于 F2806x_Sci.c 文件中。
//
InitSciaGpio();

//
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;

//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2806x_PIECTRL.c 文件中。
//
InitPieCtrl();

//
//禁用 CPU 中断并清除所有 CPU 中断标志
//
IER = 0x0000;
IFR = 0x0000;

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2806x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2806x_PieVect.c 中找到
//
InitPieVectTable();

//
//步骤4. 初始化所有器件外设:
//此函数可在 F2806x_InitPeripherals.c 中找到
//
//InitPeripheral();//本示例不需要

//
//步骤5. 特定于用户的代码
//
LoopCount = 0;
错误计数= 0;

scia_fifo_init();//初始化 SCI FIFO
scia_echoback_init();//初始化用于 echoback 的 SCI

MSG ="\r\n\n\nHello World!\0";
scia_msg (msg);

MSG ="\r\n 您将输入一个字符,DSP 将回显它! \n\n";
scia_msg (msg);

for (;;)

MSG ="\r\n 输入字符:\0";
scia_msg (msg);

//
//等待 inc 字符
//
while (SciaRegs.SCIFFRX.bit.RXFFST < 1)

//
//等待 XRDY =1为空状态
//

//
//获取字符
//
ReceivedChar = SciaRegs.SCIRXBUF.ALL;

//
//回显字符
//
MSG ="数据 A":\0";
scia_msg (msg);
scia_xmit (ReceivedChar);

LoopCount++;

//
// scia_echoback_init -测试1、SCIA DLB、8位字、波特率0x0103、
//默认,1个停止位,无奇偶校验
//
无效
scia_echoback_init ()

//
//注意:SCIA 外设的时钟被打开
//在 InitSysCtrl()函数中
//

//
// 1停止位,无回送,无奇偶校验,8个字符位,异步模式,
//空闲线协议
//
SciaRegs.SCICCR.all =0x0007;

//
//启用 TX、RX、内部 SCICLK、禁用 RX ERR、睡眠、 TXWAKE
//
SciaRegs.SCICTL1.all =0x0003;

SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;

//
// 9600波特@LSPCLK = 22.5MHz (90MHz SYSCLK)
//
SciaRegs.SCIHBAUD = 0x0001;
SciaRegs.SCILBAUD = 0x0024;

SciaRegs.SCICTL1.all =0x0023;//从复位中撤回 SCI

//
// scia_xmit -从 SCI 发送一个字符
//
无效
scia_xmit (int a)

while (SciaRegs.SCIFFTX.bit.TXFFST > 0)


SciaRegs.SCITXBUF=A;

//
// scia_msg -
//
无效
scia_msg (char * msg)

int i;
I = 0;

while (msg[i]!='\0')

scia_xmit (msg[i]);
i++;

//
// scia_fifo_init -初始化 SCI FIFO
//

无效
scia_fifo_init()

SciaRegs.SCIFFTX.All=0xE040;
SciaRegs.SCIFFRX.All=0x2044;
SciaRegs.SCIFFCT.All=0x0;

无效
SCia_GPIO()

#if DSP28_SCIA
InitSciaGpio();
#endif // endif DSP28_SCIA

EALLOW;

/*为所选引脚启用内部上拉*/
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。

GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 GPIO28启用上拉(SCIRXDA)
// GpioCtrlRegs.GPAPUD.bit.GPIO7=0;//启用 GPIO7的上拉(SCIRXDA)

GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;//为 GPIO29启用上拉(SCITXDA)
// GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//启用 GPIO12的上拉(SCITXDA)

/*将所选引脚的限定条件设置为仅异步*/
默认情况下、//输入与 SYSCLKOUT 同步。
//这将为所选引脚选择异步(无限定条件)。

GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//异步输入 GPIO28 (SCIRXDA)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 3;//异步输入 GPIO7 (SCIRXDA)

/*使用 GPIO 寄存器配置 SCI-A 引脚*/
//这指定哪些可能的 GPIO 引脚将是 SCI 功能引脚。

GpioCtrlRegs.GPAMUX2.bit.GPIO28=1;//为 SCIRXDA 操作配置 GPIO28
// GpioCtrlRegs.GPAMUX1.bit.GPIO7=2;//为 SCIRXDA 操作配置 GPIO7

GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;//为 SCITXDA 操作配置 GPIO29
// GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 2;//为 SCITXDA 操作配置 GPIO12

EDIS;

//#endif
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//不再需要。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


//
//文件结束
//

有人、您知道我的问题吗?

Amir

 

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

    "我尝试通过 SCI-A 从 Arduino Uno 向 TI 发送数据。"
    "以显示主消息(Hello World 等)和您从 Arduino (键盘)发送的数据。"

    这不是一个从 PuTTy 发送数据的 echoback 示例“scia_echoback_init()”吗?

    没有 Arduino 的示例是否正常工作?

    这里的键盘干预是什么?

    如果只是通过 SCI 发送到 TX 的数据,则只需要示例的 RX 部分,而不需要回声。

    为什么要更改输入字符的#? 它仍会接收以/0作为右尾的字符?

    那么从 Arduino 发送到 TI MCU 的数据(即 ReceivedChar)无法正确接收?
    您能否单独使用 Arduino 与超级终端进行检查、以消除对 TI 电路板的依赖并单独进行检查?

    2.对于接收所有字符的问题,2块板之间的波特率是否设置正确?

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

    我将向您解释我的项目。 实际上、我在 TI 编程中并不是很好、因为我刚刚学习了。

    我使用键盘从 Arduino Uno 输入数据。 当我输入字符或数字时、它是以串行方式正确发送的。

    我希望数据也能在 TI 中正确发送、并且 TI 会将数据发送回 Arduino (显示在 Arduino LCD 或串行监视器上)。 但是、它不起作用、相反、我发现了一个问题、就像我在上面问的问题一样。

    关于您的问题:
    1.是的、数据发送不正确
    2.我已经设置波特率,我全部设置9600。