AnsweredAssumed Answered

Sharc ADSP21363 SPORT_0 Interrupts lost

Question asked by sttberlin on Oct 27, 2010
Latest reply on Oct 29, 2010 by DivyaS

Hi everybody,

I'm using an SHARC ADSP21363. I have connected an ADC at SPORT_0 witch receive data in a cycle of 10µs from the adc. At the end of every transfer an SPORT_0 interrupt is pending.

 

In short form, my source code look like that:

 

void main()

{
init(); // initialize DSP (registers, SPORT, etc.)

 

interrupts(SIG_SP0,ADC_interrupt);

 

while(1){
     Read_IRPTL();

 

     if(0 != (SPIHI & Register_IRPTL)){

          SPI_handler(); // communication, interaction, controlling adcs,...

     }

}

 

void ADC_interrupt(int flag){

 

// read buffer with ADC-samples

...

// trigger on certain events

...

// transmit results

...

}

 

And here comes my problem.

Normally the 10µs are more then enough for doing all the things the ISR have to do with the ADC-datas including the transmission of the results. But under certain circumstances, the ISR may need a little more time then 10µs for more complicated calculations. That means, an other SPORT_0- interrupt is pending, while the last is still active. An that's the moment, an interrupt is lost, because as far as I understood the information of a pending interrupt is cleared even when the ISR is leaving.

 

My idea is using a timer. I start the timer at the begin of the ISR and read the time at the end. And so I can calculate wether I'm late or not. But I'm sure there is a better way to solve the problem. Isn't it?

Outcomes