2012-04-20 2 views
4

私はスレーブモードでPIC32MX795F512L SPI3モジュールを使用しています。私のマスタはSPIラインを介してデータを送信していますが、スレーブの割り込みサービスルーチンは決して呼び出されません。 RX割り込みフラグがスレーブ側のハードウェアに設定されていて、SPI3BUFを読み込んで正しい値を取得できますが、ISRはまだ呼び出されていません。PIC32 RXIFフラグがセットされているときにSPI ISRが呼び出されていませんか?

は、ここに私のSPIの初期化コードです:

void InitSPI3() 
{ 
    int rData; 

    IEC0CLR=0x1c000000;//Disable Rx Tx, Error interrupts 
    SPI3CON = 0; // Stops and resets the SPI3. 
    SPI3BRG = 0; 
    rData=SPI3BUF;// clears the receive buffer 
    IFS0CLR = 0x1c000000;//Clear interrupt flags 
    IPC6CLR=0x0000001f;// clear the priority 
    //ipl7, subpri 0 
    IPC6bits.SPI3IP = 7; 
    IPC6bits.SPI3IS = 0; 
    //Enable Rx Tx, Error interrupts 
    IEC0bits.SPI3RXIE = 1; 
    IEC0bits.SPI3TXIE = 1; 
    //IEC0bits.SPI3EIE = 1; 

    SPI3CONbits.CKE = 1; 
    SPI3CONbits.SSEN = 1; 

    SPI3STATbits.SPIROV = 0;// clear the Overflow 

    //Enable SPI 
    SPI3CONbits.ON = 1; 

    //** from now on, the device is ready to receive and transmit data (slave mode)... 
} 

そして、ここでは、私はMPLAB XおよびC32コンパイラを使用しています私のISR

void __ISR(_SPI_3_VECTOR, ipl7) _SPI3Interrupt() 
{ 
    SET_D2(); 
    SET_D1(); 

    // RX INTERRUPT 
    if(IFS0bits.SPI3RXIF) // receive data available in SPI3BUF Rx buffer 
    { 
     SPI_Rx_Interrupt(); 
    } 

    // TX INTERRUPT 
    if(IFS0bits.SPI3TXIF) // space available in SPI3BUF Tx buffer 
    { 
     SPI_Tx_Interrupt(); 
    } 


    IFS0CLR = 0x1c000000; // clear SPI3 interrupts 

} // end ISR 

です。私はこれに対して4時間壁に頭を向けていた。

+1

他の割り込みは発生していますか?ほとんどの割り込みコントローラ/プロセッサには、ある種のグローバル割り込みイネーブル/ディスエーブルがあります。いずれにしても、あなたの質問はすでにhttp://www.microchip.com/forums/m647728-print.aspxで回答されていると思います。 – Clifford

答えて

1

確認対象:
1 - それを動作させるために変更する必要があるグローバル割り込みマスクはありますか?
2 - 変更する必要のある割り込みレベル/優先マスクがありますか?
3 - 割り込みに一意のレベル/優先度を与えましたが、いくつかのマイクロは2つの割り込みが同じレベルを共有することを許可しません&といくつかのものは、デフォルト値が迷惑または非動作値になります。

+0

追加するだけで問題になるかもしれませんが、時にはマスクビットをひっくり返すときに割り込みをマスクする(IPLを設定する)必要があります。 –

0

それを見ていくつかの他の事:

  1. は、あなたのチップの正誤表を確認してください。マイクロチップ社では、PICにSPI関連のシリコン問題の歴史があります。

  2. http://www.microchip.com/forums/m573732.aspxをご覧ください。これは主に周辺チップに向けられていますが、SPIxSTATbits.SPITBEとSPIxSTATbits.SPIRBFの議論では何かを得ることができます。

関連する問題