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.

[参考译文] TMS320F2.8035万:关于SCI

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/579994/tms320f28035-regarding-sci

部件号:TMS320F2.8035万

我对SCI回送测试有疑问。

请告诉我。

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

    有什么疑问?

    此致,
    Gautam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我指的是示例代码:

    Example_2803xSci_FDLB_int

    我要增加数据长度大小。
    在示例中,代码数据数组大小为:2.

    假设我想要的数据大小为5,我无法正确获取SData和RDATA。

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

    假设我需要5的数据大小,我无法正确获取SData和RDATA。

    请向我推荐。[/QUOT]

    您对实现数据大小为5的代码做了哪些更改?

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

    为了解我的问题,Pleass按如下所示查找相关代码:(示例代码原件)

     

    在底部,我提供了修改后的代码,请建议要进行的改进。

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

    //

    //!  \addtogroup F2803x_example_list

    //!  <H1>SCI数字回路与中断(scia_looping_interrupts)</H1>

    //!

    //!  此程序使用外围设备的内部回路测试模式。

    //!  除引导模式引脚配置外,没有其它硬件配置

    //!  是必需的。 同时使用中断和SCI FIFO。

    //!

    //!  发送数据流,然后与接收的数据流进行比较。

    //!  SCI-A发送的数据如下所示:\n

    //!  00 01 \n

    //!  01 02 \n

    //!  02 03 \n

    //!  .... \n

    //!  FE FF \n

    //!  FF 00 \n

    //!  等等。 \n

    //!  这种模式将永远重复。

    //!

    //!  \b监视变量\n

    //!  -\b sdataA,正在发送的数据

    //!  -\b"rdataA",已接收数据

    //!  -\b\RDATA_pointA,跟踪我们在数据流中的位置。

    //!   这用于检查传入的数据

    //

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

    //$TI发行版:F2803x C/C++头文件和外设示例V127 $

    //$发布日期:2013年3月30日$

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

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

    #define CPU_FREQ  60E6.

    #define LSPCLK_FREQ CPU_FREQ/4

    #define SCI_FREQ  100E3

    #define SCI_PRD  (LSPCLK_FREQ/(SCI_FREQ*8))-1

    //本文件中找到的函数的prototype语句。

    __interrupt void sciaTxFifoIsr (void);

    __interrupt void sciaRxFifoIsr (void);

    __interrupt void scibTxFifoIsr (void);

    __interrupt void scibRxFifoIsr (void);

    void scia_fifo_init(void);

    void scib_fifo_init(void);

    void错误(void);

    //全局变量

    UINT16 sdataA[2];  //发送SCI-A的数据

    UINT16 rdataA[2];//  接收到SCI-A的数据

    UINT16 RDATA_pointA;//用于检查接收到的数据

    Void主(void)

     UINT16 I;

    //步骤1. 初始化系统控制:

    // PLL,看门狗,启用外设时钟

    //此示例函数位于DSP2803x_sysctrl.c文件中。

     InitSysCtrl();

    //步骤2. 初始化GPIO:

    //此示例函数可在DSP2803x_GPIO.c文件和中找到

    //说明了如何将GPIO设置为其默认状态。

    // InitGpio();

    //仅为SCI-A和SCI-B功能设置GP I/O

    //此函数位于DSP2803x_Sci.c中

     InitSciGpio();

    //步骤3. 清除所有中断并初始化PIE矢量表:

    //禁用CPU中断

     色调;

    //将PIE控制寄存器初始化到其默认状态。

    //默认状态是禁用所有PIE中断和标志

    //被清除。

    //此函数位于DSP2803x_PIECTRL.c文件中。

     InitPieCtrl();

    //禁用CPU中断并清除所有CPU中断标志:

     IER = 0x0000;

     IFR = 0x0000;

    //使用指向外壳中断的指针初始化PIE矢量表

    //服务例程(ISR)。

    //这将填充整个表,即使中断也是如此

    //在本例中不使用。  这对于调试非常有用。

    // shell ISR例程可在DSP2803x_DefaultIsr.C.中找到

    //此函数位于DSP2803x_PieVect.C.中

     InitPieVectorTable();

    //本示例中使用的中断被重新映射到

    //此文件中找到ISR函数。

     EALLOW; //这是写入EALLOW保护寄存器所必需的

     PieVectorTable.SCIRXINTA =&sciaRxFifoIsr;

     PieVectorTable.SCITXINTA =&sciaTxFifoIsr;

     EDIS; //这是禁用写入EALLOW保护寄存器所必需的

    //步骤4. 初始化所有设备外围设备:

    //此函数位于DSP2803x_InitPeripherals.c中

    // InitPeripherals();//本示例不需要

     scia_fifo_init();// 初始化SCI-A

    //步骤5. 用户特定代码,启用中断:

    //初始化发送数据。  每次传输后,此数据

    //将为下一次传输更新

     用于(i = 0;I<2;I++)

     {

    //   sdataA[i]= i;

     sdataA[0]=54;

     sdataa[1]=96;

     }

     RDATA_pointA = sdataA[0];

    //启用此示例所需的中断

     PieCtrlRegs.PIECTRL.bit.ENPIE =1; //启用PIE块

     PieCtrlRegs.PIEIER9.bit.INTx1=1;  // PIE组9,INT1

     PieCtrlRegs.PIEIER9.bit.INTx2=1;  // PIE组9,INT2

     IER = 0x100;//启用CPU INT

     EINT;

    //步骤6。 空闲循环。 只需坐下来永远循环(可选):

      for (;;);

    }

    作废错误(void)

      _ASM ("  ESTOP0");//测试失败!! 停止!

      (;;);

    }

    __interrupt void sciaTxFifoIsr (void)

      UINT16 I;

      对于(i=0;i< 2;i++)

      {

       SciaRegs.SCITXBUF=sdataA[I];//  发送数据

      }

      对于(i=0;i< 2;i++)         //增量发送下一个周期的数据

      {

       sdataA[i]=(sdataA[i]+1)和0x00FF;

      }

      SciaRegs.SCIFFTX.Bit.TXFFINTCLR=1; //清除SCI中断标志

      PieCtrlRegs.PIEACK.all|=0x100;   //发出PIE ACK

    }

    __interrupt void sciaRxFifoIsr (void)

      UINT16 I;

      对于(i=0;i<2;i++)

      {

       rdataA[i]=SciaRegs.SCIRXBUF.all; //读取数据

      }

      对于(i=0;i<2;i++)           //检查收到的数据

      {

       if (rdataA[i]!=((RDATA_pointA+I)& 0x00FF)) error();

      }

      RDATA_pointA =(RDATA_pointA+1)和0x00FF;

      SciaRegs.SCIFFRX.Bit.RXFFOVRCLR=1; //清除溢出标志

      SciaRegs.SCIFFRX.Bit.RXFFINTCLR=1; //清除中断标志

      PieCtrlRegs.PIEACK.all|=0x100;   //发出pie ack

    }

    void scia_fifo_init()

     SciaRegs.SCICCR.ALL =0x0007; // 1停止位, 无回送

                     //无奇偶校验,8个字符位,

                     //异步模式,空闲线路协议

     SciaRegs.SCICTL1.all =0x0003; //启用TX,RX,内部SCICLK,

                     //禁用RX ERR,睡眠,TXWAKE

     SciaRegs.SCICTL2.bit.TXINTENA =1;

     SciaRegs.SCICTL2.bit.RXBKINTENA =1;

     SciaRegs.SCIHBAUD = 0x0000;

    // SciaRegs.SCILBAUD = SCI_PRD;

     SciaRegs.SCILBAUD = 0x00C2;

     SciaRegs.SCICCR.bit.LOOPBKENA =1;//启用回路

     SciaRegs.SCIFFTX.All=0xC022;

     SciaRegs.SCIFFRX.all=0x0022;

     SciaRegs.SCIFFCT.All=0x00;

     SciaRegs.SCICTL1.all =0x0023;  //从重置放弃SCI

     SciaRegs.SCIFFTX.Bit.TXFIFOXRESET=1;

     SciaRegs.SCIFFRX.Bit.RXFIFORESET=1;

    }

    //===========================================================================================================================================

    //没有更多。

    //===========================================================================================================================================

    注意:我在这里更改 以下行:

    UINT16 sdataA[5];  //发送SCI-A的数据

    UINT16 rdataA[5];  //收到的SCI-A数据

    UINT16 RDATA_pointA;//用于检查接收到的数据

    -->在主循环中,变化是:

    (i = 0;I<5;I++)

     {

      sdataA[i]= i;

     }

    -->在TX ISR中,更改是:

    对于(i=0;i< 5;i++)

      {

       SciaRegs.SCITXBUF=sdataA[I];//  发送数据

      }

      用于(i=0;i<5;i++)         //增量发送下一个周期的数据

      {

       sdataA[i]=(sdataA[i]+1)和0x00FF;

      }

    -->在RX ISR中,更改是:

      对于(i=0;i<5;i++)

      {

       rdataA[i]=SciaRegs.SCIRXBUF.all; //读取数据

      }

      对于(i=0;i<5;i++)           //检查收到的数据

      {

       if (rdataA[i]!=((RDATA_pointA+I)& 0x00FF)) error();

      }

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