作者 主題: 關於DSP(F2812) 的SCI (RS232) 使用接收中斷問題  (閱讀 4632 次)

0 會員 與 1 訪客 正在閱讀本文。

harry_cool

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
程式碼如下 :
/**************************************************************************/
// SCIA RX Isr
/**************************************************************************/
void SCIA_RX_ISR_INI(void)
{  EALLOW;   
   GpioMuxRegs.GPFMUX.all= 0x0030;// Select GPIOs to be SCI pins--->Port F MUX - x000 0000 0011 0000
   PieVectTable.RXAINT   = &SCIA_Rx_ISR;// declare interrupt function
   EDIS;

   SciaRegs.SCICCR.all  = 0x0007;// 1 stop bits, no parity, compatible RS-232 
                                 // idle-line mode protocol, 8 bits character length
   SciaRegs.SCICTL1.all = 0x0003;// disable receive error interrupt, sleep mode and
                                 // transmitter wakeup feature // enable transmitter, receiver
                                 // SCI software reset
   SciaRegs.SCICTL2.bit.TXINTENA   =0;// disable tx int
   SciaRegs.SCICTL2.bit.RXBKINTENA =1;//         rx int
   SciaRegs.SCICCR.bit.LOOPBKENA   =0;// disable loopback
   EALLOW;
   SysCtrlRegs.LOSPCP.all = 2; // Low-speed clock (LSPCLK) = 37.5MHz
   EDIS; 
   SciaRegs.SCIHBAUD   = 0x01;//9600
   SciaRegs.SCILBAUD   = 0xE7;//9600
   SciaRegs.SCIFFCT.all= 0x00;// disable auto boud-rate
   
   SciaRegs.SCIFFTX.all=0xC020;
   SciaRegs.SCIFFRX.all=0x0021;// when recieve 1 char --> RX int generated

   SciaRegs.SCICTL1.all              =0x0023;// Relinquish SCI from Reset
   SciaRegs.SCIFFTX.bit.TXFIFOXRESET =     1;// don't reset TXFIFO
   SciaRegs.SCIFFRX.bit.RXFIFORESET  =     1;// don't reset RXFIFO
   //----------------------------------------------------------------- prefer write in main()
   // Enable Interrupt events:
   PieCtrlRegs.PIECRTL.bit.ENPIE = 1;     // Enable the PIE block
   PieCtrlRegs.PIEIER9.bit.INTx1 = 1;     // PIE Group 9, INT1
   //PieCtrlRegs.PIEIER9.bit.INTx2 = 1;     // PIE Group 9, INT2
   IER |= M_INT9;   // Enable CPU INT
   EINT;          // Enable Global interrupt INTM
   ERTM;          // Enable Global realtime interrupt DBGM
}
/**************************************************************************/
// SCIA_Rx_ISR ------> RX int************/
interrupt void SCIA_Rx_ISR(void)
{
      rx_data= SciaRegs.SCIRXBUF.all ;   

   SciaRegs.SCIFFRX.bit.RXOVF_CLR=1;    // Clear Overflow flag
   SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;   // Clear Interrupt flag
   PieCtrlRegs.PIEACK.all|=0x100;       // Issue PIE ack
}

當PC 傳約1000筆字元後就停止了
若我將DSP關機   PC又繼續傳
是因為DSP 的 SCIA_Rx_ISR 不再產生中斷嗎 ?
請各位大大解惑    謝謝