This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
主芯片是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的操作
}
你好,谢谢你的回答,我在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的中断程序
打开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的发送中断程序。
我目前是参考ti官方例程来做的,我不清楚我参考的ti官方例程是否是最新版本,TI官方例程2812的scia(fifo中断接收和发送)和scib(fifo中断接收和发送)是在什么位置,能否把最新版本的连接发给我吗
http://www.ti.com.cn/general/cn/docs/lit/getliterature.tsp?baseLiteratureNumber=sprc097&fileType=zip
dsp收到一指令(01功能码)后,向主机发送一帧数据(包括crc校验的两字节,共有19个字节),总是最后3个字节收不到。dsp收到另一个指令(03功能码)后,向主机发送一帧数据(包括crc校验的两字节,共有37个字节),总是最后5个字节收不到。以上我在发送中断里发送完一帧数据后,做了一个标记(当发送完一帧数据后置0,接受完一帧数据置1),在主程序里检测这个标志位状态,如果这个标志为0延时后将RS485的接收使能,如果为1,将RS485发送使能。