Bonjour,
J'utilise pic32mx360F512
Mon probleme est le suivant: J'ai ajouté une boucle interruption dans mon programme (main) pour réaliser une tache tout simple (clignoter une led)
L'interruption est bloquer au niveau de mon boucle spi (utilisé pour communiquer avec une dalle capactitive)
En mode debug, je vois que le "step" reste coincé dans le boucle ecriture spi (la communication spi marche tres bien sans boucle interruption)
Voici un peu de code:
main()
{
OpenTimer2(T2_ON | T2_SOURCE_INT | T2_PS_1_256, T2_TICK);
// set up the timer interrupt with a priority of 2
ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_2);
// enable multi-vector interrupts
INTEnableSystemMultiVectoredIn t();
while(1)
{
....
stage= TouchGetStage();//communication avec dalle capac par spi
//programme est bloqué ici
....
}
}
//boucle interruption
void __ISR(_TIMER_2_VECTOR, ipl2) Timer2Handler(void)
{
// clear the interrupt flag
LATBbits.LATB3=~LATBbits.LATB3 ;
mT2ClearIntFlag();
}
...
/// fonction TouchGetStage
short TouchGetStage( void )
{
SPI_SS_PORT = 0;
WriteToAD7147(0xE40B);
CDC_RESULT_Sx[0]=ReadFromAD7147();
....
SPI_SS_PORT = 1;
}
....
//boucle spi
unsigned short WriteToAD7147( unsigned short data )
{while(SPI1STATbits.SPITBE==0) ;
SPI1BUF = data; // write to buffer for TX
while(!SPI1STATbits.SPIRBF);IF S0CLR = 0x03000000; // wait for transfer to complete
return SPI1BUF; // read the received value
}//writeSPI1
unsigned short ReadFromAD7147(void)
{
SPI1BUF = 0; // write to buffer for TX
while(!SPI1STATbits.SPIRBF);IF S0CLR = 0x03000000; // wait for transfer to complete
return SPI1BUF; // read the received value
}//readSPI1
Avez vous une idée pour mon probleme svp?
Merci d'avance
-----