大家好,使用28335也有一段时间了,最近用串口B和C发现了一个问题,串口B是用来接收一组48个字节的数据,使用FIFO中断模式接收,串口C是用来调试参数的,用的也是FIFO中断模式,但是现在发现,一旦串口C收到数中断响应后,串口B就无法继续响应自己的中断了(数据始终在发)。如果在串口C的中断响应函数中最后重新初始化串口B就没问题,查了好久也没找到原因,求指导。
串口B和C初始化一样,下面给出串口B的代码,如下:
串口B初始化:
//SCI通信寄存器(SCICCR)
ScibRegs.SCICCR.all = 0x0007;//SCI控制寄存器1(SCICTL1) ScibRegs.SCICTL1.all = 0x0003;//SCI控制寄存器2(SCICTL2) ScibRegs.SCICTL2.all = 0x0003; //使能接收器缓冲中断RXRDY及TXRDY中断
//SCI波特-选择寄存器(SCIHBAUD,SCILBAUD) ScibRegs.SCIHBAUD = 0x0000; // 115200 baud @LSPCLK = 37.5MHz.37.5M/(SCI*8)-1
ScibRegs.SCILBAUD = 0x0028;//SCI FIFO发送寄存器(SCIFFTX) 1110 0000 0100 0000
ScibRegs.SCIFFTX.all = 0xE041; //SCI FIFO可以重新发送和接收,使能SCI FIFO增强功能,再次使能发送FIFO操作
//清除发送FIFO中断(TXFFINT)标志,禁止基于TXFFIVL匹配的发送FIFO中断,
//发送FIFO中断等级位为0
//SCI FIFO接收寄存器(SCIFFRX) 0110 0000 0110 0001
ScibRegs.SCIFFRX.all = 0x6061; //清除接收FIFO溢出(RXFFOVF)标志,再次使能接收FIFO操作,清除接收FIFO中断
//(RXFFINT)标志,使能基于RXFFIVL匹配的接收FIFO中断,
//接收FIFO中断等级位为1
//SCI FIFO控制寄存器(SCIFFCT) ScibRegs.SCIFFCT.all = 0x0; //禁用自动波特率调整,FIFO传送无延时 //SCI FIFO发送寄存器(SCIFFTX) ScibRegs.SCIFFTX.bit.TXFIFOXRESET = 1;//再次使能发送FIFO操作
//SCI FIFO接收寄存器(SCIFFRX)
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;//再次使能接收FIFO操作
//SCI控制寄存器1(SCICTL1) 0010 0011
ScibRegs.SCICTL1.all = 0x0023; // 接收错误中断禁用,重新使能SCI SCI发送特征未选择,休眠模式禁用,
//SCI发送器,接收器使能 Relinquish SCI from Reset
清中断:
void ClearScibIntFlag()
{
ScibRegs.SCIFFRX.bit.RXFFOVRCLR = 1; // Clear Overflow flag
ScibRegs.SCIFFRX.bit.RXFFINTCLR = 1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9; // Issue PIE ack
}
Chen Jones:
应该是中断的问题,楼主检查一下中断。
另外,可以先不使用中断试试。
另外,也可以先不使用FIFO,来一个字节中断一次,因为FIFO必须等一个FIFO满了之后(达到设定长度之后)才能发生中断。