SPI1 ISR help

Hi, I am working AT91SAM7X FreeRTOS. trying to get the SPI1 working as a slave with interrupt on RDRF. However the ISR never happen, can any one help? Following are initialization code: //================================= //  ARM7 SPI1               MSP430 SPIA // ———–              ———- //     PA21  |<- NCPS0 –  | P3.7 //     PA22  |<- SCLK –   | P3.0 //     PA23  |< – MOSI –  | P3.4 //     pa24  | – MISO ->  | P3.5 // ———–              ———- //================================= void vSPI1_Init(void) {   portENTER_CRITICAL();   {     // Config SPI1 PIO –     AT91C_BASE_PIOA ->PIO_PDR = (AT91C_PA21_NPCS10| AT91C_PA24_MISO1 | AT91C_PA23_MOSI1 | AT91C_PA22_SPCK1);// Set in Periph mode     AT91C_BASE_PIOA ->PIO_BSR = (AT91C_PA21_NPCS10| AT91C_PA24_MISO1 | AT91C_PA23_MOSI1 | AT91C_PA22_SPCK1);            // Config PMC     AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_SPI1;     //SPI software reset     AT91C_BASE_SPI1->SPI_CR = AT91C_SPI_SWRST;    // cfg MR 9slave mode)     AT91C_BASE_SPI1->SPI_MR = AT91C_SPI_MODFDIS;    // cfg CSR     AT91C_BASE_SPI1->SPI_CSR[0] = (0 + 0 + AT91C_SPI_BITS_8);     // Configure SPI interrupt     // AT91F_AIC_ConfigureIt     //—————————————————————————————————-          AT91C_BASE_AIC->AIC_IDCR = 0x01<< AT91C_ID_SPI1;     // Save the interrupt handler routine pointer and the interrupt priority     AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SPI1] = (unsigned int)vSPI_ISR_Wrapper;     // Store the Source Mode Register     //AT91C_BASE_AIC-> AIC_SMR[AT91C_ID_SPI1]= AT91C_AIC_PRIOR_HIGHEST | AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE ;     // Clear the interrupt on the interrupt controller     AT91C_BASE_AIC->AIC_ICCR = 0x01<< AT91C_ID_SPI1;     //—————————————————————————————————-       //AT91F_AIC_EnableIt     AT91C_BASE_AIC->AIC_IECR = 0x1 << AT91C_ID_SPI1;     // Enable interrupt aacordingly     AT91C_BASE_SPI1 -> SPI_IDR =  (AT91C_SPI_RDRF + AT91C_SPI_TDRE + AT91C_SPI_MODF + AT91C_SPI_OVRES+                                    AT91C_SPI_NSSR + AT91C_SPI_TXEMPTY + AT91C_SPI_SPIENS);     AT91C_BASE_SPI1 -> SPI_IER =  AT91C_SPI_RDRF;     // Disable the PDC transfer        AT91C_BASE_SPI1->SPI_PTCR = AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS;    // SPI is enable     AT91C_BASE_SPI1->SPI_CR = AT91C_SPI_SPIEN;   }   portEXIT_CRITICAL(); } void vSPI1_ISR_Wrapper( void )__attribute__ ((naked)); void vSPI1_ISR_Handler( void ); void vSPI1_ISR_Wrapper( void ) {     portSAVE_CONTEXT();     vSPI_ISR_Handler();     portRESTORE_CONTEXT(); } /*———————————————————–*/ void vSPI1_ISR_Handler( void ) {      unsigned long spi_Status;         signed portCHAR RxChar;       AT91PS_SPI     pSPI = AT91C_BASE_SPI1;           spi_Status = (pSPI -> SPI_SR);             // A data has been recieved and transmitted to the RBR.     if (spi_Status & AT91C_SPI_RDRF)        {         spi_Rdrf_Flag = 1;     }         /* End the interrupt in the AIC. */         AT91C_BASE_AIC->AIC_EOICR = 0; } /*———————————————————–*/

SPI1 ISR help

found the problem. MASTER not driving the CS line LOW. 😛