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 从 TMS320F28335向蓝牙发送数字?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/951804/ccs-tms320f28335-how-to-send-a-digits-through-sci-fifo-from-tms320f28335-to-bluetooth

器件型号:TMS320F28335

工具/软件:Code Composer Studio

你(们)好 我正在使用 TMS320F28335。

我正在使用 SCI FIFO 通信向蓝牙发送数据。

它目前正在发送1、000个席位和第二个十进制位置。

我想用小数点表示自己的位置。

据我所知、16位数据被填充、然后中断被激活。

我可以调节位数的大小吗?  

//////////////////////////////////////////////////////////////////////// 将十进制数据发送到 ASCII ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void SendDataCal (double data、double data2、double data3、double data4、double data5、 double data6、double data7、double data8、double data9、double data10)
{  
静态无符号 char first_shot = 1;

if (数据<0)

Sdata[0]='-';
data*=1;

否则、Sdata[0]= data/1000+48;

sdata[1]=((int) data%1000)/100+48;
sdata[2]=((int)data%100)/10+48;
Sdata[3]=((int) data%10)/1+48;
Sdata[4]='.';
Sdata[5]=(uint32)(data*10)%10+48;
Sdata[6]=(uint32)(data*100)%10+48;

Sdata[7]=',';

if (data2<0)

Sdata[8]='-';
Data2*=-1;

否则、Sdata[8]= data2/1000+48;

Sdata[9]=((int) data2%1000)/100+48;
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]='、';

if (data3<0)

Sdata[16]='-';
Data3*=-1;

否则 Sdata[16]=data3/1000+48;

sdata[17]=((int) data3%1000)/100+48;
Sdata[18]=((int) data3%100)/10+48;
Sdata[19]=((int) data3%10)/1+48;
Sdata[20]='.';
Sdata[21]=(uint32)(data3*10)%10+48;
sdata[22]=(uint32)(data3*100)%10+48;

Sdata[23]=',';

if (data4<0)

Sdata[24]='-';
Data4*=1;

否则、Sdata[24]=data4/1000+48;

sdata[25]=((int) data4%1000)/100+48;
sdata[26]=((int) data4%100)/10+48;
sdata[27]=((int) data4%10)/1+48;
Sdata[28]='.';
Sdata[29]=(uint32)(data4*10)%10+48;
sdata[30]=(uint32)(data4*100)%10+48;

Sdata[31]=',';

if (data5<0)

Sdata[32]='-';
Data5*=-1;

否则 Sdata[32]=data5/1000+48;

sdata[33]=((int) data5%1000)/100+48;
Sdata[34]=((int) data5%100)/10+48;
sdata[35]=((int) data5%10)/1+48;
Sdata[36]='.';
sdata[37]=(uint32)(data5*10)%10+48;
Sdata[38]=(uint32)(data5*100)%10+48;

Sdata[39]=',';

if (data6<0)

Sdata[40]='-';
data6*=1;

否则 Sdata[40]=data6/1000+48;

sdata[41]=((int) data6%1000)/100+48;
sdata[42]=((int) data6%100)/10+48;
Sdata[43]=((int) data6%10)/1+48;
Sdata[44]='.';
sdata[45]=(uint32)(data6*10)%10+48;
sdata[46]=(uint32)(data6*100)%10+48;

Sdata[47]=',';

if (data7<0)

Sdata[48]='-';
data7*=-1;

否则 Sdata[48]=data7/1000+48;

Sdata[49]=((int) data7%1000)/100+48;
sdata[50]=((int) data7%100)/10+48;
Sdata[51]=((int) data7%10)/1+48;
Sdata[52]='.';
sdata[53]=(uint32)(data7*10)%10+48;
sdata[54]=(uint32)(data7*100)%10+48;

Sdata[55]=',';

if (data8<0)

Sdata[56]='-';
data7*=-1;

否则 Sdata[56]=data8/1000+48;

sdata[57]=((int) data8%1000)/100+48;
sdata[58]=((int) data8%100)/10+48;
Sdata[59]=((int) data8%10)/1+48;
Sdata[60]='.';
sdata[61]=(uint32)(data8*10)%10+48;
sdata[62]=(uint32)(data8*100)%10+48;

Sdata[63]=',';

if (data9<0)

Sdata[64]='-';
data9*=1;

否则 Sdata[64]=data9/1000+48;

sdata[65]=((int) data9%1000)/100+48;
sdata[66]=((int) data9%100)/10+48;
sdata[67]=((int) data9%10)/1+48;
Sdata[68]='.';
sdata[69]=(uint32)(data9*10)%10+48;
sdata[70]=(uint32)(data9*100)%10+48;

Sdata[71]=',';

if (data10<0)

Sdata[72]='-';
data10*=-1;

否则,Sdata[72]=data10/1000+48;

sdata[73]=((int) data10%1000)/100+48;
sdata[74]=((int) data10%100)/10+48;
sdata[75]=((int) data10%10)/1+48;
Sdata[76]='.';
sdata[77]=(uint32)(data10*10)%10+48;
sdata[78]=(uint32)(data10*100)%10+48;

Sdata[79]=0x0D;
if (first_shot = 1){
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;
first_shot = 0;

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

//////////////////////////////////////////////////////////////////////////////////// SCI FIFO 中断////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

_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 = 0;
f_dume++;
ScibRegs.SCIFFTX.bit.TXFFINTCLR = 1;//清除 SCI 中断标志

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

////////////////////////////////////////////////////////////////////////////////////////// SCI FIFO 设置////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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;

谢谢你。

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

    你好、Joon Woo、

    [引用 user="Joon Woo Lee">我能否调节位数的大小?  [/报价]

    您是否会扩展您的意思、可能会提供一个示例?  SCI 仅传输和接收8位字符。  

    此致、

    Marlyn