主芯片是tms320f2812,在我的程序里既有scia模块(RS232通讯,FIFO中断发送和接收),又有scib(RS485,FIFO中断发送和接收),两个模块的初始化配置是一样的,打开scia模块和scib的发送与接收使能,scia不正常,程序一直在执行scib的中断发送程序,关掉scib的接收使能,scia的程序完全正常。不知道这情况是什么原因
下面是我对scia和scib的初始化配置:
void InitSci(void)
{
SciaRegs.SCICCR.bit.STOPBITS=0; //1位停止位
SciaRegs.SCICCR.bit.PARITYENA=0; //禁止极性功能
SciaRegs.SCICCR.bit.LOOPBKENA=0; //禁止回送测试模式功能
SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0; //空闲线模式
SciaRegs.SCICCR.bit.SCICHAR=7; //8位数据位
SciaRegs.SCICTL1.bit.TXENA=1; //SCIA模块的发送使能
SciaRegs.SCICTL1.bit.RXENA=1; //SCIA模块的接收使能
SciaRegs.SCICTL2.bit.TXRDY = 0; //设置SCITXBUF为满
SciaRegs.SCICTL2.bit.TXEMPTY = 0; //发送空中断
SciaRegs.SCICTL2.bit.RXBKINTENA = 1; //SCIRXBUF中断
SciaRegs.SCICTL2.bit.TXINTENA = 1; //SCITXBUF中断
SciaRegs.SCIHBAUD=0;
SciaRegs.SCILBAUD=0xF3; //波特率为19200
SciaRegs.SCIFFTX.bit.SCIRST = 1; //SCI的FIFO重新开始发送和接收
SciaRegs.SCIFFTX.bit.SCIFFENA=1; //使能SCI FIFO的功能
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=0; //不重新使能发送FIFO的操作
SciaRegs.SCIFFTX.bit.TXFFST=0; //发送FIFO队列为空
SciaRegs.SCIFFTX.bit.TXFFINT=0; //没有产生发送FIFO中断
SciaRegs.SCIFFTX.bit.TXINTCLR=0; //不清除TXFFINT的标志位
SciaRegs.SCIFFTX.bit.TXFFIENA=1; //使能发送FIFO中断
SciaRegs.SCIFFTX.bit.TXFFILIL=0; //发送中断级别为0,也就是当发送FIFO为空时发生中断
SciaRegs.SCIFFRX.bit.RXFFOVF=0; //接收FIFO没有溢出
SciaRegs.SCIFFRX.bit.RXOVF_CLR=0; //对RXFFOVF标志位没有影响
SciaRegs.SCIFFRX.bit.RXFIFORESET=0; //不重新使能接收FIFO的操作
SciaRegs.SCIFFRX.bit.RXFIFST=0; //接收FIFO队列为空
SciaRegs.SCIFFRX.bit.RXFFINT=0; //不产生接收中断
SciaRegs.SCIFFRX.bit.RXFFINTCLR=0; //不清除接收中断标志位
SciaRegs.SCIFFRX.bit.RXFFIENA=1; //使能FIFO接收中断
SciaRegs.SCIFFRX.bit.RXFFIL=9; //级别为8.也就是说当接收FIFO中有8个字符时发生中断
SciaRegs.SCIFFCT.all = 0x0000; //禁止波特率自动校验,0延迟
SciaRegs.SCICTL1.bit.RXERRINTENA = 0; //禁止接收错误中断
SciaRegs.SCICTL1.bit.SWRESET=1; //重启SCI
SciaRegs.SCICTL1.bit.TXWAKE = 0; //禁止TxWake
SciaRegs.SCICTL1.bit.SLEEP = 0; //禁止睡眠
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //重新使能发送FIFO的操作
SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //重新使能接收FIFO的操作
ScibRegs.SCICCR.bit.STOPBITS=0; //1位停止位
ScibRegs.SCICCR.bit.PARITYENA=0; //禁止极性功能
ScibRegs.SCICCR.bit.LOOPBKENA=0; //禁止回送测试模式功能
ScibRegs.SCICCR.bit.ADDRIDLE_MODE=0; //空闲线模式
ScibRegs.SCICCR.bit.SCICHAR=7; //8位数据位
ScibRegs.SCICTL1.bit.TXENA=1; //SCIB模块的发送不使能
ScibRegs.SCICTL1.bit.RXENA=1; //SCIB模块的接收使能
ScibRegs.SCICTL2.bit.TXEMPTY = 0; //发送空中断
ScibRegs.SCICTL2.bit.TXRDY = 0; //设置SCITXBUF为满
ScibRegs.SCICTL2.bit.TXINTENA = 1; //SCITXBUF中断
ScibRegs.SCICTL2.bit.RXBKINTENA = 1; //SCIRXBUF中断
ScibRegs.SCIHBAUD=0;
ScibRegs.SCILBAUD=0xF3; //波特率为19200
ScibRegs.SCIFFTX.bit.SCIRST = 1; //SCI的FIFO重新开始发送和接收
ScibRegs.SCIFFTX.bit.SCIFFENA=1; //使能SCI FIFO的功能
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=0; //不重新使能发送FIFO的操作
ScibRegs.SCIFFTX.bit.TXFFST=0; //发送FIFO队列为空
ScibRegs.SCIFFTX.bit.TXFFINT=0; //没有产生发送FIFO中断
ScibRegs.SCIFFTX.bit.TXINTCLR=0; //不清除TXFFINT的标志位
ScibRegs.SCIFFTX.bit.TXFFIENA=1; //使能发送FIFO中断
ScibRegs.SCIFFTX.bit.TXFFILIL=0; //发送中断级别为0,也就是当发送FIFO为空时发生中断
ScibRegs.SCIFFRX.bit.RXFFOVF=0; //不接收FIFO没有溢出
ScibRegs.SCIFFRX.bit.RXOVF_CLR=0; //对RXFFOVF标志位没有影响
ScibRegs.SCIFFRX.bit.RXFIFORESET=0; //不重新使能接收FIFO的操作
ScibRegs.SCIFFRX.bit.RXFIFST=0; //接收FIFO队列为空
SciaRegs.SCIFFRX.bit.RXFFINT=0; //不产生接收中断
ScibRegs.SCIFFRX.bit.RXFFINTCLR=0; //不清除接收中断标志位
ScibRegs.SCIFFRX.bit.RXFFIENA=1; //使能FIFO接收中断
ScibRegs.SCIFFRX.bit.RXFFIL=8; //级别为8.也就是说当接收FIFO中有8个字符时发生中断
ScibRegs.SCIFFCT.all = 0x0000; //禁止波特率自动校验,0延迟
SciaRegs.SCICTL1.bit.RXERRINTENA = 0; //禁止接收错误中断
ScibRegs.SCICTL1.bit.SWRESET=1; //重启SCI
ScibRegs.SCICTL1.bit.SLEEP = 0; //禁止睡眠
ScibRegs.SCICTL1.bit.TXWAKE = 0; //禁止TxWake
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1; //重新使能发送FIFO的操作
ScibRegs.SCIFFRX.bit.RXFIFORESET=1; //重新使能接收FIFO的操作
}