TI中文支持网
TI专业的中文技术问题搜集分享网站

2812的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:

检查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

赞(0)
未经允许不得转载:TI中文支持网 » 2812的scib
分享到: 更多 (0)