lcj97102 发表于 2016-10-10 19:53

2812无法进入SCI串口发送中断子程序

也是书上的例子,自己学习过程中发现:2812无法进入SCI串口发送中断子程序,但是能正常进入接受中断子程序,求大神解释!程序如下:

void InitSci(void)
{
      // Initialize SCI-A:
      

      /* loopback   8 bit data */
      SciaRegs.SCICCR.all = 0x07;      // 1 bit stop, disable parity, idle mode, 8 bits data
      
      SciaRegs.SCICTL1.all = 0x03; // enable TXRX
      
      //SciaRegs.SCICTL2.all = 0x02; //
      SciaRegs.SCICTL2.bit.RXBKINTENA=1;
      SciaRegs.SCICTL2.bit.TXINTENA=0;//0和1试过
      
      
      SciaRegs.SCIHBAUD = 0x00;
      SciaRegs.SCILBAUD = 0xF3;
      
      
      
      PieCtrl.PIEIER9.bit.INTx1 = 1;
      PieCtrl.PIEIER9.bit.INTx2 = 1;
      
      
      SciaRegs.SCICTL1.bit.SWRESET=1;

}

interrupt void SCIRXINTA_ISR(void)   // SCI-A
{

                Sci_VarRx = SciaRegs.SCIRXBUF.all;
                              
                i++;
                if(i == 6)
                {
                        //SciaRegs.SCITXBUF= Sci_VarRx;
                        Send_Flag = 1;
                        i = 0;
                }
      PieCtrl.PIEACK.bit.ACK9 = 1;
      EINT;
}

interrupt void SCITXINTA_ISR(void)   // SCI-A
{
                   if((Send_Flag == 1)&&(SciaRegs.SCICTL2.bit.TXRDY==1))
               {
               SciaRegs.SCITXBUF= Angle;
               
                  j++;
                  if(j>=6)Send_Flag = 0;
               }
                  
    PieCtrl.PIEACK.bit.ACK9 = 1;
      EINT;
}

#include "DSP28_Device.h"
unsigned int Sci_VarRx;
int Angle;
unsigned int i=0,j=0,k=0;
unsigned int Send_Flag=0;
//#defineSCIA_INT1

void main(void)
{

      /*初始化系统*/
      InitSysCtrl();

      /*关中断*/
      DINT;
      IER = 0x0000;
      IFR = 0x0000;

      /*初始化PIE中断*/
      InitPieCtrl();

      /*初始化PIE中断矢量表*/
      InitPieVectTable();      
      
      /*初始化SCIA寄存器*/
    InitSci();


    for(i = 0; i < 6; i++)
    {
            Sci_VarRx = 0;
    }



    for(i = 0; i < 10; i++)
    {
            
      for(j = 0; j < 6; j++)
         {
            
            Angle=k;
            k++;
            
            
         }      
            
    }


//i = 0;
    ///j = 1;
   // Send_Flag = 0;

//#if SCIA_INT
      /*设置中断服务程序入口地址*/
      ///EALLOW;      // This is needed to write to EALLOW protected registers
      //PieVectTable.TXAINT = &SCITXINTA_ISR;
      //PieVectTable.RXAINT = &SCIRXINTA_ISR;
      //EDIS;   // This is needed to disable write to EALLOW protected registers
      IER |= M_INT9;/*开中断*/
      EINT;   // Enable Global interrupt INTM
      ERTM;      // Enable Global realtime interrupt DBGM
      
    i=0;
    j=0;
      for(;;)
      {
   // for(k= 0; k< 50000; k++){}

             //SciaRegs.SCIRXST.bit.RXRDY
    }



      
}      

zhangmangui 发表于 2016-10-10 22:22

可以和此贴相互交流
https://bbs.21ic.com/icview-1632854-1-1.html

长的帅怪我落 发表于 2016-10-11 16:30

//PieVectTable.TXAINT = &SCITXINTA_ISR;
      //PieVectTable.RXAINT = &SCIRXINTA_ISR;
这里注释掉?有中断来了没有进到中断服务程序里面去啊,当然没进中断啊

lcj97102 发表于 2016-10-15 10:03

长的帅怪我落 发表于 2016-10-11 16:30
//PieVectTable.TXAINT = &SCITXINTA_ISR;
      //PieVectTable.RXAINT = &SCIRXINTA_ISR;
这里注释掉 ...

这个在头文件里有定义呀,而且接收中断也注释掉了,它也进去了啊,这两句其实没什么用啊,中断地址在头文件里就有定义啊

Mr5Tao 发表于 2016-10-24 22:06

你在初始化SCI的时候使能了发送没有?
页: [1]
查看完整版本: 2812无法进入SCI串口发送中断子程序