器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件: C2000WARE
工具/软件:TI C/C++编译器
大家好、
我正在尝试 LAUNCHXL-F28379D 上的 SCI 回波示例。 我构建了程序并启动了调试会话。 我根据说明打开了串行端口
-
但我会得到这种垃圾值。
如果能帮助解决这个问题、我将不胜感激。
谢谢你。
C2000培训小程序码
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.
器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件: C2000WARE
工具/软件:TI C/C++编译器
大家好、
我正在尝试 LAUNCHXL-F28379D 上的 SCI 回波示例。 我构建了程序并启动了调试会话。 我根据说明打开了串行端口
-
但我会得到这种垃圾值。
如果能帮助解决这个问题、我将不胜感激。
谢谢你。
C2000培训小程序码
您好 Arindam ,
波特率似乎未正确设置、导致终端上出现错误数据。
除非在示例或工程属性中指定、否则 C2000ware 中的示例主要是为 controlCARD 开发的。
如果要将其与 Launchpad 配合使用,我们需要对项目配置进行一些更新。
请查看 C2000Ware_2_00_02\device_support\f2837xd\docs\F2837xD_DEV_USER_GUIDE.pdf 中有关"入门和故障排除"的部分
如果使用 Launchpad、请添加名为"_LAUNCHXL_F28379D"的预定义名称。 这是设置正确的器件计时所必需的。
此致。
大家好、Meghana、
感谢您的回答。 正如您所建议的、我注意到未声明预定义名称。 我更改了它并重建了程序并启动了调试会话。 奇怪的是、在调试会话期间、如果我运行程序、我在终端窗口中看不到任何内容(尽管它之前也是一样的)。 如果我复位电路板、我开始观察终端上仍然发生在特定频率~1Hz 时的相同垃圾值。 因此它没有解决问题。
我有点困惑、因为同一个串行端口用于调试、也用作终端。 现在、这是否会造成任何问题? 此外、一旦我运行代码、我应该看到电路板和终端之间有一个正常工作的串行通信?
谢谢你。 非常感谢您的帮助。
大家好、Meghana、
再次感谢您的回答。 现在、让我来描述一下我想要的硬件功能。 我的方法可能非常错误。
对于此程序、我尝试在串行终端软件中写入内容(将传输到 launchpad)(即"X")、并期望在串行监视器中看到相同的"X"(作为电路板的回波) (通过同一串行端口/调试串行接口在电路板和计算机之间建立链接)。 比如 Arduino 串行反馈。
我可能是很错误的、因为 SCI 回送可能被写入以将数据传输到其其他串行端口引脚之一(而不是与计算机/调试串行接口通信的引脚)。 在这种情况下、这些串行端口引脚需要使用另一个 USB 串行器件连接到 PC。
请您澄清我的理解吗? 我可以使用 这些板执行预期的功能(串行打印为 Arduino)、还是需要将外部硬件连接到将连接到 PC 的 USB 串行转换器?
我已根据您的建议更改了 GPIO 引脚、但仍然相同。
非常感谢您的回答。
您好,
是的、您所描述的是 SCI 回送示例中发生的情况。
SCI 回送示例发送到 TX,然后有一个内部回送(没有到达 GPIO /没有 PC 连接),然后进入 RX。
无需外部硬件。
您能否重申您修改过的所有内容以及修改位置? 如果需要、粘贴代码...
我抓取了 F28377S launchpad 来尝试该示例、我所做的就是添加预定义并更改 GPIO 引脚多路复用以映射到正确的 sci 引脚。
此致。
大家好、Meghana、
列出的是我遵循的分步说明-
整个过程可在视频中看到。
感谢你的帮助。 请告诉我出错了。
这是主代码-
//######################################################################################################################
//
//文件:example_2837xDSci_Echoback.c
//
//标题:SCI 回送。
//
//! addtogroup cpu01_example_list
//!
//
//包含的文件
//
#include "F28x_Project.h"
//
//全局
//
uint16环计数;
//
//函数原型
//
void scia_echoback_init (void);
void scia_fifo_init (void);
void scia_xmit (int a);
void scia_msg (char * msg);
//
//主函
//
void main (void)
{
uint16 ReceivedChar;
char *msg;
//
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2837xD_SYSCTRL.c 文件中。
//
InitSysCtrl();
//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
InitGpio();
//
//对于这个示例、只初始化针对 SCI-A 端口的引脚。
// GPIO_SetupPinMux ()-设置 GPxMUX1/2和 GPyMUX1/2寄存器位
// GPIO_SetupPinOptions ()-设置 GPIO 的方向和配置
//这些函数可在 F2837xD_GPIO.c 文件中找到。
//
GPIO_SetupPinMux (43、GPIO_MUX_CPU1、1);
GPIO_SetupPinOptions (43、GPIO_INPUT、GPIO_PushPull);
GPIO_SetupPinMux (42、GPIO_MUX_CPU1、1);
GPIO_SetupPinOptions (42、GPIO_output、GPIO_Async);
//
//步骤3. 清除所有_interrupts 并初始化 PIE 矢量表:
//禁用 CPU __interrupts
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE __interrupts 和标志
//被清除。
//此函数位于 F2837xD_PIECTRL.c 文件中。
//
InitPieCtrl();
//
//禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是__interrupt
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
//
InitPieVectTable();
//
//步骤4. 用户特定代码:
//
LoopCount = 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 ==0){}//等待空状态
//
//获取字符
//
ReceivedChar = SciaRegs.SCIRXBUF.ALL;
//
//回显字符
//
MSG ="您已发送:\0";
scia_msg (msg);
scia_xmit (ReceivedChar);
LoopCount++;
}
}
//
// scia_echoback_init -测试1、SCIA DLB、8位字、波特率0x000F、
//默认,1个停止位,无奇偶校验
//
void scia_echoback_init ()
{
//
//注意:SCIA 外设的时钟被打开
//在 InitSysCtrl()函数中
//
SciaRegs.SCICCR.all = 0x0007;// 1停止位,无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all = 0x0003;//启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、睡眠、TXWAKE
SciaRegs.SCICTL2.all = 0x0003;
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
//
// SCIA 为9600波特
//@LSPCLK = 50MHz (200MHz SYSCLK) HBAUD = 0x02且 LBAUD = 0x8B。
//@LSPCLK = 30MHz (120MHz SYSCLK) HBAUD = 0x01且 LBAUD = 0x86。
//
SciaRegs.SCIHBAUD.ALL = 0x0002;
SciaRegs.SCILBAUD.ALL = 0x008B;
SciaRegs.SCICTL1.all = 0x0023;//从复位中撤回 SCI
}
//
// scia_xmit -从 SCI 发送一个字符
//
void scia_xmit (int a)
{
while (SciaRegs.SCIFFTX.bit.TXFFST!= 0){}
SciaRegs.SCITXBUF.ALL =A;
}
//
// scia_msg -通过 SCIA 发送消息
//
void scia_msg (char * msg)
{
int i;
I = 0;
while (msg[i]!='\0')
{
scia_xmit (msg[i]);
i++;
}
}
//
// scia_fifo_init -初始化 SCI FIFO
//
void scia_fifo_init()
{
SciaRegs.SCIFFTX.ALL = 0xE040;
SciaRegs.SCIFFRX.ALL = 0x2044;
SciaRegs.SCIFFCT.all = 0x0;
}
//
//文件结束
//
您好 Arindam ,
我相信 SCI 的引脚复用配置不正确。 休息一下看起来不错。
修改自:
GPIO_SetupPinMux (43、GPIO_MUX_CPU1、1);
GPIO_SetupPinOptions (43、GPIO_INPUT、GPIO_PushPull);
GPIO_SetupPinMux (42、GPIO_MUX_CPU1、1);
GPIO_SetupPinOptions (42、GPIO_output、GPIO_Async);
至:
GPIO_SetupPinMux (43、GPIO_MUX_CPU1、0xF);
GPIO_SetupPinOptions (43、GPIO_INPUT、GPIO_PushPull);
GPIO_SetupPinMux (42、GPIO_MUX_CPU1、0xF);
GPIO_SetupPinOptions (42、GPIO_output、GPIO_Async);
检查 TRM 表。
此致。
您好 Arindam,
很高兴听到您让它正常工作。 实际上,我是指以前版本的 TRM。
请参阅表8-7。 下面 TRM 的 GPIO 复用引脚。
http://www.ti.com/lit/ug/spruhm8h/spruhm8h.pdf
GPIO 索引是从0x1更新为0xF 的值。
这在本质上处理 了该多路复用所需的 GPyGMUXn 和 GPyMUXn 更新。
有关如何使用 API 的详细信息、请参阅相应源文件中的 API。
C2000Ware\device_support\f2837xd\common\source
此致。