1 |
/**************************************************************************** |
2 |
* F i l e D a t a |
3 |
* $Id: KHB_Driver_INFN.c,v 1.73 2005/03/20 18:20:32 sebastiani Exp $ |
4 |
* $Revision: 1.73 $ |
5 |
* $Date: 2005/03/20 18:20:32 $ |
6 |
* $RCSfile: KHB_Driver_INFN.c,v $ |
7 |
* |
8 |
**************************************************************************** |
9 |
* S W D e v e l o p m e n t E n v i r o n m e n t |
10 |
* |
11 |
* $Author: sebastiani $ |
12 |
* : |
13 |
**************************************************************************** |
14 |
* U p d a t i n g |
15 |
|
16 |
* $Log: KHB_Driver_INFN.c,v $ |
17 |
* Revision 1.73 2005/03/20 18:20:32 sebastiani |
18 |
* PRH_VAR_RM_IDAQONLYACQ cancelled |
19 |
* |
20 |
* Revision 1.72 2005/02/24 16:51:19 sebastiani |
21 |
* more comments in logs |
22 |
* |
23 |
* Revision 1.71 2005/02/21 08:58:29 sebastiani |
24 |
* all log comments completed |
25 |
* |
26 |
* Revision 1.70 2005/02/19 10:19:38 sebastiani |
27 |
* ALM_S4_CALIB_00_HARD,ALM_S4_CALIB_00_SOFT,ALM_S4_128TRIGGER_0 added |
28 |
* |
29 |
* Revision 1.69 2005/01/26 18:46:48 sebastiani |
30 |
* new bug fixes for WS |
31 |
* |
32 |
* Revision 1.68 2005/01/07 15:41:51 sebastiani |
33 |
* fix alarm precedure |
34 |
* add exp 64 delay patch |
35 |
* removed unused sleep |
36 |
* |
37 |
* Revision 1.67 2004/12/17 12:46:40 faber |
38 |
* ALARM REGISTER aligned to be 32 bit. memory aling core dump (should be) fixed |
39 |
* |
40 |
* Revision 1.66 2004/12/15 09:21:33 sebastiani |
41 |
* KHB_ALARM_MASK_ALL introduced |
42 |
* |
43 |
* Revision 1.65 2004/11/19 15:14:52 sebastiani |
44 |
* PRH_EXTERN_{VAR,ARR,TABLE} removed and put them on the autogenerated parameter heeader file |
45 |
* |
46 |
* Revision 1.64 2004/11/18 16:02:34 sebastiani |
47 |
* GAS/TRD removed |
48 |
* |
49 |
* Revision 1.63 2004/11/05 09:36:35 sebastiani |
50 |
* first version of the PM state machine. tried but not deeply tested |
51 |
* |
52 |
* Revision 1.62 2004/10/19 16:59:27 sebastiani |
53 |
* first text for IPM/ciclyc |
54 |
* |
55 |
* Revision 1.61 2004/10/08 15:57:51 sebastiani |
56 |
* fix power hot cold variables settings. |
57 |
* fix ws |
58 |
* added function to set khb hot or cold |
59 |
* |
60 |
* Revision 1.60 2004/10/04 08:25:06 sebastiani |
61 |
* *** empty log message *** |
62 |
* |
63 |
* Revision 1.59 2004/09/17 15:01:00 faber |
64 |
* LU_INFN_LOG flags fixing |
65 |
* |
66 |
* Revision 1.58 2004/09/14 13:05:37 alfarano |
67 |
* update TM constants and definitions |
68 |
* |
69 |
* Revision 1.57 2004/08/27 13:30:39 alfarano |
70 |
* cvs header |
71 |
* |
72 |
* Revision 1.1 2003/10/03 16:12:26 faber |
73 |
* *** empty log message *** |
74 |
* |
75 |
* |
76 |
*****************************************************************************/ |
77 |
/*============================= Include File ================================*/ |
78 |
|
79 |
#include <src/INFN/LU_SourceFileID_INFN.h> |
80 |
#define __FILEID__ _KHB_Driver_INFN__c |
81 |
#include <src/INFN/PRH_ParamHandler_INFN.h> |
82 |
#include <src/INFN/LU_LogUtility_INFN.h> |
83 |
#include <src/INFN/PRH_ParamHandler_INFN_auto.h> |
84 |
LU_DECL_MASK(); |
85 |
|
86 |
#include <src/TM_TCManager/TMTCManager/TM_TMTCManager_p.h> |
87 |
#include <src/INFN/CM_Common_INFN.h> |
88 |
#include <src/INFN/KHB_Driver_INFN.h> |
89 |
|
90 |
|
91 |
/*============================== global variables ==========================*/ |
92 |
|
93 |
/* this variable contains which serial line is enabled: |
94 |
SERIAL_LINE_1 or SERIAL_LINE_2 |
95 |
*/ |
96 |
static BYTE KHB_SerialLine; |
97 |
|
98 |
/* this variable contains which DBL line is enabled */ |
99 |
static UINT32 KHB_DBC_Status; |
100 |
|
101 |
/* Code for serial write and read operation from KHB and DBC lines */ |
102 |
|
103 |
static KHB_ADDR_TYPE KHB_SerialAddress[2]={{TM_KHB_HOT,TM_KHB_DS_HOT,KHB_DBC0_HI_1,KHB_DBC1_HI_1}, |
104 |
{TM_KHB_COLD,TM_KHB_DS_COLD,KHB_DBC0_HI_2,KHB_DBC1_HI_2}}; |
105 |
|
106 |
/*============================ Functions ====================================*/ |
107 |
|
108 |
status_code KHB_Init() |
109 |
{ |
110 |
KHB_SetSerialLine(CM_HOT); |
111 |
KHB_DBC_Status = 0; |
112 |
|
113 |
return SUCCESSFUL; |
114 |
} |
115 |
|
116 |
status_code KHB_InitBoard(/*XX*/) |
117 |
{ |
118 |
status_code status; |
119 |
UINT16 reg; |
120 |
|
121 |
//KHB_SetSerialLine(XX); |
122 |
|
123 |
status = KHB_HWReset(); |
124 |
|
125 |
// some delay here ? |
126 |
|
127 |
if (status== CM_RC_SUCCESSFUL) |
128 |
{ |
129 |
status = KHB_UpdateMaskRegister(KHB_ALARM_MASK_NONE,KHB_PRESET); |
130 |
if(status == CM_RC_SUCCESSFUL) { |
131 |
status=KHB_ReadStatusRegister(®); |
132 |
if(status != CM_RC_SUCCESSFUL || ((reg & KHB_STATUS_MASK) != KHB_STATUS_VALUE) ) { |
133 |
/*@LOG InitBoard: status register not the same as written - khb_status_reg */ |
134 |
LU_INFN_LOG(LU_WARNING|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,reg); |
135 |
status= CM_RC_KHB_ERROR; |
136 |
} |
137 |
} |
138 |
} |
139 |
|
140 |
#if 0 |
141 |
/* old code: no special reason to work on mask register */ |
142 |
if (!status) |
143 |
{ |
144 |
status = KHB_UpdateMaskRegister(KHB_START_MASK,KHB_PRESET); |
145 |
|
146 |
if (!status) |
147 |
{ |
148 |
status = KHB_ReadMaskRegister(®); |
149 |
|
150 |
if(!status) |
151 |
if (reg != KHB_START_MASK) |
152 |
status = CM_RC_INTERNAL_ERR; |
153 |
} |
154 |
} |
155 |
|
156 |
if (!status) |
157 |
status = KHB_UpdateMaskRegister(KHB_MASK_NONE,KHB_PRESET); |
158 |
#endif |
159 |
/*@LOG InitBoard trace - status */ |
160 |
LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,status); |
161 |
return(status); |
162 |
} |
163 |
|
164 |
/*****************************************************************************/ |
165 |
/* |
166 |
* KHB_SetSerialLine |
167 |
* |
168 |
* Selects the serial line to use |
169 |
* |
170 |
* Input parameters: |
171 |
* line = selects SERIAL_LINE_1 or SERIAL_LINE_2 |
172 |
* |
173 |
* Output parameters: status_code |
174 |
* |
175 |
*/ |
176 |
/*****************************************************************************/ |
177 |
|
178 |
status_code KHB_SetSerialLine(CM_HOT_COLD hl) |
179 |
{ |
180 |
if(hl == CM_HOT) |
181 |
KHB_SerialLine = KHB_SERIAL_HOT; |
182 |
else |
183 |
KHB_SerialLine = KHB_SERIAL_COLD; |
184 |
return(SUCCESSFUL); |
185 |
} |
186 |
|
187 |
/*****************************************************************************/ |
188 |
/* |
189 |
* KHB_GetSerialLine |
190 |
* |
191 |
* Selects the serial line to use |
192 |
* |
193 |
* Input parameters: |
194 |
* pointer to khb hot cold status (selected by SERIAL_LINE_1 or SERIAL_LINE_2) |
195 |
* |
196 |
* Output parameters: status_code |
197 |
* |
198 |
*/ |
199 |
/*****************************************************************************/ |
200 |
|
201 |
status_code KHB_GetSerialLine(CM_HOT_COLD *hl) |
202 |
{ |
203 |
if(hl){ |
204 |
if(KHB_SerialLine == KHB_SERIAL_HOT) |
205 |
*hl = CM_HOT; |
206 |
else |
207 |
*hl = CM_COLD; |
208 |
} |
209 |
return(SUCCESSFUL); |
210 |
} |
211 |
|
212 |
|
213 |
/*****************************************************************************/ |
214 |
/* |
215 |
* KHB_SendFECommand |
216 |
* |
217 |
* Sends a write command to KHB |
218 |
* |
219 |
* Input parameters: |
220 |
* link = selects which link to send the commnand |
221 |
* counter = sets how many words will follow the command |
222 |
* expected = sets how many words are expected from reply |
223 |
* |
224 |
* |
225 |
* Output parameters: status_code |
226 |
* |
227 |
*/ |
228 |
/*****************************************************************************/ |
229 |
|
230 |
status_code KHB_SendFECommand(BYTE link,BYTE counter,BYTE expected,UINT16 *buffer) |
231 |
{ |
232 |
int i; |
233 |
status_code status; |
234 |
KHB_COMMAND_TYPE KHB_Command; |
235 |
TM_TC_ML com_to_send[4]; |
236 |
|
237 |
KHB_Command.link = link; |
238 |
KHB_Command.clear = 0; |
239 |
KHB_Command.output = NULL; |
240 |
KHB_Command.counter_command = counter+1; // including end pattern |
241 |
KHB_Command.counter_answer = expected; |
242 |
|
243 |
com_to_send[0].Code = KHB_SerialAddress[KHB_SerialLine].writeAddr; |
244 |
com_to_send[0].Value = (UINT32)*(UINT16*)&KHB_Command; |
245 |
|
246 |
for (i=1; i < counter+1; i++) |
247 |
{ |
248 |
com_to_send[i].Code = KHB_SerialAddress[KHB_SerialLine].writeAddr; |
249 |
com_to_send[i].Value = (UINT32)*buffer++; |
250 |
} |
251 |
|
252 |
com_to_send[i].Code = KHB_SerialAddress[KHB_SerialLine].writeAddr; |
253 |
com_to_send[i].Value = KHB_END_PATTERN; |
254 |
|
255 |
// status = TM_piSendTC(KHB_SerialAddress[KHB_SerialLine].writeAddr,*(UINT16*)&KHB_Command); |
256 |
// if (!status) |
257 |
status = TM_piSendMLTC(com_to_send,counter+2); |
258 |
|
259 |
return(status); |
260 |
} |
261 |
|
262 |
|
263 |
/*****************************************************************************/ |
264 |
/* |
265 |
* KHB_WriteMaskRegister |
266 |
* |
267 |
* Sends a write command to KHB |
268 |
* |
269 |
* Input parameters: maskvalue = set the mask value to write |
270 |
* |
271 |
* |
272 |
* Output parameters: status_code |
273 |
* |
274 |
*/ |
275 |
/*****************************************************************************/ |
276 |
|
277 |
status_code KHB_WriteMaskRegister(UINT16 mask_reg) |
278 |
{ |
279 |
int i; |
280 |
status_code status; |
281 |
KHB_COMMAND_TYPE KHB_Command; |
282 |
TM_TC_ML com_to_send[3]; |
283 |
|
284 |
KHB_Command.link = KHB_INTERNAL_LINK; |
285 |
KHB_Command.clear = 0; |
286 |
KHB_Command.counter_command = 2; |
287 |
KHB_Command.counter_answer = NULL; |
288 |
KHB_Command.output = NULL; |
289 |
|
290 |
for(i=0; i < 3; i++) |
291 |
com_to_send[i].Code = KHB_SerialAddress[KHB_SerialLine].writeAddr; |
292 |
|
293 |
com_to_send[0].Value = *(UINT16*)&KHB_Command; |
294 |
com_to_send[1].Value = mask_reg; |
295 |
com_to_send[2].Value = KHB_END_PATTERN; |
296 |
|
297 |
status = TM_piSendMLTC(com_to_send,3); |
298 |
return(status); |
299 |
} |
300 |
|
301 |
|
302 |
/*****************************************************************************/ |
303 |
/* |
304 |
* KHB_RequestKHBReg |
305 |
* |
306 |
* Sends a write command to KHB |
307 |
* |
308 |
* Input parameters: |
309 |
* output = sets which register to read |
310 |
* expected = sets how many words are expected from reply in case |
311 |
* object is data buffer |
312 |
* |
313 |
* |
314 |
* Output parameters: status_code |
315 |
* |
316 |
*/ |
317 |
/*****************************************************************************/ |
318 |
|
319 |
status_code KHB_RequestKHBReg(BYTE output,BYTE expected) |
320 |
{ |
321 |
status_code status; |
322 |
KHB_COMMAND_TYPE KHB_Command; |
323 |
TM_TC_ML com_to_send[2]; |
324 |
|
325 |
KHB_Command.link = NULL; |
326 |
KHB_Command.clear = 0; |
327 |
KHB_Command.output = output; |
328 |
KHB_Command.counter_command = 1; |
329 |
KHB_Command.counter_answer = expected; |
330 |
|
331 |
com_to_send[0].Code = com_to_send[1].Code = KHB_SerialAddress[KHB_SerialLine].writeAddr; |
332 |
com_to_send[0].Value = *(UINT16*)&KHB_Command; |
333 |
com_to_send[1].Value = KHB_END_PATTERN; |
334 |
|
335 |
status = TM_piSendMLTC(com_to_send,2); |
336 |
return(status); |
337 |
} |
338 |
|
339 |
|
340 |
/*****************************************************************************/ |
341 |
/* |
342 |
* KHB_ReadMaskRegister |
343 |
* |
344 |
* read mask register |
345 |
* |
346 |
* Input parameters: none |
347 |
* |
348 |
* Output parameters: status_code |
349 |
* |
350 |
*/ |
351 |
/*****************************************************************************/ |
352 |
|
353 |
status_code KHB_ReadMaskRegister(UINT16 *value) |
354 |
{ |
355 |
status_code status; |
356 |
UINT16 temp; |
357 |
static int sleep0=2,sleep1=1; |
358 |
|
359 |
if(sleep0) |
360 |
OS_piTaskSuspend (sleep0); |
361 |
|
362 |
status = KHB_RequestKHBReg(MASK_REG,0); |
363 |
|
364 |
if (!status) |
365 |
{ |
366 |
status = KHB_SetKHBMode(READ_OBJ_MODE); |
367 |
|
368 |
if(sleep1) |
369 |
OS_piTaskSuspend (sleep1); |
370 |
|
371 |
if (!status) |
372 |
{ |
373 |
status = TM_piGetKHBValue(KHB_SerialAddress[KHB_SerialLine].readAddr,&temp,1); |
374 |
if (!status) |
375 |
{ |
376 |
*value = temp; |
377 |
status = KHB_SetKHBMode(READ_STATUS_MODE); |
378 |
} |
379 |
} |
380 |
} |
381 |
return(status); |
382 |
} |
383 |
|
384 |
/*****************************************************************************/ |
385 |
/* |
386 |
* KHB_UpdateMaskRegister |
387 |
* |
388 |
* update mask register |
389 |
* |
390 |
* Input parameters: none |
391 |
* |
392 |
* Output parameters: status_code |
393 |
* |
394 |
*/ |
395 |
/*****************************************************************************/ |
396 |
|
397 |
status_code KHB_UpdateMaskRegister(UINT16 bitmask,BYTE action) |
398 |
{ |
399 |
UINT16 KHB_MaskRegister; |
400 |
status_code status; |
401 |
|
402 |
status = KHB_ReadMaskRegister(&KHB_MaskRegister); |
403 |
|
404 |
switch (action) |
405 |
{ |
406 |
case KHB_BITSET : |
407 |
KHB_MaskRegister |= bitmask; |
408 |
break; |
409 |
case KHB_BITRESET : |
410 |
KHB_MaskRegister &= ~bitmask; |
411 |
break; |
412 |
case KHB_PRESET : |
413 |
KHB_MaskRegister = bitmask; |
414 |
break; |
415 |
} |
416 |
|
417 |
if (!status) |
418 |
status = KHB_WriteMaskRegister(KHB_MaskRegister); |
419 |
|
420 |
return(status); |
421 |
} |
422 |
|
423 |
|
424 |
/*****************************************************************************/ |
425 |
/* |
426 |
* KHB_ReadStatusRegister |
427 |
* |
428 |
* Read the status register (provided that DBC1 is high) |
429 |
* |
430 |
* Input parameters: status_reg will contain the status register read |
431 |
* |
432 |
* Output parameters: status_code |
433 |
* |
434 |
*/ |
435 |
/*****************************************************************************/ |
436 |
|
437 |
status_code KHB_ReadStatusRegister(UINT16 *status_reg) |
438 |
{ |
439 |
status_code status; |
440 |
|
441 |
status = KHB_SetKHBMode(READ_STATUS_MODE); |
442 |
|
443 |
if (!status) { |
444 |
status = KHB_ReadCurrentVal(status_reg); |
445 |
*status_reg ^= KHB_STS_XORED_BITS; |
446 |
/* apply low level mask to disable definitively dummy alarms: */ |
447 |
*status_reg &= ~((UINT16)PRH_VAR_KHB_STATUS_REG_LOW_LEVEL_MASK); |
448 |
} |
449 |
|
450 |
return(status); |
451 |
} |
452 |
|
453 |
/*****************************************************************************/ |
454 |
/* |
455 |
* KHB_ReadAlarmRegister |
456 |
* |
457 |
* Read the alarm register |
458 |
* |
459 |
* Input parameters : alarm32 will contain two words (16 bit) from the alarm |
460 |
* registers: |
461 |
* the higher 16 bit will contain all errors occured |
462 |
* the lower 16 bit will contain the first error occured |
463 |
* |
464 |
* Output parameters: status_code |
465 |
* |
466 |
*/ |
467 |
/*****************************************************************************/ |
468 |
|
469 |
status_code KHB_ReadAlarmRegister(UINT32 *alarm) |
470 |
{ |
471 |
status_code status,modestatus=CM_RC_SUCCESSFUL; |
472 |
UINT16 tmp; |
473 |
|
474 |
static int sleep2=1; |
475 |
|
476 |
status = KHB_SetKHBMode(READ_OBJ_MODE); |
477 |
|
478 |
if (!status) |
479 |
{ |
480 |
status = KHB_RequestKHBReg(ALARM_REG,0); |
481 |
|
482 |
if (!status) |
483 |
{ |
484 |
status = KHB_ReadCurrentVal(&tmp); |
485 |
if (!status) |
486 |
{ |
487 |
*alarm = (( (tmp & KHB_ALARM_MASK_ALL ) ^ KHB_ALARM_XORED_BITS)<<16); |
488 |
if(sleep2) |
489 |
OS_piTaskSuspend (sleep2); |
490 |
status = KHB_ReadCurrentVal(&tmp); |
491 |
if (!status) |
492 |
{ |
493 |
*alarm |= (tmp & KHB_ALARM_MASK_ALL) ^ KHB_ALARM_XORED_BITS; |
494 |
/* apply low level mask to disable definitively dummy alarms: */ |
495 |
*alarm &= ~((UINT16)PRH_VAR_KHB_ALARM_REG_LOW_LEVEL_MASK); |
496 |
} |
497 |
} |
498 |
} |
499 |
modestatus = KHB_SetKHBMode(READ_STATUS_MODE); |
500 |
} |
501 |
return ((status!=CM_RC_SUCCESSFUL) ? status : modestatus); |
502 |
} |
503 |
|
504 |
/*****************************************************************************/ |
505 |
/* |
506 |
* KHB_ReadBuffer |
507 |
* |
508 |
* Request for buffer |
509 |
* |
510 |
* Input parameters: expected = word expected to receive |
511 |
* |
512 |
* |
513 |
* Output parameters: status_code |
514 |
* |
515 |
*/ |
516 |
/*****************************************************************************/ |
517 |
|
518 |
status_code KHB_ReadBuffer(BYTE expected,UINT16 *buffer) |
519 |
{ |
520 |
status_code status; |
521 |
UINT16 status_reg; |
522 |
|
523 |
status = KHB_SetKHBMode(READ_OBJ_MODE); |
524 |
|
525 |
if (!status) |
526 |
status = KHB_RequestKHBReg(BUFFER,0); |
527 |
|
528 |
if (!status) |
529 |
status = TM_piGetKHBValue(KHB_SerialAddress[KHB_SerialLine].readAddr,buffer,expected); |
530 |
|
531 |
status = KHB_SetKHBMode(READ_STATUS_MODE); |
532 |
|
533 |
return(status); |
534 |
} |
535 |
|
536 |
/*****************************************************************************/ |
537 |
/* |
538 |
* KHB_Clear |
539 |
* |
540 |
* Clear the KHB buffer |
541 |
* |
542 |
* Input parameters: none |
543 |
* |
544 |
* |
545 |
* Output parameters: status_code |
546 |
* |
547 |
*/ |
548 |
/*****************************************************************************/ |
549 |
|
550 |
status_code KHB_SendClearFE() |
551 |
{ |
552 |
status_code status; |
553 |
KHB_COMMAND_TYPE KHB_Command; |
554 |
TM_TC_ML com_to_send[2]; |
555 |
|
556 |
KHB_Command.link = NULL; |
557 |
KHB_Command.clear = 1; |
558 |
KHB_Command.output = NULL; |
559 |
KHB_Command.counter_command = 1; |
560 |
KHB_Command.counter_answer = NULL; |
561 |
|
562 |
com_to_send[0].Code = com_to_send[1].Code = KHB_SerialAddress[KHB_SerialLine].writeAddr; |
563 |
com_to_send[0].Value = *(UINT16*)&KHB_Command; |
564 |
com_to_send[1].Value = KHB_END_PATTERN; |
565 |
|
566 |
status = TM_piSendMLTC(com_to_send,2); |
567 |
return(status); |
568 |
} |
569 |
|
570 |
status_code KHB_ReadCurrentVal(UINT16 *value) |
571 |
{ |
572 |
status_code status; |
573 |
UINT16 tmp; |
574 |
|
575 |
status = TM_piGetKHBValue(KHB_SerialAddress[KHB_SerialLine].readAddr,&tmp,1); |
576 |
*value = tmp; |
577 |
return(status); |
578 |
} |
579 |
|
580 |
status_code KHB_SendTrigger() |
581 |
{ |
582 |
status_code status; |
583 |
KHB_COMMAND_TYPE KHB_Command; |
584 |
TM_TC_ML com_to_send[2]; |
585 |
|
586 |
KHB_Command.link = NULL; |
587 |
KHB_Command.clear = 1; |
588 |
KHB_Command.output = NULL; |
589 |
KHB_Command.counter_command = 1; |
590 |
KHB_Command.counter_answer = NULL; |
591 |
KHB_Command.trigger = 0xa; |
592 |
|
593 |
com_to_send[0].Code = com_to_send[1].Code = KHB_SerialAddress[KHB_SerialLine].writeAddr; |
594 |
com_to_send[0].Value = *(UINT16*)&KHB_Command; |
595 |
com_to_send[1].Value = KHB_END_PATTERN; |
596 |
|
597 |
status = TM_piSendMLTC(com_to_send,2); |
598 |
return(status); |
599 |
} |
600 |
|
601 |
/*****************************************************************************/ |
602 |
/* |
603 |
* KHB_HWReset |
604 |
* |
605 |
* Reset the KHB |
606 |
* |
607 |
* Input parameters: none |
608 |
* |
609 |
* |
610 |
* Output parameters: status_code |
611 |
* |
612 |
*/ |
613 |
/*****************************************************************************/ |
614 |
|
615 |
status_code KHB_HWReset() |
616 |
{ |
617 |
status_code status; |
618 |
|
619 |
// static int sleep0=1; |
620 |
// if(sleep0) |
621 |
// OS_piTaskSuspend (sleep0); |
622 |
|
623 |
|
624 |
KHB_SetDBC0(KHB_BITRESET); |
625 |
|
626 |
status = TM_piSendTC(TM_DBL_CMD,KHB_DBC_Status); |
627 |
|
628 |
if (!status) |
629 |
{ |
630 |
KHB_SetDBC0(KHB_BITSET); |
631 |
KHB_SetDBC1(KHB_BITSET); |
632 |
// if(sleep0) |
633 |
// OS_piTaskSuspend (sleep0); |
634 |
status = TM_piSendTC(TM_DBL_CMD,KHB_DBC_Status); |
635 |
} |
636 |
return(status); |
637 |
} |
638 |
|
639 |
status_code KHB_SetKHBMode(KHB_MODE mode) |
640 |
{ |
641 |
status_code status; |
642 |
|
643 |
if (mode == READ_STATUS_MODE) |
644 |
KHB_SetDBC1(KHB_BITSET); |
645 |
else |
646 |
KHB_SetDBC1(KHB_BITRESET); |
647 |
|
648 |
status = TM_piSendTC(TM_DBL_CMD,KHB_DBC_Status); |
649 |
|
650 |
return(status); |
651 |
} |
652 |
|
653 |
status_code KHB_SetDBC0(BYTE status) |
654 |
{ |
655 |
if (status == KHB_BITSET) |
656 |
KHB_DBC_Status |= KHB_SerialAddress[KHB_SerialLine].dbc0hi; |
657 |
else |
658 |
KHB_DBC_Status &= ~KHB_SerialAddress[KHB_SerialLine].dbc0hi; |
659 |
|
660 |
return CM_RC_SUCCESSFUL; |
661 |
} |
662 |
|
663 |
status_code KHB_SetDBC1(BYTE status) |
664 |
{ |
665 |
if (status == KHB_BITSET) |
666 |
KHB_DBC_Status |= KHB_SerialAddress[KHB_SerialLine].dbc1hi; |
667 |
else |
668 |
KHB_DBC_Status &= ~KHB_SerialAddress[KHB_SerialLine].dbc1hi; |
669 |
|
670 |
return CM_RC_SUCCESSFUL; |
671 |
} |
672 |
|
673 |
|
674 |
|
675 |
// Test Functions |
676 |
|
677 |
|
678 |
status_code KHB_Log() |
679 |
{ |
680 |
status_code statusMask,statusStatus; |
681 |
UINT16 mask; |
682 |
UINT16 reg; |
683 |
|
684 |
statusMask = KHB_ReadMaskRegister(&mask); |
685 |
statusStatus = KHB_ReadStatusRegister(®); |
686 |
/*@LOG KHB Log: mask */ |
687 |
LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,mask); |
688 |
/*@LOG KHB Log: reg */ |
689 |
LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,reg); |
690 |
/*@LOG KHB Log: status_mask */ |
691 |
LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,statusMask); |
692 |
/*@LOG KHB Log: status_khb_status */ |
693 |
LU_INFN_LOG(LU_NORMAL_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,statusStatus); |
694 |
|
695 |
return(CM_RC_SUCCESSFUL); |
696 |
} |
697 |
|
698 |
status_code KHB_TestBoard(unsigned short selected_test) |
699 |
{ |
700 |
int x; |
701 |
static int n; |
702 |
int test; |
703 |
int a=1,b=1,c=1,d=1,e=1; |
704 |
UINT16 value[3]; |
705 |
|
706 |
n = 1000; |
707 |
test = selected_test; |
708 |
|
709 |
switch(test) |
710 |
{ |
711 |
case 0: |
712 |
{ |
713 |
int i; |
714 |
UINT16 mask; |
715 |
status_code status; |
716 |
|
717 |
status = KHB_UpdateMaskRegister(KHB_START_MASK,KHB_PRESET); |
718 |
|
719 |
for (i=0; i < 1000; i++) |
720 |
{ |
721 |
status = KHB_ReadMaskRegister(&mask); |
722 |
if(!status) |
723 |
if (mask != KHB_START_MASK) |
724 |
{ |
725 |
status = CM_RC_INTERNAL_ERR; |
726 |
break; |
727 |
} |
728 |
} |
729 |
} |
730 |
break; |
731 |
case 1: |
732 |
{ |
733 |
int i; |
734 |
UINT16 reg; |
735 |
status_code status; |
736 |
|
737 |
for (i=0; i < 1000; i++) |
738 |
{ |
739 |
status = KHB_ReadStatusRegister(®); |
740 |
if (reg != KHB_STATUS_VALUE) |
741 |
{ |
742 |
status = CM_RC_INTERNAL_ERR; |
743 |
break; |
744 |
} |
745 |
} |
746 |
} |
747 |
break; |
748 |
case 2: |
749 |
{ |
750 |
UINT32 alarm; |
751 |
UINT16 statusw; |
752 |
int a=1,b=1; |
753 |
status_code status; |
754 |
|
755 |
if (a) |
756 |
status = KHB_ReadAlarmRegister(&alarm); |
757 |
if (b) |
758 |
status = KHB_ReadStatusRegister(&statusw); |
759 |
} |
760 |
break; |
761 |
|
762 |
} |
763 |
} |
764 |
|
765 |
|
766 |
UINT32 KHB_GetSerialLineReadAddress(){ |
767 |
return KHB_SerialAddress[KHB_SerialLine].readAddr; |
768 |
} |