📄 clk_deal.lst
字号:
416 6 clk_prio = 4;
417 6 }
418 5 else {
419 6 temp = get_clock_state(clkarray[5]);
420 6 if (temp >> 4 == 1){
421 7 set_clock_switch(clkarray[5]);
422 7 clk_prio = 5;
423 7 }
424 6 else {
425 7 temp = get_clock_state(clkarray[6]);
426 7 if (temp >> 4 == 1){
427 8 set_clock_switch(clkarray[6]);
C51 COMPILER V7.50 CLK_DEAL 03/10/2006 16:35:31 PAGE 8
428 8 clk_prio = 6;
429 8 }
430 7 else {
431 8 temp = get_clock_state(clkarray[7]);
432 8 if (temp >> 4 == 1){
433 9 set_clock_switch(clkarray[7]);
434 9 clk_prio = 7;
435 9 }
436 8 }
437 7 }
438 6 }
439 5 }
440 4 }
441 3 }
442 2 }
443 1 }
444
445 void get_clk_prio(unsigned char clksource){
446 1 //得出主用源时钟的优先级
447 1 unsigned char xdata temp;
448 1 clk_prio = 8;
449 1 temp = 8;
450 1 while (temp){
451 2 if (clksource == clkarray[temp - 1]){
452 3 clk_prio = temp - 1;
453 3 }
454 2 temp--;
455 2 }
456 1 }
457
458
459 void check_switch_clk(void){
460 1 //主用时钟源不是最高优先级时钟,自动倒换函数
461 1 unsigned char xdata temp;
462 1 unsigned char xdata clk_pr;
463 1 unsigned char xdata flg;
464 1 flg = 8;
465 1 for (clk_pr = 6; clk_pr >= 1; clk_pr--){
466 2 if (clk_prio > clk_pr){ //得到优先级的时钟状态
467 3 temp = get_clock_state(clkarray[clk_pr]);
468 3 if (temp >> 4){
469 4 clkprio_array[clk_pr] += 1; //时钟源有效计数值加1
470 4 if (clkprio_array[clk_pr] > 300){ //计满5分钟
471 5 flg = clk_pr;
472 5 clkprio_array[clk_pr] = 0;
473 5 }
474 4 }
475 3 else clkprio_array[clk_pr] = 0; //时钟源无效清除计数
476 3 }
477 2 }
478 1 temp = get_clock_state(clkarray[0]); //得到优先级0的时钟状态
479 1 if (temp >> 4){
480 2 clkprio_array[0] += 1; //时钟源有效计数值加1
481 2 if (clkprio_array[0] > 300){ //计满5分钟
482 3 flg = 0;
483 3 clkprio_array[0] = 0;
484 3 }
485 2 }
486 1 else clkprio_array[0] = 0; //时钟源无效清除计数
487 1
488 1 if (flg < 8){
489 2 set_clock_switch(clkarray[flg]); //自动倒换时钟源
C51 COMPILER V7.50 CLK_DEAL 03/10/2006 16:35:31 PAGE 9
490 2 }
491 1 /* if (clk_prio > 6){ //得到优先级6的时钟状态
492 1 temp = get_clock_state(clkarray[6]);
493 1 if (temp >> 4){
494 1 clkprio_array[6] += 1; //时钟源有效计数值加1
495 1 if (clkprio_array[6] > 300){ //计满5分钟
496 1 flg = 6;
497 1 clkprio_array[6] = 0;
498 1 }
499 1 }
500 1 else clkprio_array[6] = 0; //时钟源无效清除计数
501 1 }
502 1 if (clk_prio > 5){
503 1 temp = get_clock_state(clkarray[5]);
504 1 if (temp >> 4){
505 1 clkprio_array[5] += 1;
506 1 if (clkprio_array[5] > 300){
507 1 flg = 5;
508 1 clkprio_array[5] = 0;
509 1 }
510 1 }
511 1 else clkprio_array[5] = 0;
512 1 }
513 1 if (clk_prio > 4){
514 1 temp = get_clock_state(clkarray[4]);
515 1 if (temp >> 4){
516 1 clkprio_array[4] += 1;
517 1 if (clkprio_array[4] > 300){
518 1 flg = 4;
519 1 clkprio_array[4] = 0;
520 1 }
521 1 }
522 1 else clkprio_array[4] = 0;
523 1 }
524 1 if (clk_prio > 3){
525 1 temp = get_clock_state(clkarray[3]);
526 1 if (temp >> 4){
527 1 clkprio_array[3] += 1;
528 1 if (clkprio_array[3] > 300){
529 1 flg = 3;
530 1 clkprio_array[3] = 0;
531 1 }
532 1 }
533 1 else clkprio_array[3] = 0;
534 1 }
535 1 if (clk_prio > 2){
536 1 temp = get_clock_state(clkarray[2]);
537 1 if (temp >> 4){
538 1 clkprio_array[2] += 1;
539 1 if (clkprio_array[2] > 300){
540 1 flg = 2;
541 1 clkprio_array[2] = 0;
542 1 }
543 1 }
544 1 else clkprio_array[2] = 0;
545 1 }
546 1 if (clk_prio > 1){
547 1 temp = get_clock_state(clkarray[1]);
548 1 if (temp >> 4){
549 1 clkprio_array[1] += 1;
550 1 if (clkprio_array[1] > 300){
551 1 flg = 1;
C51 COMPILER V7.50 CLK_DEAL 03/10/2006 16:35:31 PAGE 10
552 1 clkprio_array[1] = 0;
553 1 }
554 1 }
555 1 else clkprio_array[1] = 0;
556 1 }
557 1 temp = get_clock_state(clkarray[0]); //得到优先级0的时钟状态
558 1 if (temp >> 4){
559 1 clkprio_array[0] += 1; //时钟源有效计数值加1
560 1 if (clkprio_array[0] > 300){ //计满5分钟
561 1 flg = 0;
562 1 clkprio_array[0] = 0;
563 1 }
564 1 }
565 1 else clkprio_array[0] = 0; //时钟源无效清除计数
566 1 if (flg < 8){
567 1 set_clock_switch(clkarray[flg]); //自动倒换时钟源
568 1 }
569 1 */
570 1 }
571
572
573 void clk_check_frequence(void){
574 1 //出现主用时钟源丢失以后,将时钟源改为自由振荡并加频偏,
575 1 //解决时钟死锁长时间出现误码的现象
576 1
577 1 if (clk_check_flg[0] == 1) //光口出现告警标志
578 1 {
579 2 if (clk_check_flg[1] > 0) //出现告警,重新进行时钟计数
580 2 {
581 3 clk_check_flg[1] = 1;
582 3 }
583 2 else if ((S_reg & 0xC0) != 0xC0) //时钟源不工作在自由振荡状态,更改时钟配置
584 2 {
585 3 // clk_frequence_stat = S_reg;
586 3 S_reg &= 0xDF;
587 3 S_reg |= 0xC0; //先将时钟源配置到自由振荡
588 3 // Frep_reg = 0x80; //添加频偏
589 3 clk_check_flg[1] = 1;
590 3 clk_frequence_stat = clkmode_reg;
591 3 clkmode_reg = 1;
592 3 }
593 2 clk_check_flg[0] = 0;
594 2 }
595 1
596 1 if (clk_check_flg[1] > 0) //开始时钟计数
597 1 {
598 2 if (clk_check_flg[1] > 5) //计满5秒钟,将时钟配置改回来
599 2 {
600 3 S_reg &= 0x3F;
601 3 S_reg |= 0x80;
602 3 // Frep_reg = 0x40;
603 3 clk_check_flg[1] = 0;
604 3 clkmode_reg = clk_frequence_stat;
605 3 }
606 2 else clk_check_flg[1] += 1;
607 2 }
608 1
609 1 }
610
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 CLK_DEAL 03/10/2006 16:35:31 PAGE 11
CODE SIZE = 1805 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 31 9
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -