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

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里的值不对,,有知道的么??谢谢

Johnson Chen1:

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

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

我正在写一段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里的值不对,,有知道的么??谢谢

Andy Sun:

回复 Johnson Chen1:

我使用了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的初始化有问题么??谢谢

我正在写一段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里的值不对,,有知道的么??谢谢

user3832255:

回复 Andy Sun:

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

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

赞(0)
未经允许不得转载:TI中文支持网 » F2809 串口中断问题
分享到: 更多 (0)