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自回归自测模式

Other Parts Discussed in Thread: CONTROLSUITE

今天学习sci  自己想写一个scia的自测模式  没有使用fifo功能  可是调试了很长时间都没有实现自回归测试  看寄存器是数据没有发送       

程序如下  希望各位帮忙看一下  谢谢

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File

#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

/*------------------------端口宏定义---------------------------*/

/*------------------------常量宏定义---------------------------*/

/*------------------------全局变量定义--------------------------*/

Uint16  errdata=0;

Uint16 sdata=0x0001;

Uint16 rdata;

/*------------------------函数声明- ---------------------------*/

void Init_Sci(void);

void Init_Fifo(void);

void Sci_xmit(Uint16 a);

void error(void);

void main(void) {

  InitSysCtrl();

  //reference led

  EALLOW;

  GpioCtrlRegs.GPBMUX2.bit.GPIO60=0;//

  GpioCtrlRegs.GPBDIR.bit.GPIO60=1;//输出

  GpioDataRegs.GPBDAT.bit.GPIO60=0;

  EDIS;

  Init_Sci();

  Init_Fifo();

  while(1)

  {

  Sci_xmit(sdata);

  while(SciaRegs.SCIRXST.bit.RXRDY!=1) {}  //cpu等待直到接收寄存器告诉它 我已经收到了 你可以来读取了

  rdata=SciaRegs.SCIRXBUF.all;

  if(rdata!= sdata) error();

  sdata++;

  }

}

void Init_Sci(void)

{

//footpin

  EALLOW;

GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0;    //使能内部的上拉功能

GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;

GpioCtrlRegs.GPBQSEL1.bit.GPIO35 = 3;

GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3;  // Asynch input GPIO28 (SCIRXDA)

GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1;   // Configure GPIO36 for SCIRXDA operation

GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1;   // Configure GPIO35 for SCITXDA operation

   EDIS;

   

//SciaRegs.SCICTL1.bit.SWRESET=0;//复位

SciaRegs.SCICTL1.bit.RXERRINTENA=0;

SciaRegs.SCICTL1.bit.TXWAKE=0;

SciaRegs.SCICTL1.bit.SLEEP=0;

//通信格式

SciaRegs.SCICCR.bit.STOPBITS=0;

SciaRegs.SCICCR.bit.PARITYENA=0;

SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0;

SciaRegs.SCICCR.bit.SCICHAR=7;

//bad configure

SciaRegs.SCIHBAUD=0x01;

SciaRegs.SCILBAUD=0xe7;

//interrupt configure  forbid

SciaRegs.SCICTL2.bit.RXBKINTENA=1;

SciaRegs.SCICTL2.bit.TXINTENA=1;

SciaRegs.SCICCR.bit.LOOPBKENA=1;

SciaRegs.SCICTL1.bit.RXENA=1;

SciaRegs.SCICTL1.bit.TXENA=1;

SciaRegs.SCICTL1.bit.SWRESET=1;

}

void Init_Fifo(void)

{

SciaRegs.SCIFFTX.all=0x800;

}

void Sci_xmit(Uint16 a)

{

while(SciaRegs.SCICTL2.bit.TXRDY==0) {}

SciaRegs.SCITXBUF=a;

}

void error(void)

{

    errdata++;

    asm("     ESTOP0"); // Test failed!! Stop!

    for (;;);

}