我在從模式下使用PIC32MX795F512L SPI3模塊。我的主機通過SPI線路發送數據,但從機的中斷服務程序從未被調用。 RX中斷標誌在從機側的硬件中置位,我可以讀取SPI3BUF並獲得正確的值,但ISR仍未被調用。RXIF標誌置位時PIC32 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)...
}
這是我的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
我使用的MPLAB X和C32編譯器。我一直在我的頭上撞牆4個小時。
是否發生其他中斷?大多數中斷控制器/處理器具有某種全局中斷啓用/禁用。無論如何,我認爲你的問題已在http://www.microchip.com/forums/m647728-print.aspx上得到解答。 – Clifford 2012-04-20 18:41:49