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.8335万:两个类似F2.8335万定制板之间的科学转换

Guru**** 2558250 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/635083/tms320f28335-sci-transmition-between-two-similar-f28335-custom-boards

部件号:TMS320F2.8335万

大家好,

     我正在使用C28x F2.8335万 Delphino微控制器定制板,我想通过SCI接口(即SCIB在一个板上,SCIC在另一个板上)在这两个相似的板之间建立通信。

    我尝试对每个主板分别使用回路机制,工作正常。 但是,如果我移除回环并将这些自定义板相互连接,则接收端最明显的半点是错误的, 例如,当我尝试从一个主板传输数据(0xAA),并在另一个主板上接收相同的数据时,我可以接收0x5A或0x4A,而不是0xAA (正确数据)。  每次传输数据时,SCIRXBUF的帧错误位均为1。 我尝试检查微控制器TX引脚上传输的数据,请参阅随附的文件。  

    我已将 SCIFFRX缓冲器配置为 RXFFIL长度为1字节, 且RXFFIENA已启用。  

此处附加了我的项目文件。

************************* /

#IF 1.

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

#pragma code_section (InitFlash,"ramfuncs");

#define CPU_FREQ 150E6

#define LSPCLK_FREQ CPU_FREQ/4

#define SCI_FREQ 100E3

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

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

//__interrupt void scicTxFifoIsr (void);

__interrupt void scicRxFifoIsr (void);

void scic_fifo_init(void);

void InitScicGpio();

UINT16 rdataB[8];  //接收到SCI-A的数据

外部UINT16 RamfuncsLoadStart;

外部UINT16 RamfuncsLoadEnd;

外部UINT16 RamfuncsRunStart;

extern UINT16 RamfuncsLoadSize;

void delay()(无效延迟)

无符号int I,j;

对于(i = 0;i < 500;I++)

对于(j = 0;j < 500;j++);

}

UINT16 Recv_dat = 0x00;

Void主(void)

  UINT16 I;

  unsigned char SendChar= 0x00;

  InitSysCtrl();

  InitScicGpio();

  色调;

  InitPieCtrl();

  IER = 0x0000;

  IFR = 0x0000;

  InitPieVectorTable();

  Memcopy (&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);

  InitFlash();

  EALLOW;

  PieVectorTable.SCIRXINTC =&scicRxFifoIsr;

  EDIS;

  scic_fifo_init();// 初始化SCI-B

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

  PieCtrlRegs.PIEIER8.bit.INTx5 =1;   // PIE组9,INT3

  IER |= 0x080;

  EINT;

  同时(1)

  {

  对于(i = 0;i < 8;I++)

  {

  scicRegs.SCITXBUF=0x55;//SendChar;

  DELAY ();DELAY ();DELAY ();DELAY ();DELAY ();

  DELAY ();DELAY ();DELAY ();DELAY ();DELAY ();

  DELAY ();DELAY ();DELAY ();DELAY ();DELAY ();

  SendChar++;

  SendChar &= 0xFF;

  }

  DELAY ();DELAY ();DELAY ();DELAY ();DELAY ();

  }

}

__interrupt void scicRxFifoIsr (void)

  UINT16 I;

  recv_dat = ScicRegs.SCIRXBUF.all;//读取数据

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

ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志

PieCtrlRegs.PIEACK.all|=0x080;// 发出饼图

}

void scic_fifo_init()

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

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

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

  ScicRegs.SCICTL1.ALL =0x0003;  //启用TX,RX,内部SCICLK,

                  //禁用RX ERR,睡眠,TXWAKE

//  scicRegs.scicl2.bit.TXINTENA =1;

  ScicRegs.SCICT2.bit.RXBKINTENA =1;

  ScicRegs.SCIHBAUD  = 0x01;

  ScicRegs.SCILBAUD  = 0xE7;//SCI_PRD;

  ScicRegs.SCICCR.bit.LOOPBKENA =0;//启用回路

  ScicRegs.SCIFFTX.All=0xC02;

  ScicRegs.SCIFFRX.all=0x0021;

  ScicRegs.SCIFFCT.All=0x00;

  ScicRegs.SCICTL1.ALL =0x0023;   //从重置放弃SCI

 ScicRegs.SCIFFTX.Bit.TXFIFOXRESET=1;

  ScicRegs.SCIFFRX.bit.RXFIFORESET=1;

}

void 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;  //为SCIRXDC操作配置GPIO62

gpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;  //为SCITXDC操作配置GPIO63

// GpioCtrlRegs.GPBDIR.bit.GPIO62 = 0;  //为SCITXDC操作配置GPIO63

// GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1;  //为SCITXDC操作配置GPIO63

  EDIS;

}

#endif

e2e.ti.com/.../Tx_5F00_Card.c

e2e.ti.com/.../Rx_5F00_Card.c

提前感谢!

Narsimha。


#if 1#include "DSP28x_Project.h"   //设备头文件和示例include文件
#pragma code_section (InitFlash,"ramfuncs");
#define CPU_FREQ 150E6#if 1#include "DSP28x_Project.h"   // Device Headerfile and Examples include File
#pragma code_section (InitFlash,"ramfuncs");
#define CPU_FREQ 150E6#define LSPCLK_FREQ CPU_FREQ/4#define SCI_FREQ 100E3#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
//此文件中找到的函数的prototype语句。//__interrupt void scicTxFifoIsr(void);__interrupt void scicRxFifoIsr(void);void scic_fifo_init(void);void InitScicGpio();
UINT16 rdataB[8];  //接收到SCI-A的数据
extern UINT16 RamfuncsLoadStart;extern UINT16 RamfuncsLoadEnd;extern UINT16 RamfuncsRunStart;extern UINT16 RamfuncsLoadSize;
void delay(){ unsigned int I,j; for (i = 0;i < 500;i++) for (j = 0;j < 500;j++);}
UINT16 Recv_dat = 0x00;void main(void){  UINT16 I;  unsigned char SendChar= 0x00;
  InitSysCtrl();  InitScicGpio();  DINT;
  InitPieCtrl();  IER = 0x0000;  IFR = 0x0000;  InitPieVectorTable();
  Memcopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);  InitFlash();
  EALLOW;  PieVectorTable.SCIRXINTC =&scicRxFifoIsr;  EDIS;
  scic_fifo_init();// 初始化SCI-B
  PieCtrlRegs.PIECTRL.bit.ENPIE =1;  //启用PIE块  PieCtrlRegs.PIEIER8.bit.INTx5 =1;   // PIE组9,INT3  IER |=0x080;  EINT;
  while (1)  {  for (I = 0;I < 8;I++)  {  ScicRegs.SCITXBUF=0xAA;//SendChar; Delay();Delay();Delay();Delay();Delay();Delay();Delay();Delay();Delay(;SendChar;FF!=      Delay; FF!/Delay(;F=  Delay; Df;!= Delay(;FSCST;!)= Delay; Df;!= Delay(;FSCST;!= Delay;!= Delay; Df;!=           
__interrupt void scicRxFifoIsr (void){
recv_dat = ScicRegs.SCIRXBUF.all;//读取数据
ScicRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志PieCtrlRegs.PIEACK/all|=0x080; //发出PIE ack}
void scic_fifo_init(){  ScicRegs.sciccr.all =0x0007;//  1个停止位, 无回送                   //无奇偶校验,8个字符位,                   //异步模式,空闲行协议  scicRegs.scicl1.all =0x0003;  //启用TX,RX,内部SCICLK,                   //禁用RX ERR,睡眠,TXWAKE//  ScicRegs.SCICT2.bit.TXINTENA =1;  ScicRegs.SCICT2.bit.RXBKINTENA =1;  ScicRegs.SCIHBAUD  = 0x01;   ScicRegs.SCILBAUD  = 0xE7;//SCI_PRD;  ScicRegs.SCICCR.bit.LOOPBKENA =0;//启用回环  ScicRegs.SCIFFTX.all=0xC021;  ScicRegs.SCIFFRX.all=0x0021;  ScicRegs.SCIFFCT.all=0x00;
  ScicRegs.SCICTL1.ALL =0x0023;   //从Reset  ScicRegs.SCIFFTX.Bit.TXFIFOXRESET=1;  ScicRegs.SCIFFRX.bit.RXFIFORESET=1;}放弃SCI
void 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;  //为SCIRXDC操作配置GPIO62 GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;  //为SCITXDC操作配置GPIO63
// GpioCtrlRegs.GPBDIR.bit.GPIO62 = 0;  //为SCITXDC操作配置GPIO63 // GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1;  //为SCITXDC操作  EDIS配置GPIO63;}#endif

#define LSPCLK_FREQ CPU_FREQ/4#define SCI_FREQ 100E3#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
//此文件中找到的函数的prototype语句。//__interrupt void scicTxFifoIsr(void);__interrupt void scicRxFifoIsr(void);void scic_fifo_init(void);void InitScicGpio();
UINT16 rdataB[8];  //接收到SCI-A的数据
extern UINT16 RamfuncsLoadStart;extern UINT16 RamfuncsLoadEnd;extern UINT16 RamfuncsRunStart;extern UINT16 RamfuncsLoadSize;
void delay(){ unsigned int I,j; for (i = 0;i < 500;i++) for (j = 0;j < 500;j++);}
UINT16 Recv_dat = 0x00;void main(void){  UINT16 I;  unsigned char SendChar= 0x00;
  InitSysCtrl();  InitScicGpio();  DINT;
  InitPieCtrl();  IER = 0x0000;  IFR = 0x0000;  InitPieVectorTable();
  Memcopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);  InitFlash();
  EALLOW;  PieVectorTable.SCIRXINTC =&scicRxFifoIsr;//  PieVectorTable.SCITXINTB =&scibTxFifoIsr;  EDIS;
  scic_fifo_init();// 初始化SCI-B
  PieCtrlRegs.PIECTRL.bit.ENPIE =1;  //启用PIE块  PieCtrlRegs.PIEER8.bit.INTx5 =1;   // PIE组9,INT3//  PIeINTlRegs.PIEER8.bit.PIEx6=1;   // PIE组9,INT4  IER |INT80=;CtrlINT4;   
  while (1)  {  for (i = 0;i < 8;i++)  {  ScicRegs.SCITXBUF=0x55;//SendChar;  Delay();Delay();Delay();  Delay();Delay();Delay();Delay();Delay();Delay(;SCICRegs.SCICL1.bit.;FFA;);1;Delay=;SendChar!;FF!/};    Delay( Delay=;Df!;FSCIFSCIFSCIFSC;1; Delay(;FF!=;D; Delay(); Delay(); Delay(;)= Delay(;Df;F;F;F;!=0;D; Delay(;)= Delay(;FSCIFSCIFSCIFChar!/;             
__interrupt void scicRxFifoIsr (void){  UINT16 i;unsigned char dat = 0x0, dat1 = 0x0;
//  dat = ScicRegs.SCIRXST.Bit.RXRDY;//Recv_dat = ScicRegs.SCIRXEMU;//读取数据
  recv_dat = ScicRegs.SCIRXBUF.ALL;//读取数据//  dat = ScicRegs.SCIRXST.ALL;//  dat1 = ScicRegs.SCIRXST.bit.RXRDY;  for (I=0;I<8;I++){//  rdataB[I]= ScicRegs.Bit.RXRDY;}/SCIRXBf.READ数据
ScicRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志PieCtrlRegs.PIEACK/all|=0x080; //发出PIE ack}
void scic_fifo_init(){  ScicRegs.sciccr.all =0x0005;//  1个停止位, 无回送                   //无奇偶校验,8个字符位,                   //异步模式,空闲行协议  scicRegs.scicl1.all =0x0002;  //启用TX,RX,内部SCICLK,                   //禁用RX ERR,睡眠,TXWAKE//  ScicRegs.SCICT2.bit.TXINTENA =1;  ScicRegs.SCICT2.bit.RXBKINTENA =1;  ScicRegs.SCIHBAUD  = 0x01;   ScicRegs.SCILBAUD  = 0xE7;//SCI_PRD;  ScicRegs.SCICCR.bit.LOOPBKENA =0;//启用回环  ScicRegs.SCIFFTX.all=0xC021;  ScicRegs.SCIFFRX.all=0x0021;  ScicRegs.SCIFFCT.all=0x00;
  ScicRegs.SCICTL1.ALL =0x0022;   //从Reset  ScicRegs.SCIFFTX.Bit.TXFIFOXRESET=1;  ScicRegs.SCIFFRX.Bit.RXFIFORESET=1;}放弃SCI
void 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;  //为SCIRXDC操作配置GPIO62 GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;  //为SCITXDC操作配置GPIO63
// GpioCtrlRegs.GPBDIR.bit.GPIO62 = 0;  //为SCITXDC操作配置GPIO63 // GpioCtrlRegs.GPBDIR.bit.GPIO63 = 1;  //为SCITXDC操作  EDIS配置GPIO63;}#endif

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

    Narsimha,

    我没有查看您正在发送的数据,但听起来您的波特率可能已接近(可能会被整数倍数关闭),但不正确。 启用XCLKOUT并检查每个设备的频率。 验证PLL频率后,验证两个设备在运行时的波特率设置。

    一个好的调试技术是找到第三个设备(可能是PuTTY终端),并与PuTTY终端进行通信,分别与两个设备进行通信。

    此致,
    科迪