主芯片是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的操作
}
Jason Wu4:
检查SCIB的中断服务子程序中响应同组其他中断的语句有没有添加?
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
主芯片是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的操作
}
zhaogong zhao:
回复 Jason Wu4:
你好,谢谢你的回答,我在scia的interrupt void sciaTxFifoIsr(void),interrupt void sciaRxFifoIsr(void),interrupt void scibTxFifoIsr(void),interrupt void scibRxFifoIsr(void)这几个中断里一直都加了PieCtrl.PIEACK.all|=0x100; 不知道为什么这四个中断都使能后,程序不停的进interrupt void scibTxFifoIsr(void)这个中断里运行。不进scia的中断程序
主芯片是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的操作
}
Jason Wu4:
回复 zhaogong zhao:
你上面说,关闭SCIB的接受使能,其他中断都能进了么?
主芯片是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的操作
}
zhaogong zhao:
回复 Jason Wu4:
打开scia的fifo接受中断使能,scia的fifo发送中断使能,scib的接受中断使能,关掉scib fifo的发送中断使能,scia的fifo接受中断,scia的fifo发送中断,scib的接受中断都能进这些中断。
如果同时打开scia的fifo接受中断使能,scia的fifo发送中断使能,scib的接受中断使能,scib fifo的发送中断使能,只有scib的接受中断和scib fifo的发送中断能执行。由于我scib是做为从机,这种情况下,程序不停地执行scib fifo的发送中断程序。
主芯片是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的操作
}
zhaogong zhao:
回复 zhaogong zhao:
关闭scib的中断使能,其他中断都能进行
主芯片是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的操作
}
Jason Wu4:
回复 zhaogong zhao:
如果确定SCIA和SCIB的初始化配置完全一致,请仔细检查中断服务子程序的差别
主芯片是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的操作
}
zhaogong zhao:
回复 zhaogong zhao:
而且打开scib的fifo发送中断使能(sciafifo中断使能关闭),程序也不进到主程序里执行
主芯片是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的操作
}
zhaogong zhao:
回复 zhaogong zhao:
scia 和scib的在中断程序几乎一样
主芯片是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的操作
}
zhaogong zhao:
回复 zhaogong zhao:
我目前是参考ti官方例程来做的,我不清楚我参考的ti官方例程是否是最新版本,TI官方例程2812的scia(fifo中断接收和发送)和scib(fifo中断接收和发送)是在什么位置,能否把最新版本的连接发给我吗
主芯片是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的操作
}
Jason Wu4:
回复 zhaogong zhao:
http://www.ti.com.cn/general/cn/docs/lit/getliterature.tsp?baseLiteratureNumber=sprc097&fileType=zip