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.

[参考译文] TMS320F280049M:SCI - B 模块无法正常工作

Guru**** 2538950 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/613664/tms320f280049m-sci---b-module-not-working-properly

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

您好!

我已经尝试了提供的用于 F280049M 处理器的 SCI 回送示例、并将示例修改为 SCI - B 模块、并尝试针对 SCI-B 可能的不同 GPIO 配置运行示例 我无法使其正常工作。 我尝试将 Rx 和 Tx 引脚连接到示波器、仅用于 GPIO40、因为 Tx 我可以看到数据、但无法看到其他 Tx 和 Rx 引脚的数据。 我还尝试了一个具有软件回送使能的简单逻辑、它运行正常。 因此、问题看起来好像出现在 GPIO 配置中。

这是我使用的代码。 请告诉我需要为此做些什么。

//########################################################################################################################
//
//文件:sci_b_ex1_echoback.c
//
//标题:SCI 回送示例。
//
//! addtogroup bitfield_example_list
//!

SCI 回送


//!
//! 此测试通过 SCI-B 端口接收和回波数据。
//!
//! 可以使用"putty"等终端查看来自的数据
//! SCI 并将信息发送到 SCI。 接收到的字符
//! 将被发送回主机。
//!
//! b 正在运行\b 应用程序
//! 使用终端打开具有以下设置的 COM 端口:
//! -找到正确的 COM 端口
//! -每秒位数= 9600
//! -数据位= 8
//! -奇偶校验=无
//! -停止位= 1
//! -硬件控制=无
//!
//! 该程序将打印一条问候语、然后要求您
//! 输入将回显到终端的字符。
//!
//! b 监视\b 变量\n
//! -loopCounter-发送的字符数
//!
//! b 外部连接\n
//! 通过收发器和电缆将 SCI-B 端口连接到 PC。
//! - GPIO 为 SCI_B-RXD (连接到串行 DB9电缆的引脚、PC-TX)
//! - GPIO 为 SCI_B-TXD (连接到串行 DB9电缆的引脚、PC-RX)

//########################################################################################################################

//

//
//包含的文件
//
#include "F28x_Project.h"

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

//
//全局
//
uint16_t loopCounter = 0;

//
//函数原型
//
void initSCIBEchoback (void);
void transmitSCIBChar (uint16_t a);
void transmitSCIBMessage (unsigned char * msg);
void initSCIBFIFO(void);

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

uint16_t ReceivedChar;
unsigned char *msg;

//
//初始化设备时钟和外设
//
InitSysCtrl();

//
//初始化 GPIO
//
InitGpio();

//
//对于这个示例、只初始化针对 SCI-B 端口的引脚。
// GPIO_SetupPinMux ()-设置 GPxMUX1/2和 GPyMUX1/2寄存器位
// GPIO_SetupPinOptions ()-设置 GPIO 的方向和配置
//这些函数可在 F28X7x_GPIO.c 文件中找到。
//
GPIO_SetupPinMux (13、0、6);
GPIO_SetupPinOptions (13、GPIO_INPUT、GPIO_PushPull);
GPIO_SetupPinMux (12、0、6);
GPIO_SetupPinOptions (12、GPIO_OUTPUT、GPIO_异 步);

//
//禁用 CPU 中断
//
Dint;

//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//
InitPieCtrl();

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

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)
//
InitPieVectTable();

loopCounter = 0;

initSCIBFIFO();//初始化 SCI FIFO
initSCIBEchoback();//初始化用于 echoback 的 SCI

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

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

for (;;)

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

//
//等待字符
//
while (ScibRegs.SCIFFRX.bit.RXFFST = 0)

transmitSCIBMessage (msg);

}//等待空状态

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

//
//回显字符
//
MSG ="您已发送:\0";
transmitSCIBMessage (msg);
transmitSCIBChar (ReceivedChar);

loopCounter++;

//
// initSCIBEchoback -初始化用于 echoback 的 SCI-B
//
void initSCIBEchoback (void)

//
//注意:SCIB 外设的时钟被打开
//在 InitSysCtrl()函数中
//
ScibRegs.SCICCR.all = 0x0007;// 1停止位,无环回
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
ScibRegs.SCICTL1.all = 0x0003;//启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、睡眠、TXWAKE
ScibRegs.SCICTL2.all = 0x0003;
ScibRegs.SCICTL2.bit.TXINTENA=1;
ScibRegs.SCICTL2.bit.RXBKINTENA=1;

//
// SCIB 为9600波特
//@LSPCLK = 25MHz (100MHz SYSCLK) HBAUD = 0x01且 LBAUD = 0x44。
//
ScibRegs.SCIHBAUD.ALL = 0x0001;
ScibRegs.SCILBAUD.ALL = 0x0044;

ScibRegs.SCICTL1.ALL = 0x0023;//从复位中撤回 SCI

//
// transmitSCIBChar -从 SCI 发送字符
//
void transmitSCIBChar (uint16_t a)

while (ScibRegs.SCIFFTX.bit.TXFFST!= 0)


ScibRegs.SCITXBUF.all = A;

//
// transmitSCIBMessage -通过 SCIB 发送消息
//
void transmitSCIBMessage (unsigned char * msg)

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

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

//
// initSCIBFIFO -初始化 SCI FIFO
//
空 initSCIBFIFO (空)

SCIFFTX.ALL = 0xE040;
ScibRegs.SCIFFRX.ALL = 0x2044;
ScibRegs.SCIFFCT.all = 0x0;

//
//文件结束
//

谢谢、

Aditya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您如何与器件通信? 您是否尝试使用 mini-USB 连接器?

    如何连接到 TX 和 RX 引脚?

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 Foca V2.2 USB 转串行 UART 板与串行端口进行通信。 使用这个、我可以看到 SCI-A 正常工作、但我无法与 SCI-B 通信
    对于 SCI-B、除了连接除 GPIO40之外的 Tx 和 Rx 引脚时、我无法在示波器中看到数据。

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

    我认为您代码中的 GPIO 配置是正确的。
    调试时、您能否查看并共享 GPIOCTRL 寄存器的值、尤其是 GPIO 配置后的 GPxMUX 和 GPxGMUX 寄存器的值?

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

    您好、Elizabeth、

    GPAMUX1的值为 167772160 (GPIO12和 GPIO13均为2)、GPAGMUX1 (GPIO12和 GPIO13均为1)的值为  83886080。  

    谢谢、

    Aditya

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

    如果内部回送正常工作、则可能是电路板连接问题。

    第一步是测试 GPIO 的连接。

    SAL

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

    您好 Sal、

    感谢您的回答、我发现了问题。 我使用的是旧版本的控制卡、但我使用 的是 C2000Ware_1_00_01_00中提供的最新版本 revA_120cCARD_pinout 、但 我使用的控制卡需要 在 C2000Ware_0_08_00_00中提供的120cCARD_pinout_E1_0。 这两个版本之间的引脚排列已更改。 我能够通过 SCI_B 和 GPIO 参考正确的引脚分配来获得正确的输出。  

    谢谢、

    Aditya