小弟不才 使用scib 连接232芯片 使用FIFO接收数据 中断读出 目前的问题是 FIFO似乎没用起到作用 发送一个数据 和发送6个数据 都是最后一个数据读出 但是中断赋值程序能够顺利的运行 我想问一下如何判断FIFO 中是否收到数据 主要是是我dsp中SCIFFRX数据永远都是0026(FIFO设置为6),换成485也是同样的结果,程序就是普通的赋值程序
ScibRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
ScibRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
ScibRegs.SCICTL2.all =0x0000;
ScibRegs.SCICTL2.bit.RXBKINTENA =1; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 禁止发送中断 开启接收中断
ScibRegs.SCIHBAUD =0x0003;//9600 // 波特率设置为9600
ScibRegs.SCILBAUD =0x000c;
ScibRegs.SCICCR.bit.LOOPBKENA =0; // disable loop back
ScibRegs.SCICTL1.bit.SWRESET =1; // Relinquish SCI from Reset SCI %%%%%%%%%%%%%%%%% 重启SCI
//ScibRegs.SCIFFRX.all=0x204f;
//ScibRegs.SCIFFCT.all=0x0; //这个部分注释掉
//ScibRegs.SCIFFRX.bit.RXFFIENA = 1;
ScibRegs.SCIFFTX.bit.SCIRST=0;//复位SCI发送通道
ScibRegs.SCIFFTX.bit.SCIFFENA=0;//禁用FIFO
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=0;//持续复位发送FIFO
ScibRegs.SCIFFTX.bit.TXFFINTCLR=1;//清楚发送FIFO中断标志位
ScibRegs.SCIFFTX.bit.TXFFIENA=0;//禁用发动FIFO中断
ScibRegs.SCIFFTX.bit.TXFFIL=0;//发送FIFO深度设为0;
ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清楚接收FIFO溢出标志位
ScibRegs.SCIFFRX.bit.RXFIFORESET=0;//禁用FIFO
ScibRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除接收中断标志位
ScibRegs.SCIFFRX.bit.RXFFIENA=0;//禁用接收FIFO中断
ScibRegs.SCIFFRX.bit.RXFFIL=0;//接收FIFO深度设为0
ScibRegs.SCIFFCT.bit.ABD=0;//禁用波特率自动检测
ScibRegs.SCIFFCT.bit.ABDCLR=1;//清除ABD标志位
ScibRegs.SCIFFCT.bit.CDC=0;//禁用ABD对齐
ScibRegs.SCIFFCT.bit.FFTXDLY=0;//FIFO延时0
ScibRegs.SCIFFTX.bit.SCIRST=1;//使能SCI的接收和发送通道
ScibRegs.SCICTL1.bit.SWRESET =1;//重新使能SCI
interrupt void SCIBRX_ISR(void)
{
Uint16 i;
//FIFO 满逐个接收数据
for(i=0;i<ScibRegs.SCIFFRX.bit.RXFFIL;i++)
{
bianmaqi[i]=ScibRegs.SCIRXBUF.bit.RXDT;
}
ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清除溢出标志
ScibRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志
PieCtrlRegs.PIEACK.bit.ACK9= 1;
} |