工具/软件: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