1 |
|
---|
2 | // Les données télémesure sont formées de blocks de type block_tm
|
---|
3 | // la table de transfert de ces blocks est la structure table_tm
|
---|
4 | // la longueur de table telemesure est longueur_table_tm
|
---|
5 |
|
---|
6 |
|
---|
7 | //#define nb_per_block*2 24 // nombre de demi periodes dans un block télémesure
|
---|
8 | //#define longueur_table_tm 20 // nb de blocks dans la table pour transmettre les télémesures
|
---|
9 | //#define longueur_table_tc 100 // nb de datas dans la table de télécommandes
|
---|
10 |
|
---|
11 | //longueur definies dans choix_param
|
---|
12 |
|
---|
13 |
|
---|
14 | // ----- pour detection synchrone
|
---|
15 | typedef struct
|
---|
16 | {
|
---|
17 | int ii[nb_max_bolo]; // compteur position dans la periode
|
---|
18 | short dstable[nb_max_mes_per]; // table les différents ds
|
---|
19 | short dsnorme; // norme des detections synchrones
|
---|
20 | long sommeA[nb_max_bolo];
|
---|
21 | long sommeB[nb_max_bolo];
|
---|
22 | } detec_sync;
|
---|
23 |
|
---|
24 |
|
---|
25 |
|
---|
26 | typedef struct // block telemesure pour dialogue avec les interruptions
|
---|
27 | {
|
---|
28 | unsigned long temps_cntl[nb_per_block*2]; // temps du controlleur en µsec
|
---|
29 | unsigned long temps_mac[nb_per_block*2]; // temps du mac en sec
|
---|
30 | reglage_bolo reglage; // parametr de reglage des bolos
|
---|
31 | int chauf_regul;
|
---|
32 |
|
---|
33 | short flag_bolo[nb_max_bolo]; // flag de lecture detail de la forme de modulation
|
---|
34 | short bol_per[nb_max_bolo][nb_max_mes_per]; // table une periode detail de la forme de modulation
|
---|
35 | F_donne don[nb_per_block*2]; // donnees bolo et synchro pour "nb_per_block*2" periodes
|
---|
36 | //*****************************************************************************************
|
---|
37 | #ifdef _archeops //--------- pour Archeops ------------------------------ ***
|
---|
38 | //*****************************************************************************************
|
---|
39 | block_type_modele tmtrx;
|
---|
40 | //*****************************************************************************************
|
---|
41 | #endif //-------------------------------------------------------------------- ***
|
---|
42 | //*****************************************************************************************
|
---|
43 | } block_tm;
|
---|
44 |
|
---|
45 |
|
---|
46 | typedef struct // block telecommande pour dialogue avec les interruptions
|
---|
47 | {
|
---|
48 | char mot[10]; // 10 mots de commande
|
---|
49 | }
|
---|
50 | block_tc;
|
---|
51 |
|
---|
52 |
|
---|
53 |
|
---|
54 |
|
---|
55 | typedef struct // table courante telemesure pour dialogue avec les interruptions
|
---|
56 | {
|
---|
57 |
|
---|
58 | int pos_ecrit; // position dans la table
|
---|
59 | int pos_lit;
|
---|
60 | block_tm btm[longueur_table_tm]; // longueur_table_tm blocks de telemesure
|
---|
61 | }
|
---|
62 | table_tm;
|
---|
63 |
|
---|
64 | typedef struct // table courante telemesure pour dialogue avec les interruptions
|
---|
65 | {
|
---|
66 |
|
---|
67 | int pos_ecrit; // position dans la table
|
---|
68 | int pos_lit;
|
---|
69 | block_tc btc[longueur_table_tc]; // longueur_table_tc blocks de telecommande
|
---|
70 | }
|
---|
71 | table_tc;
|
---|
72 |
|
---|
73 |
|
---|
74 | typedef struct // parametres de regul dans les interruptions
|
---|
75 | {
|
---|
76 | regul_p_i_d pid;
|
---|
77 |
|
---|
78 | long valeur;
|
---|
79 | long anc_ecart;
|
---|
80 | int compteur;
|
---|
81 | double tint;
|
---|
82 | int cc;
|
---|
83 | // int per_raz; // nombre de periode entre 2 raz (zero tension sur la modulation)
|
---|
84 | // int nb_raz; // nombre de periode courant
|
---|
85 | }
|
---|
86 | param_regul;
|
---|
87 |
|
---|
88 |
|
---|
89 | //*****************************************************************************************
|
---|
90 | // ***
|
---|
91 | #ifdef _archeops //--------- pour Archeops ------------------------------ ***
|
---|
92 | // ***
|
---|
93 | //*****************************************************************************************
|
---|
94 |
|
---|
95 |
|
---|
96 |
|
---|
97 | typedef struct // variables internes du programme d'interruption pour Archeops
|
---|
98 | {
|
---|
99 | unsigned long temps_cntl; // temps courant du controlleur en unite de 4.8 µsec ??? en demi periodes
|
---|
100 |
|
---|
101 | int a; // compteur pour check debut et fin de block
|
---|
102 | int b; // compteur de mot 32 bit dans un block
|
---|
103 | int c; // compteur de bytes dans un mot 32 bit
|
---|
104 |
|
---|
105 | block_type_modele btt; // le plus gros des blocs telemesure transputer dans arc_com.h
|
---|
106 | //*****************************************************************************************
|
---|
107 | #ifdef _sans_transputer //--------- pour Archeops avec ctb ------------- ***
|
---|
108 | char bkb[nb_per_block*nb_max_mes_per*5]; // le block brut venant des bebo
|
---|
109 | #endif //-------------------------------------------------------------------- ***
|
---|
110 | //*****************************************************************************************
|
---|
111 | }
|
---|
112 | var_internes;
|
---|
113 |
|
---|
114 | //*****************************************************************************************
|
---|
115 | // ***
|
---|
116 | #else //--------- pour Diabolo ------------------------------ ***
|
---|
117 | // ***
|
---|
118 | //*****************************************************************************************
|
---|
119 |
|
---|
120 | typedef struct // variables internes du programme d'interruption pour diabolo
|
---|
121 | {
|
---|
122 | int aa; // pour deux lectures fifo par point
|
---|
123 | int a; // compteur bit dans un mot
|
---|
124 | int i; // compteur position générale dans la periode
|
---|
125 | long debut_per; // flag debut de periode
|
---|
126 |
|
---|
127 | int numbol; // le numero de bolo en cours de lecture par la bebo
|
---|
128 | long mot[nb_max_bolo]; // mot pour lecture de chaque voie ADC (phase en bit 12)
|
---|
129 | long motsauve[nb_max_bolo][nb_max_mes_per]; // mot pour sauve mot precedent
|
---|
130 |
|
---|
131 | char synchro[nb_sync]; // pour calcul interne des synchro avant de les envoyer
|
---|
132 |
|
---|
133 |
|
---|
134 | int flag_ecriture_data; // flag pour ecrire les data sur le bus PCI
|
---|
135 | int pos_block_tm; // position pour ecriture des données dans un block tm
|
---|
136 |
|
---|
137 | unsigned long temps_cntl; // temps courant du controlleur en µsec ou demi-periodes
|
---|
138 |
|
---|
139 | param_regul reg; // ------ parametres de la regulation
|
---|
140 |
|
---|
141 | }
|
---|
142 | var_internes;
|
---|
143 |
|
---|
144 | //*****************************************************************************************
|
---|
145 | // ***
|
---|
146 | #endif //-------------------------------------------------------------------- ***
|
---|
147 | // ***
|
---|
148 | //*****************************************************************************************
|
---|
149 |
|
---|
150 |
|
---|
151 |
|
---|
152 | //---------------------- structure complete tm + tc + interne tache
|
---|
153 |
|
---|
154 |
|
---|
155 | typedef struct // global connu de la tache et du prog principal
|
---|
156 | {
|
---|
157 | int PCI_actif; // le PCI est actif
|
---|
158 |
|
---|
159 |
|
---|
160 | table_tm tm; // table de telemesure
|
---|
161 | table_tc tc; // table de télécommande
|
---|
162 |
|
---|
163 | table_erreur te; // table courante pour gestion des erreurs de bus PCI
|
---|
164 |
|
---|
165 | int nb_lec_fofo_int; // nombre maxi de lectures dans la fifo en un coups d'interrupt
|
---|
166 | int nb_lec_fofo_ext; // communication avec le prog principal: remis a zero apres lecture
|
---|
167 |
|
---|
168 | int signal_scan_immediat; // signal scan immediat pour savoir avant
|
---|
169 |
|
---|
170 |
|
---|
171 | param_bolo param; // liste bolo dans le programme d'interruption
|
---|
172 | reglage_bolo reglage; // etat bolo dans le programme interruption
|
---|
173 |
|
---|
174 | detec_sync ds; // registres pour detection synchrone numerique
|
---|
175 | // ----- communication directe avec le prog de lecture_fifo en interruption
|
---|
176 |
|
---|
177 |
|
---|
178 | var_internes vi; // variables internes du programme d'interruption
|
---|
179 | }
|
---|
180 | tmtc;
|
---|
181 |
|
---|
182 | extern tmtc *tt;
|
---|
183 |
|
---|