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.
工具/软件: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