Interrupt stops randomly

Hi,

Mocroprocessor: AT91SAM7s128
Toolchain: RealView MDK-ARM Version: 3.20

I have the following ADC code need to be run while interrupts disabled to eliminate 60hz noise. So I put it inside SWI (all interrupts are disabled in SWI).

int __swi(1) GetRawCountsFromExternalADC2DataBuffer(unsigned short * P);
int __SWI_1 (unsigned short * P)
{
    unsigned int Index;
    unsigned int Sum;

    // Start the ADC
    StartPWMC();

    do    // Eliminate first reading
    {
        // Check if the ADC ready for the data
        Sum = CheckADCReady();
    }while(Sum == 0);
    SelectSpiPort(SPI_ADC);
    GetDataFromSpi();

    // Start get 1024 readins
    for(Index = 0; Index < TOTAL_SAMPLE; Index ++)
    {
        do
        {
            // Check if the ADC ready for the data
            Sum = CheckADCReady();
        }while(Sum == 0);

        SelectSpiPort(SPI_ADC);
        *(P + Index) = (unsigned short)GetDataFromSpi();
    }

    // Stop the ADC
    StopPWMC();
    return(1);
}

The problem is that all interrupts (Timer and UART) will be stopped after it runs for random time. I also
use the spuriouse interrupt handler to fix the problem, but it is not working.

The following code is used to catch the spurious interrupts.


// STORE SPURIOUS INTERRUPT HANDLER TO AIC_SPU
    AT91C_BASE_AIC->AIC_SPU = (unsigned long) SpuriousInterruptHandler;

static void SpuriousInterruptHandler(void)
{
    // END OF INTERRUPT
    AT91C_BASE_AIC->AIC_EOICR = 0; }

If I am not using disable/enable interrupts for ADC code (data with 60hz will not right), the code runs without any problem.

Any comments are appreciated!

Parents Reply Children
No data
More questions in this forum