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.

[参考译文] TMS320F28379D:将 STDOUT 重定向至 SCID 而不是 SCIA

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1119013/tms320f28379d-redirect-stdout-to-scid-instead-of-scia

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

您好!  

我想将 STDOUT 重新定向到 SCID 端口、而不是 SCIA。  因此,我按照示例中的命令编写了以下语句:  

       状态= add_device ("scid"、_ssa、SCI_open、SCI_close、SCI_read、 SCI_WRITE、 SCI_LSEEK、SCI_unlink、SCI_rename);
       FID = fopen ("scid"、"w");
       freopen ("scid:"、"w"、stdout);
       setvbuf (stdout、NULL、_IONBF、0);

       SCID_Fifo_init();//初始化 SCI FIFO
       SCID_echoback_init();//初始化 SCI 以实现 echoback

        printf ("\r\nHello World!\n\n0);  

但事实证明它不起作用。 终端控制台上未打印任何内容。 已确保波特率的设置正确。   

原因可能是什么?   

谢谢你。  

此致、Djony Pamudji。   

 

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

    尊敬的 Djony:

    SCI-A 的所有功能是否都正常工作? 我想确保初始代码正常工作。

    此致、

    Marlyn

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

    您好、Marlyn、  

    是的、使用 SCI-A 时一切都正常  

    此致、Djony。   

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

    尊敬的 Djony:

    谢谢您、我将深入了解这一点、并在明天返回给您。

    此致、

    Marlyn

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

    Djony、

    您使用的是什么示例?

    此致、

    Marlyn

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

    您好、Marlyn、位于 C2000Ware 库目录中的 Launchpad 演示示例                     : C:\ti\c2000Ware_3_04_00_00_Software\device_support\f2837xd\examples\cpu1\launchxl_f28379d\cpu01

    void scid_fifo_init()

       scidRegs.SCIFFTX.ALL = 0xE040;
       scidRegs.SCIFFRX.ALL = 0x2044;
       scidRegs.SCIFFCT.ALL = 0x0;

    void scid_echoback_init ()

       //
       //注意:SCID 外设的时钟被打开
       //在 InitSysCtrl()函数中
       //

       scidRegs.SCICCR.ALL = 0x0007;// 1停止位,无环回
                                  //无奇偶校验,8个字符位,
                                  //异步模式,空闲线协议
       scidRegs.SCICTL1.all = 0x0003;//启用 TX、RX、内部 SCICLK、
       //禁用 RX ERR、睡眠、TXWAKE
       scidRegs.SCICTL2.all = 0x0003;
       scidRegs.SCICTL2.bit.TXINTENA=1;
       scidRegs.SCICTL2.bit.RXBKINTENA=1;

       // SCI 波特率= LSPCLK /((BRRR+1)*8),其中 BRR 介于0到65535之间
       // BRR =(LSPCLK/(8 * SCI 波特率)- 1;
       //@LSPCLK = 50MHz (200MHz SYSCLK) HBAUD = 0x02且 LBAUD = 0x8B。
       //@LSPCLK = 30MHz (120MHz SYSCLK) HBAUD = 0x01且 LBAUD = 0x86。
       //
       // LSPCLK = 50MHz
       // SCID 为115200波特--> BRR =((50000000/(8*115200))-1 = 54 - 1 = 53 = 0x35
       scidRegs.SCIHBAUD.ALL = 0x0000;
       scidRegs.SCILBAUD.ALL = 0x0035;

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

    #include
    #include
    #include
    #include

    #include "F28x_Project.h"
    #include "inc/lib.h"
    #include "sci_io.h"
    //
    //函数原型
    //
    void scid_echoback_init (void);
    void scid_fifo_init (void);

    void main (void)

       char ReceivedChar;
       char *msg;
       U8跳过= 0;
       volatile int status = 0;
       volatile file *fid;
        //
        //
    //步骤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 (105、GPIO_MUX_CPU1、6);
    GPIO_SetupPinOptions (105、GPIO_INPUT、GPIO_PushPull);
    GPIO_SetupPinMux (104、GPIO_MUX_CPU1、6);
    GPIO_SetupPinOptions (104、GPIO_OUTPUT、GPIO_异 步);
    //
    //步骤3. 清除所有_interrupts 并初始化 PIE 矢量表:
    //禁用 CPU __interrupts
    //
    Dint;
    //
    //将 PIE 控制寄存器初始化为默认状态。
    //默认状态为禁用所有 PIE __interrupts 和标志
    //被清除。
    //此函数位于 F2837xD_PIECTRL.c 文件中。
    //
    InitPieCtrl();
    EALLOW;
    // ClkCfgRegs.LOSPP.bit.LSPCLKDIV = 5;// LSPCLK = 20MHz
    ClkCfgRegs.LOSPP.bit.LSPCLKDIV = 2;// LSPCLK = 50MHz
    // ClkCfgRegs.LOSPP.bit.LSPCLKDIV = 4;// LSPCLK = 25MHz
    EDIS;
    //
    //禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
    //
    IER = 0x0000;
    IFR = 0x0000;
    //
    //
    //将 STDOUT 重定向到 SCI
    //
    状态= add_device ("scid"、_ssa、SCI_open、SCI_close、SCI_read、 SCI_WRITE、
    SCI_lseek、SCI_unlink、SCI_rename);
    FID = fopen ("scid"、"w");
    freopen ("scid:"、"w"、stdout);
    setvbuf (stdout、NULL、_IONBF、0);
    //
    //步骤5. 用户特定代码:
    //
    SCID_Fifo_init();//初始化 SCI FIFO
    SCID_echoback_init();//初始化 SCI 以实现 echoback
    //
    //发送起始消息。
    //
    printf ("\r\nHello World!\n\n");

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

    尊敬的 Djony:

    只有 SCI-A 有 UART/USB 连接(特别是 GPIO42和 GPIO43、它们是 SCI-A 的 TX/RX 引脚(请见下面的原理图)。

    此致、

    Marlyn

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

    您好、Marlyn、不用担心连接问题。 我们添加了 USB-2-UART FT232RL 板、并将 其 RX 连接到 J1.10 (GPIO105)、TX 连接到 J1.9 (GPIO104)、GND 连接到 J3.22 (GND)。 我们的引脚连接已经过验证、可以正常工作。 您需要了解的是如何将 STDOUT 重新定向到 SCID 而不是 SCIA?   

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

     SCID_Fifo_init();//初始化 SCI FIFO
     SCID_echoback_init();//初始化 SCI 以实现 echoback

    这两个程序也已被证实运作良好。  

    仅以下4条(4条)线路无法正常工作:  

        状态= add_device ("scid"、_ssa、SCI_open、SCI_close、SCI_read、 SCI_WRITE、
                        SCI_lseek、SCI_unlink、SCI_rename);
        FID = fopen ("scid"、"w");
        freopen ("scid:"、"w"、stdout);
        setvbuf (stdout、NULL、_IONBF、0);

    为什么他们不工作?  

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

    Djony、

    在 sci_io.c 文件内、像 SCI_read 和 SCI_write 那样使用的函数都使用 SCI-A (示例如下)。 您是否已修改此文件以使用 SCI-D?

    此致、

    Marlyn