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 FIFO 到 PC 的通信问题。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/953938/ccs-tms320f28335-sci-fifo-to-pc-communication-issue

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

工具/软件:Code Composer Studio

你(们)好 我正在运行 TMS320F28335。

现在、我尝试通过 SCI FIFO 通信将28335连接到 PC。

以上是我的系统配置。  

在 MAX3232和 RS232到 USB 器件之间绞合 RX 和 TX。

我使用 SCI-B

实际上、几个月前、我成功地通过 SCI FIFO 和"蓝牙"(无线)将28335连接到 PC。

现在、我尝试通过线缆将28335连接到 PC。

由于数据丢失问题、但我尝试使用上述配置调试相同的代码、因此无法正常工作。

请帮帮我。

谢谢你。

下面是我的 SCI 代码。(ASCII 转换)

--------------------------------------------------------------------

ScibRegs.SCICCR.all =0x0007;  // 1停止位, 无环回

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

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

ScibRegs.SCICTL1.all =0x0003; //启用 TX、RX、内部 SCICLK、

                    //禁用 RX ERR、睡眠、TXWAKE

ScibRegs.SCICTL2.bit.TXINTENA=1;

ScibRegs.SCICTL2.bit.RXBKINTENA=1;

ScibRegs.SCIHBAUD = 0x0000;

ScibRegs.SCILBAUD = 0x0027;

 

ScibRegs.SCICTL2.bit.TXRDY=0;

ScibRegs.SCIFFTX.All=0xC020;

ScibRegs.SCIFFRX.All=0x0021;

ScibRegs.SCIFFCT.All=0x00;

 

ScibRegs.SCICTL1.all =0x0023;   //从复位中撤回 SCI

ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;

ScibRegs.SCIFFRX.bit.RXFIFORESET=1;

 

소수점 6째 자리 μ s

void SendDataCal (double data1、double data2、double data3、double data4、double data5、 double data6、double data7、double data8、double data9、double data10、 double data11、double data12、double data13、double data14、double data15、 双数据16)

{                                               // PC와 통신용으로 ASCII 코드로 변환하는 함수 소수점 2번째 자리 수까지 가능(미사용)// 100의 자리,

  静态无符号 char first_shot = 1;

 

  if (data1<0)

    {

      Sdata[0]='-';

      Data1*=-1;

    }

 

  否则  Sdata[0]=((int) data1%100)/10+48;

 

  sdata[1]=((int) data1%10)/1+48;

  Sdata[2]='.';

  sdata[3]=(uint32)(data1*10)%10+48;

  sdata[4]=(uint32)(data1*100)%10+48;

  Sdata[5]=(uint32)(data1*1000)%10+48;

  sdata[6]=(uint32)(data1*10000)%10+48;

  sdata[7]=(uint32)(data1*100000)%10+48;

  Sdata[8]=(uint32)(data1*1000000)%10+48;

 

  Sdata[9]=',';

 

  if (data2<0)

    {

      Sdata[10]='-';

      Data2*=-1;

    }

 

  else  Sdata[10]=((int)data2%100)/10+48;

 

  sdata[11]=((int) data2%10)/1+48;

  Sdata[12]='.';

  sdata[13]=(uint32)(data2*10)%10+48;

  sdata[14]=(uint32)(data2*100)%10+48;

  sdata[15]=(uint32)(data2*1000)%10+48;

  sdata[16]=(uint32)(data2*10000)%10+48;

  sdata[17]=(uint32)(data2*100000)%10+48;

  Sdata[18]=(uint32)(data2*1000000)%10+48;

 

  Sdata[19]=',';

 

  if (data3<0)

    {

      Sdata[20]='-';

      Data3*=-1;

    }

 

  else  Sdata[20]=((int)data3%100)/10+48;

 

  Sdata[21]=((int) data3%10)/1+48;

  Sdata[22]='.';

  sdata[23]=(uint32)(data3*10)%10+48;

  sdata[24]=(uint32)(data3*100)%10+48;

  Sdata[25]=(uint32)(data3*1000)%10+48;

  sdata[26]=(uint32)(data3*10000)%10+48;

  sdata[27]=(uint32)(data3*100000)%10+48;

  sdata[28]=(uint32)(data3*1000000)%10+48;

 

  Sdata[29]=',';

 

  if (data4<0)

    {

      Sdata[30]='-';

      Data4*=1;

    }

 

  else  Sdata[30]=((int) data4%100)/10+48;

 

  sdata[31]=((int) data4%10)/1+48;

  Sdata[32]='.';

  sdata[33]=(uint32)(data4*10)%10+48;

  Sdata[34]=(uint32)(data4*100)%10+48;

  sdata[35]=(uint32)(data4*1000)%10+48;

  sdata[36]=(uint32)(data4*10000)%10+48;

  sdata[37]=(uint32)(data4*100000)%10+48;

  Sdata[38]=(uint32)(data4*1000000)%10+48;

 

  Sdata[39]=',';

 

  if (data5<0)

    {

      Sdata[40]='-';

      Data5*=-1;

    }

 

  else  Sdata[40]=((int) data5%100)/10+48;

 

  Sdata[41]=((int) data5%10)/1+48;

  Sdata[42]='.';

  sdata[43]=(uint32)(data5*10)%10+48;

  sdata[44]=(uint32)(data5*100)%10+48;

  sdata[45]=(uint32)(data5*1000)%10+48;

  sdata[46]=(uint32)(data5*10000)%10+48;

  sdata[47]=(uint32)(data5*100000)%10+48;

  sdata[48]=(uint32)(data5*1000000)%10+48;

 

  Sdata[49]=',';

 

  if (data6<0)

    {

      Sdata[50]='-';

      data6*=1;

    }

 

  else  Sdata[50]=((int) data6%100)/10+48;

 

  Sdata[51]=((int) data6%10)/1+48;

  Sdata[52]='.';

  sdata[53]=(uint32)(data6*10)%10+48;

  sdata[54]=(uint32)(data6*100)%10+48;

  sdata[55]=(uint32)(data6*1000)%10+48;

  sdata[56]=(uint32)(data6*10000)%10+48;

  sdata[57]=(uint32)(data6*100000)%10+48;

  sdata[58]=(uint32)(data6*1000000)%10+48;

 

  Sdata[59]=',';

 

  if (data7<0)

    {

      Sdata[60]='-';

      data7*=-1;

    }

 

  else  Sdata[60]=((int) data7%100)/10+48;

 

  sdata[61]=((int) data7%10)/1+48;

  Sdata[62]='.';

  sdata[63]=(uint32)(data7*10)%10+48;

  sdata[64]=(uint32)(data7*100)%10+48;

  sdata[65]=(uint32)(data7*1000)%10+48;

  sdata[66]=(uint32)(data7*10000)%10+48;

  sdata[67]=(uint32)(data7*100000)%10+48;

  sdata[68]=(uint32)(data7*1000000)%10+48;

 

  Sdata[69]=',';

 

  if (data8<0)

    {

      Sdata[70]='-';

      data8*=1;

    }

 

  else  Sdata[70]=((int) data8%100)/10+48;

 

  Sdata[71]=((int) data8%10)/1+48;

  Sdata[72]='.';

  sdata[73]=(uint32)(data8*10)%10+48;

  sdata[74]=(uint32)(data8*100)%10+48;

  sdata[75]=(uint32)(data8*1000)%10+48;

  sdata[76]=(uint32)(data8*10000)%10+48;

  sdata[77]=(uint32)(data8*100000)%10+48;

  sdata[78]=(uint32)(data8*1000000)%10+48;

 

  Sdata[79]=',';

 

  if (data9<0)

    {

      Sdata[80]='-';

      data9*=1;

    }

 

  else  Sdata[80]=((int) data9%100)/10+48;

 

  sdata[81]=((int) data9%10)/1+48;

  Sdata[82]='.';

  sdata[83]=(uint32)(data9*10)%10+48;

  sdata[84]=(uint32)(data9*100)%10+48;

  Sdata[85]=(uint32)(data9*1000)%10+48;

  sdata[86]=(uint32)(data9*10000)%10+48;

  sdata[87]=(uint32)(data9*100000)%10+48;

  sdata[88]=(uint32)(data9*1000000)%10+48;

 

  Sdata[89]=',';

 

  if (data10<0)

    {

      Sdata[90]='-';

      data10*=-1;

    }

 

  else  Sdata[90]=((int) data10%100)/10+48;

 

  Sdata[91]=((int) data10%10)/1+48;

  Sdata[92]='.';

  sdata[93]=(uint32)(data10*10)%10+48;

  sdata[94]=(uint32)(data10*100)%10+48;

  sdata[95]=(uint32)(data10*1000)%10+48;

  sdata[96]=(uint32)(data10*10000)%10+48;

  sdata[97]=(uint32)(data10*100000)%10+48;

  sdata[98]=(uint32)(data10*1000000)%10+48;

 

  Sdata[99]=',';

 

  if (data11<0)

    {

      Sdata[100]='-';

      data11*=1;

    }

 

  else  Sdata[100]=((int) data11%100)/10+48;

 

  Sdata[101]=((int) data11%10)/1+48;

  Sdata[102]='.';

  Sdata[103]=(uint32)(data11*10)%10+48;

  sdata[104]=(uint32)(data11*100)%10+48;

  sdata[105]=(uint32)(data11*1000)%10+48;

  sdata[106]=(uint32)(data11*10000)%10+48;

  Sdata[107]=(uint32)(data11*100000)%10+48;

  sdata[108]=(uint32)(data11*1000000)%10+48;

 

  Sdata[109]=',';

 

  if (data12<0)

    {

      Sdata[110]='-';

      data12*=1;

    }

 

  else  Sdata[110]=((int) data12%100)/10+48;

 

  sdata[111]=((int) data12%10)/1+48;

  Sdata[112]='.';

  sdata[113]=(uint32)(data12*10)%10+48;

  sdata[114]=(uint32)(data12*100)%10+48;

  sdata[115]=(uint32)(data12*1000)%10+48;

  sdata[116]=(uint32)(data12*10000)%10+48;

  sdata[117]=(uint32)(data12*100000)%10+48;

  sdata[118]=(uint32)(data12*1000000)%10+48;

 

  Sdata[119]=',';

 

  if (data13<0)

    {

      Sdata[120]='-';

      data13*=1;

    }

 

  else  Sdata[120]=((int) data13%100)/10+48;

 

  Sdata[121]=((int) data13%10)/1+48;

  Sdata[122]='.';

  Sdata[123]=(uint32)(data13*10)%10+48;

  sdata[124]=(uint32)(data13*100)%10+48;

  sdata[125]=(uint32)(data13*1000)%10+48;

  sdata[126]=(uint32)(data13*10000)%10+48;

  sdata[127]=(uint32)(data13*100000)%10+48;

  sdata[128]=(uint32)(data13*1000000)%10+48;

 

  Sdata[129]=',';

 

  if (data14<0)

    {

      Sdata[130]='-';

      data14*=1;

    }

 

  else  Sdata[130]=((int) data14%100)/10+48;

 

  sdata[131]=((int)data14%10)/1+48;

  Sdata[132]='.';

  sdata[133]=(uint32)(data14*10)%10+48;

  sdata[134]=(uint32)(data14*100)%10+48;

  sdata[135]=(uint32)(data14*1000)%10+48;

  sdata[136]=(uint32)(data14*10000)%10+48;

  sdata[137]=(uint32)(data14*100000)%10+48;

  sdata[138]=(uint32)(data14*1000000)%10+48;

 

  Sdata[139]=',';

 

  if (data15<0)

    {

      Sdata[140]='-';

      data15*=1;

    }

 

  else  Sdata[140]=((int) data15%100)/10+48;

 

  Sdata[141]=((int) data15%10)/1+48;

  Sdata[142]='.';

  sdata[143]=(uint32)(data15*10)%10+48;

  sdata[144]=(uint32)(data15*100)%10+48;

  sdata[145]=(uint32)(data15*1000)%10+48;

  sdata[146]=(uint32)(data15*10000)%10+48;

  sdata[147]=(uint32)(data15*100000)%10+48;

  sdata[148]=(uint32)(data15*1000000)%10+48;

 

  Sdata[149]=',';

 

  if (data16<0)

    {

      Sdata[150]='-';

      data16*=1;

    }

 

  否则  、Sdata[150]=data16/1000+48;

 

  sdata[151]=((int) data16%1000)/100+48;

  Sdata[152]=((int) data16%100)/10+48;

  Sdata[153]=((int)data16%10)/1+48;

  Sdata[154]='.';

  sdata[155]=(uint32)(data16*10)%10+48;

  Sdata[156]=(uint32)(data16*100)%10+48;

 

  Sdata[157]= 0x0D;

 

  if (first_shot = 1){

      ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;

      first_shot = 0;

    }

  否则、ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;

 

_interrupt void scibTxFifoIsr (void)

 

  静态无符号 char send_cnt = 0;

  unsigned char i;

 

  if (send_cnt = 0){

    for (i=0;i<16;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

 

  否则、如果(send_cnt = 1){

    for (i=16;i<32;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

 

  否则、如果(send_cnt = 2){

    for (i=32;i<48;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

  否则、如果(send_cnt = 3){

    for (i=48;i<64;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

  否则、如果(send_cnt = 4){

    for (i=64;i<80;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

  否则、如果(send_cnt = 5){

    (i=80;i<96;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

  否则、如果(send_cnt = 6){

    for (i=96;i<112;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

  否则、如果(send_cnt = 7){

    对于(i=112;i<128;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

 

  否则、如果(send_cnt = 8){

    (i=128;i<144;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

  否则、如果(send_cnt = 9){

    (i=144;i<158;i++)

      ScibRegs.SCITXBUF = Sdata[i];

 

    send_cnt = 0;

    f_dume++;

    ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;  //清除 SCI 中断标志

  }

 

 

  PieCtrlRegs.PIEACX.ALL |= PIEACK_group9;   //发出 PIE ACK

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

    您好、Joon、

    [引用 user="Joon Woo Lee"]由于数据丢失问题,但我尝试使用上述配置调试相同的代码,因此无法正常工作。

    请告诉我您已经尝试了哪些调试步骤吗? 当您说"它不起作用"时、您是否意味着您无法在 PC 上检测到设备、您可以检测到设备但没有传输数据、或者您在 PC 端观察到的数据不正确?  

    下面是一些常规调试步骤。 当我获得更多信息后、我们可以完成更具体的调试。

    1) 1)您是否看到设备管理器的"端口(COM 和 LPT)"下列出的设备? (假设您使用的是 Windows PC)。 如果是、您是否能够连接到器件?

    2) 2)我建议探测每个连接处的 TX 和 RX 引脚(如果可能)、以查看您是否可以观察所需的数据。 在每个连接上测量波特率也很好。

    3) 3)我不会使用您实施的代码、而是尝试使用我们的示例程序之一、仅用于调试目的。 如果它与示例程序配合使用、则您可以排除硬件问题、我们可以专注于您的代码。  C:\ti\c2000\C2000Ware_Version\device_support\F2833x\examples\sci_echoback

    此致、

    Marlyn