功能:向PC通过SCI串口发送一个方波的坐标点数据
问题:发送中断服务程序中,+长时间延迟,PC才能正常收到数据,延迟越短,接受到数据越少,不加延时4000个字节的数据,只能收到3,4个,冰天雪地跪求大神解答啊!!!!!!!
程序如下:
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
void Scib_init();
interrupt void Scib_RXISR();
interrupt void Scib_TXISR();
int m,n,count=0;
char rdata[16];
struct Point
{
int x;
int y;
};
struct Point sdata_rect[2000];
void main(void)
{
int i=0,flag=5;
InitSysCtrl();
InitScibGpio();
DINT;
InitPieCtrl();
IFR=0x0000;
IER=0x0000;
InitPieVectTable();
Scib_init();
EALLOW;
PieVectTable.SCIRXINTB=&Scib_RXISR;
PieVectTable.SCITXINTB=&Scib_TXISR;
EDIS;
PieCtrlRegs.PIECTRL.bit.ENPIE=1;
PieCtrlRegs.PIEIER9.bit.INTx3=1;
PieCtrlRegs.PIEIER9.bit.INTx4=1;
IER|=M_INT9;
//各种复位状态的清除
ScibRegs.SCICTL1.bit.SWRESET=1;
ScibRegs.SCIFFTX.bit.SCIRST=1;
ScibRegs.SCIFFRX.bit.RXFIFORESET=1;
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;
//产生模拟方波数据
for(i=0;i<2000;i++)
{
sdata_rect[i].x=i;
if(i%200==0)
{
flag=-flag;
sdata_rect[i].y=flag+10;
}
else
{
sdata_rect[i].y=flag+10;
}
}
EINT;
ERTM;
for(;;)
{
}
}
void Scib_init()
{
ScibRegs.SCIFFTX.bit.SCIRST=0;
//8位数据,1位停止,无校验
ScibRegs.SCICCR.bit.ADDRIDLE_MODE=0;
ScibRegs.SCICCR.bit.PARITYENA=0;
ScibRegs.SCICCR.bit.STOPBITS=0;
ScibRegs.SCICCR.bit.SCICHAR=7;
//2400波特率
// ScibRegs.SCIHBAUD=0x0007;
// ScibRegs.SCILBAUD=0x00A0;
//9600波特率
ScibRegs.SCIHBAUD=0x0001;
ScibRegs.SCILBAUD=0x00E7;
//发送16级FIFO 接收1级
ScibRegs.SCIFFTX.bit.TXFFIL=16;
ScibRegs.SCIFFRX.bit.RXFFIL=1;
//引脚传输使能
ScibRegs.SCICTL1.bit.RXENA=1;
ScibRegs.SCICTL1.bit.TXENA=1;
//中断使能
ScibRegs.SCIFFRX.bit.RXFFIENA=1;
ScibRegs.SCIFFTX.bit.TXFFIENA=1;
//使能FIFO
ScibRegs.SCIFFTX.bit.SCIFFENA=1;
}
interrupt void Scib_RXISR()
{
unsigned int temp,i;
DINT;
temp=ScibRegs.SCIFFRX.bit.RXFFST;
for(i=0;i<temp;i++)
{
rdata[i]=ScibRegs.SCIRXBUF.bit.RXDT;
}
ScibRegs.SCIFFRX.bit.RXFIFORESET=0;
ScibRegs.SCIFFRX.bit.RXFIFORESET=1;
ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;
ScibRegs.SCIFFRX.bit.RXFFINTCLR=1;
PieCtrlRegs.PIEACK.all|=0x100;
EINT;
}
interrupt void Scib_TXISR()
{
char i=0;
int j,k;
DINT;
if(count>=3999)
{
PieCtrlRegs.PIEACK.all|=0x100;
return;
}
for(i=0;i<16;i++)
{
//发送一个方波数据,包括x,y点
if(count<2000)
ScibRegs.SCITXBUF=sdata_rect[count+i].x;
else
ScibRegs.SCITXBUF=sdata_rect[count-2000+i].y;
}
//这里!
for(j=0;j<1000;j++)
for(k=0;k<200;k++);
count?(count+=16):(count+=15);
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=0; //指针清0
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1; //退出复位状态
ScibRegs.SCIFFTX.bit.TXFFINTCLR=1;
PieCtrlRegs.PIEACK.all|=0x100;
EINT;
} |