最近刚接触F28335的SCI模块,在调试的过程中遇到一些问题,望各位前辈能指点指点
1. 部分寄存器位的配置不清楚
1.1 初始化FIFO, 在使用标志清除位 时,用不用先置1后清零,如下所示
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1; //清除接收FIFO溢出标志位
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 0; //清除接收FIFO溢出标志位
SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1; //发送FIFO清除位 0:无效 1:清除FIFO中断标志位
SciaRegs.SCIFFTX.bit.TXFFINTCLR = 0; //发送FIFO清除位 0:无效 1:清除FIFO中断标志位
1.2 初始化FIFO,在使用复位位是,用不用先清0后置1,这样做有何意义,如下所示
SciaRegs.SCIFFTX.bit.SCIRST = 0; //SCI复位
SciaRegs.SCIFFTX.bit.SCIRST = 1; //SCI使能
SciaRegs.SCIFFRX.bit.RXFIFORESET = 0; //复位接收FIFO操作
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1; //使能接收FIFO操作
2. 将串口配置成FIFO模式
2.1 使用中断处理,中断产生的条件是什么?是RXFFST(FIFO中断等级标志)和RXFFIL(FIFO中断等级设定位)相等时才发生中断吗?还是前者小于等于后者就可以发生中断?
2.2 我的接收中断深度设定的是4,即SciaRegs.SCIFFRX.bit.RXFFIL = 4; //接收 FIFO 存储深度设置位
我想只有FIFO存储满来自RXBUF送来的4个字节的数据时,程序才会进中断啊,为什么将rdataA[i]=SciaRegs.SCIRXBUF.all,写在中断处理函数中,程序依然可以进中断,并且可以正常接收数据。
interrupt void sciaRxFifoIsr(void)
{
Uint16 i;
for(i=0;i<4;i++)
{
rdataA[i]=SciaRegs.SCIRXBUF.all; // Read data,rdataA[i]是定义的一个接收数组
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack
}