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.

[参考译文] CCS/TMS320F28335:通过 SCI 将数据从 PC 传输到 PCB

Guru**** 2524460 points
Other Parts Discussed in Thread: MAX3221, C2000WARE, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/687805/ccs-tms320f28335-to-trsmit-data-from-pc-to-pcb-via-sci

器件型号:TMS320F28335
主题中讨论的其他器件:MAX3221C2000WAREcontrolSUITE

工具/软件:Code Composer Studio

特别先生,

我想通过带 UART 的 RS232[MAX3221]将数据从 PC 传输到 PCB。在以下代码中,我应该做些什么更改?。以前,我要将数据从 PCB 传输到 PC .code

SendChar = 0;

while (1)

SCIC_xmit (0xAB);

while (ScicRegs.SCIFFRX.bit.RXFFST!= 1);
ReceivedChar = ScicRegs.SCIRXBUF.ALL;

if (ReceivedChar!= SendChar) error ();

//移动到下一个字符并重复测试
SendChar++;
//将字符限制为8位
SendChar &= 0x00FF;
LoopCount++;

delay();

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

    从您的帖子中、您似乎成功地将数据从设备传输到 PC。 现在、您需要将数据从 PC 接收到器件。 在 SCI 内、发送和接收可被视为两个独立的块。 请参考 scia_loopback 代码的接收部分、该部分可在 C2000Ware 中的以下位置找到:

    C:\ti\c2000\C2000Ware_ \device_support\F2833x\examples\scia_loopback

    此外、以下帖子也可能对您有用:

    e2e.ti.com/.../317141 SCI 接收

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

    - Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何将数据从 PC 传输到 PCB ?告诉我过程

    下面、我提供了 PCB 与 PC 之间传输的屏幕截图、如下所示、还告诉我它是否正确? 为了将数据从 PC 传输到 PCB、我必须对 SCia_loopback 示例代码进行哪些修改?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    #include "DSP28x_Project.h"
    
    void scia_loopback _init (void);
    void scia_fifo_init (void);
    void scib_loopback _init (void);
    void scib_fifo_init (void);
    void SCIC_loopback _init (void);
    void scic_fifo_init (void);
    
    void scia_xmit (int a);
    void scib_xmit (int a);
    void scic_xmit (int a);
    
    void delay ();
    uint16 rdataA[8];
    void error (void);
    uint16 LoopCount;
    uint16 ErrorCount;
    
    
    void main (void)
    {
    uint16 SendChar;
    uint16 ReceivedChar;
    
    InitSysCtrl();
    InitScio();
    
    DINT;
    IER = 0x0000;
    IFR = 0x0000;
    
    InitPieVectTable();
    
    SCIC_LOOP_INIT();
    SCIC_fifo_init();
    SendChar = 0;
    
    while (1)
    {
    SCIC_xmit (0xAB);
    
    while (ScicRegs.SCIFFRX.bit.RXFFST!= 1);
    ReceivedChar = ScicRegs.SCIRXBUF.ALL;
    
    if (ReceivedChar!= SendChar) error ();
    
    //移动到下一个字符并重复测试
    SendChar++;
    //将字符限制为8位
    SendChar &= 0x00FF;
    // LoopCount++;
    
    SCIC_xmit (ReceivedChar);
    // LoopCount++;*/
    delay();
    
    }
    }
    
    void delay ()
    {
    unsigned int i;
    for (i = 0;i < 1000;i++);
    }
    
    void scia_loopback _init ()
    {
    
    SciaRegs.SCICCR.all =0x0007;//Idlee-line mode、// 1停止位、无环回//无奇偶校验、8个字符位、SciaRegs.SCICK/
    全部禁用 TXICK/ RX、0x000LICR1/、TXICR0、0xWRX /全部启用 TXICK/ LICK/睡眠
    SciaRegs.SCIHBAUD = 0x0000;
    SciaRegs.SCILBAUD = 0x000F;//BRR=15 (0xFF)、SCI 异步波特=292
    ScibRegs.SCICCR.bit.LOOPBKENA=1;///回路测试模式启用 bit 4[SCICCR]
    SciaRegs.SCICTL1.all =0x0023;//通过向 SW 复位 bit 5[SCICTL1]写入1来重新启用 SCI
    }//=====================
    初始化 SCI FIFO =========================== //
    void scia_fifo_init()
    {
    SciaRegs.SCIFFTX.All=0xE040;
    SciaRegs.SCIFFRX.All=0x204f;
    SciaRegs.SCIFFCT.ALL=0x0;
    }
    
    void scib_loopback _init ()
    {
    
    scibRegs.SCICCR.all =0x0007;//空闲线模式,// 1停止位,无环回//无奇偶校验,8个字符位,
    ScibRegs.SCICKE.ALL =0x0003;//启用 TXICRX,内部 SCWAK,禁用 TXICL1,禁用 TXICRX
    ScibRegs.SCIHBAUD = 0x0000;
    ScibRegs.SCILBAUD =0x000F;//BRR=15 (0xFF)、SCI 异步 Baud=292
    SCICCR.bit.LOOPBKENA=0;//Loop Back 测试模式启用 bit4[SCICCR]
    SCICCR.SCICICCTI.ALL =0x0023;//RE= 1 = ENTRY= 1 = ENTRY= ENTRY= 1 [SCICTL1 = 1 = SCICTL1
    
    初始化 SCI FIFO =========================== //
    void scib_fifo_init()
    {
    ScibRegs.SCIFFTX.All=0xE040;
    ScibRegs.SCIFFRX.All=0x204f;
    ScibRegs.SCIFFCT.ALL=0x0;
    }
    
    void SCIC_loopback _init ()
    {
    
    ScicRegs.SCICCR.all =0x0007;//空闲线模式,// 1停止位,无环回//无奇偶校验,8个字符位,
    scicRegs.SCICTL1.all =0x0003;//启用 TX、RX、内部 SCICLK、//禁用 RX ERR、睡眠、TXWAKE
    ScicRegs.SCIHBAUD = 0x0000;
    ScicRegs.SCILBAUD = 0x000F;///BRR=15 (0xFF)、SCI 异步 Baud=292
    ScicRegs.SCICCR.bit.LOOPBKENA=1;//回送测试模式禁用 bit 4[SCICCR]
    ScicRegs.SCICTL1.all =0x0023;//将 SCICTL1== 1重置为1;//从 SCICTL1=/ RE= 1;//从 SCICTL1=/ RE= 1:1;//从 SCICTL1=/ RE= 1
    
    
    初始化 SCI FIFO =========================== //
    void scic_fifo_init ()
    {
    ScicRegs.SCIFFTX.All=0xE040;
    ScicRegs.SCIFFRX.All=0x204f;
    scicRegs.SCIFFCT.ALL=0x0;
    }
    
    void scia_xmit (int a)////从 SCI
    发送字符{
    SciaRegs.SCITXBUF=a;
    }
    
    void scib_xmit (int a)////从 SCI 发送字符
    {
    ScibRegs.SCITXBUF=A;
    }
    
    void SCIC_xmit (int a)////从 SCI'
    {
    scicRegs.SCITXBUF=A;
    }
    void 错误()
    {
    ErrorCount++;
    //__asm (" ESTOP0");//取消注释以在此处停止测试
    //针对(;);
    } 

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

    要了解您的代码是否正常工作、请检查接收寄存器是否包含您发送的代码。 我还建议将您的代码与另一个 C2000Ware 示例进行比较:

    C:\ti\c2000\C2000Ware_ \device_support\F2833x\examples\scia_Autobaud

    以及 SCI 的其他两个示例、并参考文档文件夹以了解相关说明。

    一般而言、我们不会查看或调试用户代码、但我们会就与我们的器件和开发工具相关的特定问题向您提供帮助。 这包括在使用我们的器件进行设计时阐明任何位、寄存器或功能的行为。 请注意、所有外设在 C2000Ware/controlSUITE 中都有示例代码。 我们建议将您的代码与示例代码进行比较、以确定问题可能存在的位置。 建议遵循标准和逻辑调试技术。 请继续调试您的代码、并随时使用此论坛提出具体问题。 问题越具体、我们就能越好地帮助您。

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

    - Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的先生:
    我的任务是通过 SCI 在 PC 和 PCB 之间发送字符。只需查看 SCI 的行为。请在 controlsuite 中建议正确的示例代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mahesh、

    SCI 的所有 F28335示例代码均可在 C2000Ware 中找到、网址为:

    C:\ti\c2000\C2000Ware_ \device_support\F2833x\examples\

    然后查看以下文件夹:

    \sci_autobaud
    \sci_echoback
    \scia_loopback
    \scia_loopback_interrupts

    此外、请参阅"TMS320x2833x、2823x 串行通信接口(SCI)参考指南"、网址为:

    www.ti.com/lit/SPRUFZ5

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

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

    我正在进行 UART (SCI)通信。 PLZ 建议我在 GPIO 初始化之后是否正确

    对于  GPIO62 (SCIRXDC)--> ,GPIO63 (SCITXDC)--- >

    GpioCtrlRegs.GPBDIR.bit.GPIO62 =0;//RX--I/P
    GpioCtrlRegs.GPBDIR.bit.GPIO63 =1;//TX---O/P ,初始化是否正确?

    EALLOW;


    GpioCtrlRegs.GPBPUD.bit.GPIO62=0;//启用 GPIO62的上拉电阻器(SCIRXDC)
    GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;//启用 GPIO63的上拉电阻器(SCITXDC)

    GpioCtrlRegs.GPBQSEL2.bit.GPIO62=3;//异步输入 GPIO62 (SCIRXDC)

    GpioCtrlRegs.GPBMUX2.bit.GPIO62=1;//将 GPIO62配置为 SCIRXDC 操作
    GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;//将 GPIO63配置为 SCITXDC 操作

    GpioCtrlRegs.GPBDIR.bit.GPIO62 =0;//RX--I/P
    GpioCtrlRegs.GPBDIR.bit.GPIO63 =1;//TX---O/P

    EDIS;

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

    当引脚配置为 GPIO (MUX = 00)时、设置方向仅适用。 除此之外,您拥有的代码是正确的,完全匹配在-中找到的 InitScicGpio()。

    C:\ti\c2000\C2000Ware_ \device_support\F2833x\common\source\DSP2833x_Sci.c

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

    - Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的先生:
    在进行 UART 通信时,是否需要初始化 GPIO 的方向?
    那么、我已经按如下方式初始化 GPIO:这是正确的还是不正确的?

    GpioCtrlRegs.GPBDIR.bit.GPIO62 =0;//RX--I/P
    GpioCtrlRegs.GPBDIR.bit.GPIO63 =1;//TX---O/P
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Mahesh Joshi"]在进行 UART 通信时,是否需要初始化 GPIO 的方向?

    不需要。 您只需调用 InitSciaGpio()/InitScibGpio()例程即可。 您可以检查例程中是否存在所需的初值。

    此致、

    Gautam

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

    尊敬的先生:

         下面我已初始 化 UART 的 GPIO。 是否正确?我不理解“您可以检查例程中是否有必要的信息”。

    EALLOW;

    GpioCtrlRegs.GPBPUD.bit.GPIO62=0;//启用 GPIO62的上拉电阻器(SCIRXDC)
    GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;//启用 GPIO63的上拉电阻器(SCITXDC)

    GpioCtrlRegs.GPBQSEL2.bit.GPIO62=3;//异步输入 GPIO62 (SCIRXDC)

    GpioCtrlRegs.GPBMUX2.bit.GPIO62=1;//将 GPIO62配置为 SCIRXDC 操作
    GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;//将 GPIO63配置为 SCITXDC 操作

    EDIS;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    配置正确。 这些配置可在 DSP2833x_Sci.c 中随时获得
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mahesh、

    请阅读我之前的答复。 它特别指出、设置方向仅适用于引脚配置为 GPIO (MUX = 00)的情况。 除此之外,您拥有的代码是正确的,完全匹配在-中找到的 InitScicGpio()。

    C:\ti\c2000\C2000Ware_ \device_support\F2833x\common\source\DSP2833x_Sci.c

    - Ken
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的先生:
    感谢您的回复。 现在、我将数据从 PC (即 Hercules)传输到 PCB。但它没有输入到 interrupt.plz 指南中正确的路径。我共享了我的代码:


    #include "DSP28x_Project.h" //设备头文件和示例包括文件

    #pragma CODE_SECTION (InitFlash、"ramfuncs");
    /*
    #define CPU_FREQ150E6
    #define LSPCLK_FREQ CPU_FREQ/4
    #define SCI_FREQ100E3
    #define SCI_PRD(LSPCLK_FREQ/(SCI_FREQ*8))-1
    *


    void Send_Char_PortC( unsigned char Byte );

    //此文件中找到的函数的原型语句。
    //_interrupt void scicTxFifoIsr (void);
    _interrupt void scicRxFifoIsr (void);
    void scic_fifo_init (void);
    void InitScicGpio();

    uint16 rdataC[16];//针对 SCI-C 接收到的数据

    extern UINT16 RamfuncsLoadStart;
    extern UINT16 RamfuncsLoadEnd;
    extern UINT16 RamfuncsRunStart;
    extern UINT16 RamfuncsLoadSize;

    空延迟()

    unsigned int i、j;
    对于(i = 0;i < 500;i++)
    对于(j = 0;j < 500;j++);


    void main (void)

    // uint16 i;
    // unsigned char SendChar = 0xAA;

    InitSysCtrl();
    InitScicGpio();
    Dint;

    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();

    Memcopy (&RamfuncsLoadStart、&RamfuncsLoadEnd、&RamfuncsRunStart);
    InitFlash();

    EALLOW;
    PieVectTable.SCIRXINTC =&scicRxFifoIsr;
    // PieVectTable.SCITXINTC =&scibTxFifoIsr;
    EDIS;

    SCIC_fifo_init ();//初始化 SCI-C

    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE 块
    PieCtrlRegs.PIEIER8.bit.INTx5 = 1; // PIE 组8、INT5[8---5--Rx]
    // PieCtrlRegs.PIEIER8.bit.INTx6=1; // PIE 组8、INT6[8---6---Tx]
    IER = 0x080;
    EINT;

    while (1)

    SEND_Char_PortC (0xAA);
    //ScicRegs.SCITXBUF=SendChar;

    // SendChar++;
    // SendChar &= 0xFF;
    delay();delay();delay();delay();




    /*
    _interrupt void scicTxFifoIsr (void)

    uint16 i;
    for (i=0;i< 8;i++)

    scicRegs.SCITXBUF=sdataB[i]; //发送数据


    for (i=0;i< 8;i++) //递增发送下一个周期的数据

    sdataB[i]=(sdataB[i]-1)和0x00FF;



    scicRegs.SCIFFTX.bit.TXFFINTCLR=1;//清除中断标志
    PieCtrlRegs.PIEACK.All|=0x100; //发出 PIE ACK

    *
    _interrupt void scicRxFifoIsr (void)

    // uint16 i;
    unsigned char i=0;
    for (i=0;i<=7;i++)

    rdataC[i]=ScicRegs.SCIRXBUF.ALL;//读取数据


    ScicRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清除溢出标志
    scicRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志
    //PieCtrlRegs.PIEACK.All|=0x100;//发出 PIE ACK
    PieCtrlRegs.PIEACK.All= PIEACK_group8;


    void scic_fifo_init ()

    ScicRegs.SCICCR.all =0x0007;// 1停止位,无环回
    //无奇偶校验,8个字符位,
    //异步模式,空闲线协议
    scicRegs.SCICTL1.all =0x0003;//启用 TX、RX、内部 SCICLK、
    //禁用 RX ERR、睡眠、TXWAKE
    scicRegs.SCICTL2.bit.TXINTENA=1;
    ScicRegs.SCICTL2.bit.RXBKINTENA=1;
    ScicRegs.SCIHBAUD = 0x0001;// 0x0001
    ScicRegs.SCILBAUD = 0x00E7;//
    // ScicRegs.SCICCR.bit.LOOPBKENA=1;//启用回路
    ScicRegs.SCIFFTX.All=0xC021;//0xC021//0xC060
    ScicRegs.SCIFFRX.All=0x0028;//0x0028/// 0xE065
    ScicRegs.SCIFFCT.All=0x00;

    ScicRegs.SCICTL1.ALL =0x0023; //从复位中撤回 SCI
    scicRegs.SCIFFTX.bit.TXFIFOXRESET=1;
    ScicRegs.SCIFFRX.bit.RXFIFORESET=1;


    空 InitScicGpio()

    EALLOW;

    GpioCtrlRegs.GPBPUD.bit.GPIO62=0;//启用 GPIO62的上拉电阻器(SCIRXDC)
    GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;//启用 GPIO63的上拉电阻器(SCITXDC)

    GpioCtrlRegs.GPBQSEL2.bit.GPIO62=3;//异步输入 GPIO62 (SCIRXDC)

    GpioCtrlRegs.GPBMUX2.bit.GPIO62=1;//将 GPIO62配置为 SCIRXDC 操作
    GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;//将 GPIO63配置为 SCITXDC 操作

    GpioCtrlRegs.GPBDIR.bit.GPIO62 =0;//RX--I/P
    GpioCtrlRegs.GPBDIR.bit.GPIO63 =1;//TX---O/P

    EDIS;


    void Send_Char_PortC(无符号字符字节)

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

    Mahesh、

    如果您没有进入 ISR、请检查以确保中断已启用。 您已注释掉一些代码行、请仔细检查是否需要这些代码行。 此外、检查是否为相应的 ISR 启用了 INTM、IER 和 PIEIER。 从之前的帖子中、设置 GPIO 方向仅适用于引脚配置为 GPIO (MUX = 00)的情况。

    - Ken

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

    我们上次听说过您、已经有一段时间了。 因此、我们假设您能够解决您的问题。 如果情况并非如此,请拒绝此解决方案或回复此主题。 如果此主题被锁定、请制作一个描述问题当前状态的新主题。 谢谢你。

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

    尊敬的先生:
    我尝试进行 SCI 通信。问题是当我从 hercules 发送数据(8位)时,它不会进入 receive_interrupt,在这种情况下,我应该怎么办?