doxytest
Enumerations | Functions | Variables
Main.c File Reference
#include <p32xxxx.h>
#include <plib.h>
#include "sys_include.h"
#include "Programmes.h"
Include dependency graph for Main.c:

Enumerations

enum  {
  EXCEP_IRQ = 0, EXCEP_AdEL = 4, EXCEP_AdES, EXCEP_IBE,
  EXCEP_DBE, EXCEP_Sys, EXCEP_Bp, EXCEP_RI,
  EXCEP_CpU, EXCEP_Overflow, EXCEP_Trap, EXCEP_IS1 = 16,
  EXCEP_CEU, EXCEP_C2E
}
 

Functions

void _general_exception_handler (unsigned cause, unsigned status)
 
void _bootstrap_exception_handler (void)
 
void _on_reset (void)
 
int main (void)
 

Variables

static enum { ... }  excep_code
 
static unsigned int epc_code
 
static unsigned int excep_addr
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
EXCEP_IRQ 
EXCEP_AdEL 
EXCEP_AdES 
EXCEP_IBE 
EXCEP_DBE 
EXCEP_Sys 
EXCEP_Bp 
EXCEP_RI 
EXCEP_CpU 
EXCEP_Overflow 
EXCEP_Trap 
EXCEP_IS1 
EXCEP_CEU 
EXCEP_C2E 
102  {
103 EXCEP_IRQ = 0, // interrupt
104 EXCEP_AdEL = 4, // address error exception (load or ifetch)
105 EXCEP_AdES, // address error exception (store)
106 EXCEP_IBE, // bus error (ifetch)
107 EXCEP_DBE, // bus error (load/store)
108 EXCEP_Sys, // syscall
109 EXCEP_Bp, // breakpoint
110 EXCEP_RI, // reserved instruction
111 EXCEP_CpU, // coprocessor unusable
112 EXCEP_Overflow, // arithmetic overflow
113 EXCEP_Trap, // trap (possible divide by zero)
114 EXCEP_IS1 = 16, // implementation specfic 1
115 EXCEP_CEU, // CorExtend Unuseable
116 EXCEP_C2E // coprocessor 2
117 } excep_code;//_excep_code;
Definition: Main.c:116
Definition: Main.c:107
Definition: Main.c:104
Definition: Main.c:111
Definition: Main.c:112
Definition: Main.c:106
Definition: Main.c:113
Definition: Main.c:105
Definition: Main.c:110
Definition: Main.c:115
Definition: Main.c:103
static enum @0 excep_code
Definition: Main.c:109
Definition: Main.c:114
Definition: Main.c:108

Function Documentation

◆ _bootstrap_exception_handler()

void _bootstrap_exception_handler ( void  )
183 {
184  SYSKEY = 0x12345678; //write invalid key to force lock
185  SYSKEY = 0xAA996655; //write key1 to SYSKEY
186  SYSKEY = 0x556699AA; //write key2 to SYSKEY
187  // OSCCON is now unlocked
188  /* set SWRST bit to arm reset */
189  RSWRSTSET = 1;
190  /* read RSWRST register to trigger reset */
191  static unsigned int dummyyy;
192  dummyyy = RSWRST;
193 }

◆ _general_exception_handler()

void _general_exception_handler ( unsigned  cause,
unsigned  status 
)
127 {
128 
129  excep_code = (cause & 0x0000007C) >> 2;
130  excep_addr = __builtin_mfc0(_CP0_EPC, _CP0_EPC_SELECT);
131  if ((cause & 0x80000000) != 0)
132  {
133  excep_addr += 4;
134  }
135 
136 
137 
138  switch(excep_code)
139  {
140  case EXCEP_AdEL: // address error exception (load or ifetch)
141  strcpy (mess_sys, "EXCEPTION A ");
142  break;
143  case EXCEP_AdES: // address error exception (store)
144  strcpy (mess_sys, "EXCEPTION B ");
145  break;
146  case EXCEP_IBE: // bus error (ifetch)
147  strcpy (mess_sys, "EXCEPTION C ");
148  break;
149  case EXCEP_DBE: // bus error (load/store)
150  strcpy (mess_sys, "EXCEPTION D ");
151  break;
152  case EXCEP_Overflow: // arithmetic overflow
153  strcpy (mess_sys, "EXCEPTION E ");
154  break;
155  case EXCEP_Trap: // trap (like divide by 0)
156  strcpy (mess_sys, "EXCEPTION F ");
157  break;
158  default:
159  strcpy (mess_sys, "EXCEPTION G ");
160  break;
161  }
162 
163 
164 /*
165  //Stop
166  while (1);
167 */
168  //RESET
169  SYSKEY = 0x12345678; //write invalid key to force lock
170  SYSKEY = 0xAA996655; //write key1 to SYSKEY
171  SYSKEY = 0x556699AA; //write key2 to SYSKEY
172  // OSCCON is now unlocked
173  // set SWRST bit to arm reset
174  RSWRSTSET = 1;
175  // read RSWRST register to trigger reset
176  static unsigned int dummyy;
177  dummyy = RSWRST;
178 
179 }
Definition: Main.c:107
Definition: Main.c:104
Definition: Main.c:112
Definition: Main.c:106
Definition: Main.c:113
Definition: Main.c:105
static enum @0 excep_code
static unsigned int excep_addr
Definition: Main.c:122

◆ _on_reset()

void _on_reset ( void  )
196 {
197  ;
198 }

◆ main()

int main ( void  )
201 {
202 
203 unsigned int i_sys =0 ;
204 unsigned int temp_sys =0 ;
205 unsigned int temp_sys_b =0 ;
206 unsigned int h_mem =0 ; // Memorise temporairement la valeur de h
207 unsigned int depa =0 ; // Variables syst�me pour conna�tre le d�passement et voir si le prog doit �tre ex�cut�
208 unsigned int ncy_ba_a =0 ; // Variables syst�me
209 unsigned int ncy_rap_a =0 ; // Variables syst�me
210 unsigned int ncy_l_a[NID];
211 
212 
213 /*INITIALISATION*/
214 
215 
216 
217 INI_PERIF();
218 INI_PIN();
219 #if defined ANC_ON
220 CLOSE_AN_PIN();
221 OUTPUT_AN_PIN();
222 #endif
223 
224 INI_VAR();
225 
226 
227 INI_EEEPROM ();
228 
229 
230 /*MESSAGES sys SERRONT EFFACÉS PAR ERREURS_HELLO()*/
231 
232 
233 INI_SYS_EX();
234 mOSCSetPBDIV(OSC_PB_DIV_2);
235 INI_FREQUENCY();
236 
237 
238 INI_TMR1();
239 
240 INI_RTCC(); //P�riph�rique de temps r�el
241 #ifdef CLAVIER_ON
242 INI_CLAV();
243 #endif
244 //INTEnableSystemMultiVectoredInt();
245 
246 
247 #if defined ANC_ON
248 initSPI_ADC(); //Interruption SPI pour l'aquisition des ADCs,DACs.
249 StartSPI_ADC();
250 #endif
251 
252 #if defined MEM_ON
253 initSPI_MEM(); //Interruption SPI pour EEPROM et SD.
254 StartSPI_MEM(); //Si on ne l'allume pas déjà ici, ça fouarre
255 #endif
256 LED_ON(8);//Environ une seconde
257 SET_CONF_CAN_H();
258 INI_CAN_PROTOCOL();
259 while(!SET_CONF_CAN_H()){;}
260 #ifdef CAN_SCAN
261  INI_CAN_H();
262  INI_CAN_FILTERS_SCAN();
263  SET_BRG_CAN_H(0);
264  LISTEN_CAN_H();
265 #else
266  INI_CAN_H();
267  SET_BRG_CAN_H(csys.can_brg);
268  INI_CAN_FILTERS();
269  START_CAN_H();
270  can_search_mode=10001;
271 #endif
272 INTEnableSystemMultiVectoredInt();
273 
274 /*===========================================================================================*/
275 /*
276 Boucle sans fin de la fonction principale
277 */
278 debut:
279 
280 /*===========================================================================================*/
281 for (h=4;h<NID;++h)
282 {
283 /*===========================================================================================*/
284 /*
285 Boucle rapide imbrique dans la boucle lente, faire comme si elle n'existait pas.
286 A part le "for (h=4;h<NID;++h)", les 2 boucles sont presque identiques.
287 */
288  h_mem=h; //Sauve la valeur de la boucle lente pour aller dans la rapide.
289 
290  for (h=0;h<4;++h) //Pr prog rapides (ID 0,1,2,3).
291  {
292  if ((acti[h]>0)&&(on[h]==0)) {acti[h]=0;} // Regarde si ordre d'activation / desactivation
293  if ((acti[h]==0)&&(on[h]>0)) {dec[h]=FRA[h]+2; acti[h]=3;}
294 
295  //if ((acti[h]>0)||(dec[h]>0))
296  if (((acti[h]>0)||(dec[h]>0))&&(pause_task[h]==0))
297  {
298  if ((REA[h]==1)||(REA[h]==3)) {depa=(TEMPS()-proch[h]);} //regarde si c'est le bon moment pour rentrer.
299  else {depa=(ReadCoreTimer()-proch[h]);} // Si l'interruption d'incr�ment de bus n'a juste pas eu le temps de se faire, pas grave. Le programe ne serra pas lance, et serra lance la prochaine fois.
300  if ((depa<1600000000)||(acti[h]==3)) // apr�s cette condition, le prog serra lance. On peut imagine un nombre dans un registre comme si il n'avait pas de fin, le max rejoint le min.
301  {
302 
303  if (acti[h]==2) {acti[h]=0;} //si activ� que 1 fois, �teint le prog qui serra alors ex�cut� juste n de fragments fois.
304  if (dec[h]==0) {dec[h]=FRA[h];} //s'occupe reseter la position dans le prog si a z�ro.
305 
306  if (acti[h]==3) {proch[h]=ReadCoreTimer();} //remet la date du prochain lancement (0 pour r�gl� sur lancement instantan�).
307  else // Si fbus pas r�actualis� parce que timer 4 proche du reset : pas grave, l'acienne valheur n'est pas trop obsol�te.
308  {
309  switch (REA[h])
310  {
311  case 0://Sur bus syst�me
312  proch[h]=proch[h]+peri[h];
313  break;
314  case 1://Sur temps r�el
315  proch[h]=proch[h]+peri[h];
316  break;
317  case 2://Sur bus syst�me impr�cis, mais si retard, ne ratrappe pas en lan�ant plein de fois vite.
318  proch[h]=ReadCoreTimer()+peri[h];
319  break;
320  case 3://Sur temps r�el impr�cis, mais si retard, ne ratrappe pas en lan�ant plein de fois vite.
321  proch[h]=TEMPS()+peri[h];
322  break;
323  }
324  }
325 
326  if (depa>dep[h]) //Compte les d�passements.
327  {
328  ++n_dep[h];
329  temp_sys=peri[h]*50;
330  if (depa>temp_sys) {proch[h]=proch[h]+temp_sys;} // Evite les grosses prises de retard
331  }
332  CHRONO_ON();
333  ncy_l_a[h]=ReadCoreTimer(); // marque pour le calcule du nombre de cycles de chaque ID
334 
335  switch (h)
336  { //lance le prog corr�spondant au tour de boucle.
337  case 0:
338  //temp_sys=temp_sys+5;
339  //AFFICHEUR();
340  break;
341  case 1:
342  //temp_sys=temp_sys+10;
343  break;
344  case 2:
345  #if defined NET_ON
346  //temp_sys=temp_sys+20;
347  //IR();
348  #endif
349  break;
350  case 3:
351  //temp_sys=temp_sys+30;
352  break;
353  default:
354  //temp_sys=temp_sys+100;
355  break;
356  }
357  //temp_sys=temp_sys+100;
358  //ncy_rap_b=ABS(ncy_rap_a);
359  temp_sys=ReadCoreTimer();
360  --dec[h]; // d�cremente la position dans le fragment du prog
361  ++n_lancements[h]; // compte ne nombre de lancement des programmes. Pour clock.
362  ++lanc[h]; // pr comptage du nombre de cycles par lancements en moyenne.
363  ncy_l_b[h]=ncy_l_b[h]+(temp_sys-ncy_l_a[h]);
364  if (((temp_sys-ncy_l_a[h])>ncy_l_max[h])&&(treel>15)) {ncy_l_max[h]=(temp_sys-ncy_l_a[h]);ncy_l_max_fra[h]=dec[h]+1;}
365  CHRONO_OFF();
366  }
367  }
368  }
369  ncy_rap_b=ncy_rap_b+(ReadCoreTimer()-ncy_rap_a); //cumule du nombre de cycles � chaque tour rapide (ID 00 a 03)
370  temp_sys=ReadCoreTimer()-ncy_rap_a;
371  ncy_rap_a=ReadCoreTimer();
372 
373  if ((temp_sys>ncy_rap_max)&&(treel>16)){ncy_rap_max=temp_sys;}
374  ++ntour_rap;
375 
376  h=h_mem; //Restore la valeur du compteur de la boucle lente (ID 4 a plus)
377 
378 /*===========================================================================================*/
379  if ((acti[h]>0)&&(on[h]==0)) {acti[h]=0;}
380  if ((acti[h]==0)&&(on[h]>0)) {dec[h]=FRA[h]+2; acti[h]=3;}
381 
382  //if ((acti[h]>0)||(dec[h]>0))
383  if (((acti[h]>0)||(dec[h]>0))&&(pause_task[h]==0))
384  {
385  if ((REA[h]==1)||(REA[h]==3)) {depa=(TEMPS()-proch[h]);}
386  else {depa=(ReadCoreTimer()-proch[h]);}
387  if ((depa<1600000000)||(acti[h]==3))
388  {
389 
390  if (acti[h]==2) {acti[h]=0;}
391  if (dec[h]==0) {dec[h]=FRA[h];}
392 
393  if (acti[h]==3) {proch[h]=ReadCoreTimer();} //remet la date du prochain lancement (0 pour r�gl� sur lancement instantan�).
394  else // Si fbus pas r�actualis� parce que timer 4 proche du reset : pas grave, l'acienne valheur n'est pas trop obsol�te.
395  {
396  switch (REA[h])
397  {
398  case 0://Sur bus syst�me
399  proch[h]=proch[h]+peri[h];
400  break;
401  case 1://Sur temps r�el
402  proch[h]=proch[h]+peri[h];
403  break;
404  case 2://Sur bus syst�me impr�cis, mais si retard, ne ratrappe pas en lan�ant plein de fois vite.
405  proch[h]=ReadCoreTimer()+peri[h];
406  break;
407  case 3://Sur temps r�el impr�cis, mais si retard, ne ratrappe pas en lan�ant plein de fois vite.
408  proch[h]=TEMPS()+peri[h];
409  break;
410  }
411  }
412 
413  if (depa>dep[h]) //Compte les d�passements.
414  {
415  ++n_dep[h];
416  temp_sys=peri[h]*50;
417  if (depa>temp_sys) {proch[h]=proch[h]+temp_sys;} // Evite les grosses prises de retard
418  }
419 
420  CHRONO_ON();
421  ncy_l_a[h]=ReadCoreTimer();
422  switch (h)
423  {
424  case 4:
425  CLOCK();
426  break;
427  case 5:
428  MENU();
429  break;
430  case 6:
431  //STROB();
432  break;
433  case 7:
434  SCRIPT();
435  break;
436  case 8:
437  TACHES();
438  break;
439  case 9:
440  //LAMPE();
441  break;
442  case 10:
443  //AGENDA();
444  break;
445  case 11:
446  //LS();
447  break;
448  case 12:
449  //METEO();
450  break;
451  case 13:
452  //BAG();
453  break;
454  case 14:
455  //FOUR();
456  break;
457  case 15:
458  //SOLAR();
459  break;
460  }
461  temp_sys=ReadCoreTimer();
462  --dec[h];
463  ++n_lancements[h];
464  ++lanc[h];
465  ncy_l_b[h]=ncy_l_b[h]+(temp_sys-ncy_l_a[h]);
466  if (((temp_sys-ncy_l_a[h])>ncy_l_max[h])&&(treel>17)) {ncy_l_max[h]=(temp_sys-ncy_l_a[h]);ncy_l_max_fra[h]=dec[h]+1;}
467  CHRONO_OFF();
468  }
469  }
470 }
471 ncy_ba_b=ncy_ba_b+(ReadCoreTimer()-ncy_ba_a); //cumule du nombre de cycles � chaque tour rapide complet
472 temp_sys=ReadCoreTimer()-ncy_ba_a;
473 ncy_ba_a=ReadCoreTimer();
474 if ((temp_sys>ncy_ba_max)&&(treel>18)){ncy_ba_max=temp_sys;}
475 ++ntour;
476 /*===========================================================================================*/
477 goto debut;
478 
479 /*===========================================================================================*/
480 
481 while(1){temp_sys=0;}
482 while(0){temp_sys=0;}
483 
484 /*===========================================================================================*/
485 }
void INI_SYS_EX(void)
Definition: Ini_Sys_Ex.c:17
void INI_PIN(void)
Definition: Ini_Sys_Ex.c:136
const unsigned int FRA[NID]
Definition: Const.c:29
void INI_VAR(void)
Definition: Ini_Var.c:14
const unsigned int REA[NID]
Definition: Const.c:9

Variable Documentation

◆ epc_code

unsigned int epc_code
static

◆ excep_addr

unsigned int excep_addr
static

◆ excep_code

enum { ... } excep_code