Bonjour,
Voilà mon soucis : Je communique d'un pic18 à un pic32. Le pic18 envoie une trame à un débit de 125us/bits sur un port d'entrée de mon pic32. Je scrute le port d'entrée de mon pic32 une fois le bit de start reçu, a savoir le premier bit de la trame. Une fois reçu je stocke toutes les valeurs de la trame dans un tableau et Pour cela je dois scruter toutes les 125 us pour être synchro avec le pic18.
Mon problème c'est qu'il n'y a pas de fonction wait assez précise, qui permettrait d'attendre exactement cette période de temps. Comme sur le pic18 où on aurait les fonctions Delay1KTCYX(unsigned char). Comment faire ?
Sinon j'avais penser à utiliser le core timer :
#define SYS_FREQ (80000000L)
#define TOGGLES_PER_SEC 1
#define CORE_TICK_RATE 1600000000 //(SYS_FREQ/2/TOGGLES_PER_SEC)
void attente()
{
static int count=0;
//configure the core timer
OpenCoreTimer(CORE_TICK_RATE); // on définit la fréquence de réference du timer
mConfigIntCoreTimer((CT_INT_ON | CT_INT_PRIOR_7 | CT_INT_SUB_PRIOR_0)); //active le timer, priorité élevé par defaut, pas de sous priorité
INTEnableSystemMultiVectoredIn t(); // active multi-vector interruption
while(count<125) { }
mPORTDClearBits(BIT_0); //on éteind la led verte pour vérifier qu'on a bien quitter l'instruction de la boucle
mConfigIntCoreTimer((CT_INT_OF F | CT_INT_PRIOR_0 | CT_INT_SUB_PRIOR_0)); // on désactive le timer
}
void __ISR(_CORE_TIMER_VECTOR, ipl2) CoreTimerHandler(void)
{
// clear the interrupt flag
mCTClearIntFlag();
// .. things to do
count++;
// update the period
UpdateCoreTimer(CORE_TICK_RATE );
// Toggle the LED
//mPORTDSetBits(BIT_0);
//wait();
}
En gros l'idée de mon code pour faire un compteur précis serait de :
Je règle la fréquence du core_timer pour qu'il génère une interruption toutes les us.
Dans la fonction attente :
-J'active le timer, je le configure...
-Mon count est initialiser à 0
-J'active les interruptions donc toutes les us je fais un saut dans mon programme interruption qui incrémente count
-Je rentre dans ma boucle while car count=0 donc <125 et je ne fais rien
-Au bout de 125 us j'aurai incrémenter 125 fois mon count donc je devrai quitter ma boucle et éteindre donc la led verte.
Cependant j'ai tester mon code dans la main est celui ci reste bloqué indéfiniment dans ma boucle, cela veut dire que count ne s'incrémente pas. Qu'en pensez vous ?
Quels conseils pouvez vous me donnez, car je suis dans une impasse depuis plus d'1 semaine.
Merci, bonne soirée, et merci pour la lecture en tout cas !
-----