📄 diag.lst
字号:
238 2 }
239 1 }
240
241 /********************************************************************/
242 /* */
243 /* Rx Power Diagnostic routine */
244 /* */
245 /********************************************************************/
246 void rx_power_diag(BYTE msb, BYTE lsb, BYTE addr){
247 1
248 1 BYTE result;
249 1 HALFWORD monitor = (msb<<8) + lsb;
250 1 HALFWORD high_alarm = (A2h[addr ]<<8) + A2h[addr+1];
251 1 HALFWORD low_alarm = (A2h[addr+2]<<8) + A2h[addr+3];
252 1 HALFWORD high_warning = (A2h[addr+4]<<8) + A2h[addr+5];
253 1 HALFWORD low_warning = (A2h[addr+6]<<8) + A2h[addr+7];
254 1
255 1 if (monitor>high_alarm) result=5;
256 1 else if (monitor>high_warning && monitor<=high_alarm) result=4;
257 1 else if (monitor<=high_warning && monitor>=low_warning) result=3;
ARM COMPILER V2.32a, diag 08/08/05 09:50:22 PAGE 5
258 1 else if (monitor<low_warning && monitor>= low_alarm) result=2;
259 1 else result=1;
260 1
261 1 switch (result)
262 1 {
263 2 case 5:
264 2 A2h[113] |= 0x80; // set high alarm flag bit7
265 2 A2h[117] |= 0x80; // set high warning flag bit7
266 2 A2h[117] &= 0xBF; // clear low warning flag bit6
267 2 A2h[113] &= 0xBF; // clear low alarm flag bit6
268 2 break;
269 2 case 4:
270 2 A2h[113] &= 0x7F; // clear high alarm flag bit7
271 2 A2h[117] |= 0x80; // set high warning flag bit7
272 2 A2h[117] &= 0xBF; // clear low warning flag bit6
273 2 A2h[113] &= 0xBF; // clear low alarm flag bit6
274 2 break;
275 2 case 3:
276 2 A2h[113] &= 0x7F; // clear high alarm flag bit7
277 2 A2h[117] &= 0x7F; // clear high warning flag bit7
278 2 A2h[117] &= 0xBF; // clear low warning flag bit6
279 2 A2h[113] &= 0xBF; // clear low alarm flag bit6
280 2 break;
281 2 case 2:
282 2 A2h[113] &= 0x7F; // clear high alarm flag bit7
283 2 A2h[117] &= 0x7F; // clear high warning flag bit7
284 2 A2h[117] |= 0x40; // set low warning flag bit6
285 2 A2h[113] &= 0xBF; // clear low alarm flag bit6
286 2 break;
287 2 case 1:
288 2 A2h[113] &= 0x7F; // clear high alarm flag bit7
289 2 A2h[117] &= 0x7F; // clear high warning flag bit7
290 2 A2h[117] |= 0x40; // set low warning flag bit6
291 2 A2h[113] |= 0x40; // set low alarm flag bit6
292 2 break;
293 2 }
294 1 }
295
296
297 /********************************************************************/
298 /* */
299 /* Check fault recovery status */
300 /* */
301 /********************************************************************/
302 void fault_recovery_check(void){
303 1
304 1 // latch Tx Laser Fault condition
305 1 if (!(GP0DAT & 0x00000010)) // check if Laser fault recovered
306 1 {
307 2 IRQEN |= 0x00008000; // enable XIRQ0 again
308 2 A2h[110] &= 0xFB; // clear bit2
309 2 }
310 1
311 1 // latch Tx Laser disable state
312 1 if (!(GP0DAT & 0x00000020)) // check if Laser disable recovered
313 1 {
314 2 IRQEN |= 0x00040000; // enable XIRQ1 again
315 2 A2h[110] &= 0x7F; // clear bit7
316 2 }
317 1
318 1 /*
319 1 // latch Rx LOS
320 1 if (!(GP1DAT & 0x00000010)) // check if LOS recovered
321 1 {
322 1 IRQEN |= 0x00080000; // enable PLAIRQ0 again
323 1 A2h[110] &= 0xFD; // clear bit1
ARM COMPILER V2.32a, diag 08/08/05 09:50:22 PAGE 6
324 1 }
325 1
326 1 // latch Rx Rate Sel
327 1 if (!(GP1DAT & 0x00000020)) // check if Rate Sel is LOW state
328 1 {
329 1 IRQEN |= 0x00100000; // enable PLAIRQ1 again
330 1 A2h[110] &= 0xEF; // clear bit4
331 1 }
332 1 */
333 1 }
334
335 /********************************************************************/
336 /* */
337 /* Check LOS and RateSel bits */
338 /* */
339 /********************************************************************/
340 void check_los_ratesel(void){
341 1
342 1 // LOS P1.4
343 1 if((GP1DAT & 0x00000010)) A2h[110] |= 0x02; // set bit1(LOS)
344 1 else A2h[110] &= 0xFD; // clear bit1
345 1
346 1 // RateSel P1.5
347 1 if((GP1DAT & 0x00000020)) A2h[110] |= 0x10; // set bit4(RateSel)
348 1 else A2h[110] &= 0xEF; // clear bit4
349 1
350 1 }
351
ARM COMPILER V2.32a, diag 08/08/05 09:50:22 PAGE 7
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN DATA (A2h)
*** PUBLICS:
PUBLIC temp_diag?T
PUBLIC voltage_diag?T
PUBLIC tx_bias_diag?T
PUBLIC tx_power_diag?T
PUBLIC rx_power_diag?T
PUBLIC fault_recovery_check?T
PUBLIC diag?T
PUBLIC check_los_ratesel?T
*** CODE SEGMENT '?PR?diag?T?diag':
11: void diag(void){
00000000 B500 PUSH {LR}
12: temp_diag(A2h[96], A2h[97], 0);
00000002 4800 LDR R0,=A2h + 0x60 ; A2h+96
00000004 7800 LDRB R0,[R0,#0x0] ; A2h+96
00000006 4800 LDR R1,=A2h + 0x61 ; A2h+97
00000008 7809 LDRB R1,[R1,#0x0] ; A2h+97
0000000A 2200 MOV R2,#0x0
0000000C F7FF BL temp_diag?T ; T=0x0001 (1)
0000000E FFF8 BL temp_diag?T ; T=0x0001 (2)
13: voltage_diag(A2h[98], A2h[99], 8);
00000010 4800 LDR R0,=A2h + 0x62 ; A2h+98
00000012 7800 LDRB R0,[R0,#0x0] ; A2h+98
00000014 4800 LDR R1,=A2h + 0x63 ; A2h+99
00000016 7809 LDRB R1,[R1,#0x0] ; A2h+99
00000018 2208 MOV R2,#0x8
0000001A F7FF BL voltage_diag?T ; T=0x0001 (1)
0000001C FFF1 BL voltage_diag?T ; T=0x0001 (2)
14: tx_bias_diag(A2h[100], A2h[101], 16);
0000001E 4800 LDR R0,=A2h + 0x64 ; A2h+100
00000020 7800 LDRB R0,[R0,#0x0] ; A2h+100
00000022 4800 LDR R1,=A2h + 0x65 ; A2h+101
00000024 7809 LDRB R1,[R1,#0x0] ; A2h+101
00000026 2210 MOV R2,#0x10
00000028 F7FF BL tx_bias_diag?T ; T=0x0001 (1)
0000002A FFEA BL tx_bias_diag?T ; T=0x0001 (2)
15: tx_power_diag(A2h[102], A2h[103], 24);
0000002C 4800 LDR R0,=A2h + 0x66 ; A2h+102
0000002E 7800 LDRB R0,[R0,#0x0] ; A2h+102
00000030 4800 LDR R1,=A2h + 0x67 ; A2h+103
00000032 7809 LDRB R1,[R1,#0x0] ; A2h+103
00000034 2218 MOV R2,#0x18
00000036 F7FF BL tx_power_diag?T ; T=0x0001 (1)
00000038 FFE3 BL tx_power_diag?T ; T=0x0001 (2)
16: rx_power_diag(A2h[104], A2h[105], 32);
0000003A 4800 LDR R0,=A2h + 0x68 ; A2h+104
0000003C 7800 LDRB R0,[R0,#0x0] ; A2h+104
0000003E 4800 LDR R1,=A2h + 0x69 ; A2h+105
00000040 7809 LDRB R1,[R1,#0x0] ; A2h+105
00000042 2220 MOV R2,#0x20
00000044 F7FF BL rx_power_diag?T ; T=0x0001 (1)
00000046 FFDC BL rx_power_diag?T ; T=0x0001 (2)
17: check_los_ratesel();
00000048 F7FF BL check_los_ratesel?T ; T=0x0001 (1)
0000004A FFDA BL check_los_ratesel?T ; T=0x0001 (2)
18: }
0000004C BC08 POP {R3}
0000004E 4718 BX R3
00000050 ENDP ; 'diag?T'
ARM COMPILER V2.32a, diag 08/08/05 09:50:22 PAGE 8
*** CODE SEGMENT '?PR?temp_diag?T?diag':
25: void temp_diag(BYTE msb, BYTE lsb, BYTE addr){
00000000 B407 PUSH {R0-R2}
00000002 B086 SUB R13,#0x18
00000004 ; SCOPE-START
29: HALFWORD monitor = (msb<<8) + lsb;
00000004 A806 ADD R0,R13,#0x18
00000006 7800 LDRB R0,[R0,#0x0] ; msb
00000008 1C01 MOV R1,R0
0000000A 0209 LSL R1,R1,#0x8
0000000C A807 ADD R0,R13,#0x1C
0000000E 7800 LDRB R0,[R0,#0x0] ; lsb
00000010 1809 ADD R1,R0
00000012 A801 ADD R0,R13,#0x4
00000014 8001 STRH R1,[R0,#0x0] ; monitor
30: HALFWORD high_alarm = (A2h[addr ]<<8) + A2h[addr+1];
00000016 A808 ADD R0,R13,#0x20
00000018 7800 LDRB R0,[R0,#0x0] ; addr
0000001A 1C01 MOV R1,R0
0000001C 4800 LDR R0,=A2h ; A2h
0000001E 1840 ADD R0,R1 ; A2h
00000020 7800 LDRB R0,[R0,#0x0]
00000022 1C01 MOV R1,R0
00000024 0209 LSL R1,R1,#0x8
00000026 A808 ADD R0,R13,#0x20
00000028 7800 LDRB R0,[R0,#0x0] ; addr
0000002A 1C02 MOV R2,R0
0000002C 4800 LDR R0,=A2h + 0x1 ; A2h+1
0000002E 1880 ADD R0,R2 ; A2h+1
00000030 7800 LDRB R0,[R0,#0x0]
00000032 1809 ADD R1,R0
00000034 A802 ADD R0,R13,#0x8
00000036 8001 STRH R1,[R0,#0x0] ; high_alarm
31: HALFWORD low_alarm = (A2h[addr+2]<<8) + A2h[addr+3];
00000038 A808 ADD R0,R13,#0x20
0000003A 7800 LDRB R0,[R0,#0x0] ; addr
0000003C 1C01 MOV R1,R0
0000003E 4800 LDR R0,=A2h + 0x2 ; A2h+2
00000040 1840 ADD R0,R1 ; A2h+2
00000042 7800 LDRB R0,[R0,#0x0]
00000044 1C01 MOV R1,R0
00000046 0209 LSL R1,R1,#0x8
00000048 A808 ADD R0,R13,#0x20
0000004A 7800 LDRB R0,[R0,#0x0] ; addr
0000004C 1C02 MOV R2,R0
0000004E 4800 LDR R0,=A2h + 0x3 ; A2h+3
00000050 1880 ADD R0,R2 ; A2h+3
00000052 7800 LDRB R0,[R0,#0x0]
00000054 1809 ADD R1,R0
00000056 A803 ADD R0,R13,#0xC
00000058 8001 STRH R1,[R0,#0x0] ; low_alarm
32: HALFWORD high_warning = (A2h[addr+4]<<8) + A2h[addr+5];
0000005A A808 ADD R0,R13,#0x20
0000005C 7800 LDRB R0,[R0,#0x0] ; addr
0000005E 1C01 MOV R1,R0
00000060 4800 LDR R0,=A2h + 0x4 ; A2h+4
00000062 1840 ADD R0,R1 ; A2h+4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -