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:使用 SCI 协议从 LAUNCHXL 接收数据

Guru**** 2524550 points
Other Parts Discussed in Thread: LAUNCHXL-F28379D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/798491/launchxl-f28379d-receive-data-from-the-launchxl-using-sci-protocol

器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件: C2000WARE

您好!

我正在尝试在 LAUNCHXL-F28379D 上使用 SCI 协议。 像往常一样、我阅读了文档并尝试了示例、但它们不起作用。 我从 SCIA 切换到 SCIB (因为 LAUNCHXL 在 SCIA 上没有引脚)、但它仍然不起作用。 我简化了代码,保留了基本代码,所以这就是我的代码:

#include "F28x_Project.h"

#define TX 18


void scib_echoback_init (void);
void scib_fifo_init (void);
void scib_xmit (int a);
void scib_msg (char * msg);


void main (void)
{
char *msg;

InitSysCtrl();

// GPIO
InitGpio();
GPIO_SetupPinMux (TX、GPIO_MUX_CPU1、 1);
GPIO_SetupPinOptions (TX、GPIO_OUTPUT、GPIO_异 步);

//中断
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EINT;

// SCI
scib_fifo_init ();
scib_echoback_init ();

for (;){
MSG ="A\0";
scib_msg (msg);
}


void scib_echoback_init ()
{
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 = 50MHz (200MHz SYSCLK) HBAUD = 0x02且 LBAUD = 0x8B。
//@LSPCLK = 30MHz (120MHz SYSCLK) HBAUD = 0x01且 LBAUD = 0x86。
//
ScibRegs.SCIHBAUD.ALL = 0x0002;
ScibRegs.SCILBAUD.ALL = 0x008B;

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

void scib_xmit (int a)
{
while (ScibRegs.SCIFFTX.bit.TXFFST!= 0){}
ScibRegs.SCITXBUF.all =a;
}

void scib_msg (char * msg)
{
int i;
I = 0;
while (msg[i]!='\0')
{
scib_xmit (msg[i]);
i++;
}
}

void scib_fifo_init()
{
SCIFFTX.ALL = 0xE040;
ScibRegs.SCIFFRX.ALL = 0x2044;
ScibRegs.SCIFFCT.all = 0x0;
}

您可以看到、我只是通过'A'字符反复发送。 在调试模式下、我从 ScibRegs 中检查了 SCITXBUF、并正确填充(0x0061)。 因此、我认为 SCI 的配置是正确的。 为了便于阅读,我使用 Arduino UNO,其代码如下:

void setup(){
Serial.begin(9600);
}

void loop(){
if (Serial.available ()>0){
int msg = Serial.read();
serial.println (msg);
}

两个卡都通过 USB 连接到我的计算机。 我将 TI 卡的引脚4 (GPIO18)连接到 Arduino 的引脚0 (RX)。 但 Arduino RX LED 不会亮起、串行监视器保持为空。

我绝对不知道问题在哪里。 如果需要、我将能够在星期一检查范围。

感谢您的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我们今天对信号进行了范围划分。 我们发现了两个问题,我们绝对不知道它们来自哪里,即使在反复阅读 TRM 之后:
    在 Scia 上,我们可以读取 SCI 信号,但这是一个奇怪的信号。 例如、当我们发送字符'a'(97)时、我们将收到'f'(102)。 我们使用了 C2000Ware 中为芯片提供的示例代码。
    我们无法使用 Scib、SCIC 和 SCID 发送任何信号。 使用我之前发布的代码(并测试匹配的 ScixReg)。

    如果您有任何想法、我们会立即对其进行测试!
    再次感谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    路易

    我不熟悉 Arduino 板、但请检查通信链路的一侧是否有收发器。 收发器使信号反相、当信号位于通信器件的两侧时、反相被消除。 如果一个不能取消的反转、就可以解释您看到的内容。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

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

    Ken 您好、感谢您抽出宝贵的时间。

    我在 Arduino 上看不到任何收发器。 我将数据发送到接收器。 当我尝试通过 SCI 将数据从另一个 Arduino 发送到该 Arduino (与 TI 连接的 Arduino)时、它就像一种魅力。

    让我们假设 Arduino 上有一个收发器。 我应该怎么做?

    为什么我无法在 Scib、SCIC 和 SCID 上发送任何 SCI 信号?

    再次感谢。

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

    您可能需要仔细检查波特率是否匹配。 另外、请注意、当将外设寄存器头文件与 LaunchPad 一起使用时、在\f2837xd\common\include\device.h 中、有一个针对_LAUNCHXL_F28379D 的#ifdef 预处理器指令。 您需要在项目属性中设置此预定义符号。

    在“C2000编译器”下,选择“高级选项”,然后选择“预定义符号”。 在预定义名称框(“预定义名称”)中,单击添加图标(第一个带绿色加号的图标)。 然后在“Enter value”(输入值)窗口中键入_LAUNCHXL_F28379D (请注意前导下划线)。 单击确定以包括每个名称。 项目中使用这些名称来有条件地包含特定于 LaunchPad 的外设寄存器头文件代码。 最后、单击确定以保存并关闭属性窗口。

    这将影响器件计时、这将影响波特率。 至于使用其他 SCI、您需要检查它们是否已连接到接头、并确保正确配置 GPIO。 请记住、GPIO 有两个多路复用级别。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

    - Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢! 只需添加正确的标志即可解决该问题!