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.

F2809 串口中断问题

我正在写一段F2809串口中断的代码,

    for(;;)
    {
    scia_xmit(SendChar0);     // Init send data
        SendChar1= Value<<8;     //Value & 0x00FF;
    SendChar1=SendChar1>>8;   // low 8-bit
    scia_xmit(SendChar1);
       SendChar2 =Value>>8;    //Value & 0xFF00;   // high 8-bit;
    scia_xmit(SendChar2);
  delay();   

    }
     }

 interrupt void sciaRxFifoIsr(void)
 {
  Uint16  a;
  Uint16  ReceivedChar0;
  Uint16  ReceivedChar1;
  Uint16  ReceivedChar2;

  a=++loop;
  switch(a)
  {
  case 1 :  Value=EPwm1Regs.TBCTR; break;
  case 2 :  ReceivedChar0 =SciaRegs.SCIRXBUF.all; break;  // Read data
  case 3 :  ReceivedChar1 = SciaRegs.SCIRXBUF.all;  // Read data
            ReceivedChar2 =ReceivedChar1<<8 |ReceivedChar0; //(ReceivedChar1*256)+ReceivedChar0;
                  loop=0; break;
  }
    SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;   // Clear Overflow flag
  SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;   // Clear Interrupt flag

  PieCtrlRegs.PIEACK.all=PIEACK_GROUP9;       // Issue PIE ack
 }

 

想问一下,当程序scia_xmit(SendChar0);     执行完之后会跳到中断里,,中断执行完之后程序会跳到SendChar1= Value<<8; 这一行继续执行么??我是这么想的,可是第二次中断RXBUF里的值不对,,有知道的么??谢谢

  • 如果程序没有跑飞的,从中断出来应该是要执行SendChar1=SendChar1>>8;   // low 8-bit,然后再发送第二个数据。

    如果有问题的话,楼主可以检查一下程序是否跑的正常,SCI初始化有没有问题,是否使用了FIFO等。

  • 我使用了FIFO,,这是SCI的初始化:

    void scia_fifo_init()
     {
        SciaRegs.SCICCR.all =0x0087;   // 1 stop bit,  No loopback
                                       // No parity,8 char bits,
                                       // async mode, idle-line protocol
        SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                       // Disable RX ERR, SLEEP, TXWAKE
        SciaRegs.SCICTL2.bit.TXINTENA =1;
        SciaRegs.SCICTL2.bit.RXBKINTENA =1;
        SciaRegs.SCIHBAUD = 0x0001;   //9600=BAUD
        SciaRegs.SCILBAUD = 0x0044;
     //  SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back\

        SciaRegs.SCIFFTX.all=0xC020; //SciaRegs.SCIFFTX.bit.SCIFFENA=0;// |=0xC020;
        SciaRegs.SCIFFRX.all=0x0021;//SciaRegs.SCIFFRX.bit.RXFFIENA=0;//|=0x0021;
        SciaRegs.SCIFFCT.all=0x00;

        SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset
        SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;//1
        SciaRegs.SCIFFRX.bit.RXFIFORESET=1;//1
     }

    我现在又有个新问题,,我发送一次数据,执行了两次中断,为什么呢?我的SCI的初始化有问题么??谢谢

  • 你现在的问题解决了吗??

    我配置跟你一样,现在收发还是有些问题,在RAM里面运行正常,在flash里面运行就会出错。