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.

[参考译文] SCI_ECHOBACK 采样程序不起作用

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/678610/sci_echoback-sample-program-does-not-work

器件型号:LANCHXL-F23877S

我使用了 sci_echoback 示例程序并将 SCI-A 端口更改为 GPIO84/85。 但仍然无法与主机 PC 通信。 我的代码如下所示

void main (void)

uint16 ReceivedChar;
char *msg;

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

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

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


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

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

//
//禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
//
IER = 0x0000;
IFR = 0x0000;

//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是__interrupt
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xS_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xS_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;

//
//文件结束
//

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

    您是否能够观察到 DSO 上 TX 线(GPIO84)上的发射脉冲?

    此致、
    Gautam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、谢谢。 我没有 DSO、但有任何人都有示例 SCI 程序可与主机 PC 配合使用。
    谢谢、
    Michael
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Michael,

    您是否使用 launchpad LAUNCHXL-F28377S 来测试代码?

    您是否将 MCU 连接到主机 PC?


    根据 TRM,使用 gpio84和 gpio85时,GPIO 多路复用器设置不正确。


    将 GPIO_SetupPinMux (84、GPIO_MUX_CPU1、1);更改为 GPIO_SetupPinMux (84、GPIO_MUX_CPU1、 5);
    将 GPIO_SetupPinMux (85、GPIO_MUX_CPU1、1);更改为 GPIO_SetupPinMux (85、GPIO_MUX_CPU1、 5);

    此致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我将 GPIO_MUX_CPU1从1更改为5、并将 PC 波特率更改为4800、然后我可以在超级终端上看到消息显示。 我现在唯一的问题是有时候、它会回声、有些则不会回声。 我拔下 USB 并重试、有时它会回显。 您知道原因吗?
    谢谢、
    Michael
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michael、

     理想情况下,这 可能是由于波特率或连接问题造成的。

    为什么将 PC 波特率修改为4800? 它不应该是9600吗?

    根据您的代码、波特率设置为9600。

    // SCIA 为9600波特
    //@LSPCLK = 50MHz (200MHz SYSCLK) HBAUD = 0x02且 LBAUD = 0x8B。

    您 可以使用一个超级终端设置文件 SCI_96.HT。 在 C2000ware 中找到

    c2000ware\device_support\f2837xs\examples\cpu1\sci_echoback\cpu01

    此致。