📄 clk_deal.lst
字号:
C51 COMPILER V7.50 CLK_DEAL 03/10/2006 16:35:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CLK_DEAL
OBJECT MODULE PLACED IN clk_deal.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE clk_deal.c LARGE OPTIMIZE(9,SIZE) BROWSE NOAREGS DEBUG OBJECTEXTEND
line level source
1 #include <REG54.H>
2 #include "rc7820.h"
3 #include "rc7860.h"
4 #include "f2rc7820.h"
5 #include "cmd_para_save.h"
6
7 extern unsigned char f2rc7820_rd(unsigned char f2addr) large reentrant;
8 extern void SetResRdyTbl(unsigned char prio) large reentrant;
9 extern unsigned char GetResRdyTbl(unsigned char prio) large reentrant;
10 extern unsigned long int xdata commandid; //表示命令代码的变量
11 extern unsigned char xdata tx_buf[];
12 extern unsigned char xdata tx_buf_pointer;
13 extern bit tx_done;
14
15 unsigned char xdata clksource_reg = 0; //保存强制转换的时钟源
16 unsigned char xdata clk_force = 0xFF; //强制转换的时钟源代号
17 unsigned char xdata clk_source = 8; //主用时钟源代号寄存器,缺省自由振荡
18 unsigned char xdata clkmode_reg = 0; //保存是强制模式还是自动运行
19 unsigned char xdata clkarray_flg = 0; //是否填写优先级表标志位
20 unsigned char xdata clk_prio = 8; //时钟优先级标志
21 unsigned int xdata clkprio_array[7] = {0,0,0,0,0,0,0}; //时钟优先级恢复计数
22 unsigned char xdata clkarray[8] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; //时钟优先级存储数组
23 unsigned char xdata clk_check_flg[2] = {0,0};
24 //时钟频偏检测标志数组,第一位表示光口号,第二位表示计数值
25 unsigned char xdata clk_frequence_stat;
26 extern unsigned char xdata start_flg[4];
27
28 unsigned char set_clock_source(struct cmd_para_save *set_clock){
29 1 //C10强制配置时钟源函数
30 1 unsigned char xdata clksource;
31 1 unsigned char xdata return_value;
32 1 unsigned char xdata flg;
33 1
34 1 commandid = 0x00433130;
35 1 clksource = set_clock -> force_clock_source;
36 1
37 1 switch (clksource){
38 2 case 0: flg = Reflos_reg1 & 0x80; //查看7820中T11即光口0线路时钟
39 2 if (flg == 0){
40 3 //S_reg = 0x81; //配置时钟源为光口0线路时钟
41 3 clksource_reg = 0x81;
42 3 clk_force = 0;
43 3 return_value = 0;
44 3 }
45 2 else {
46 3 clksource_reg = 0;
47 3 clk_force = 0xFF;
48 3 return_value = 2;
49 3 }
50 2 break;
51 2 case 1: flg = Reflos_reg1 & 0x40; //查看T12即光口1线路时钟
52 2 if (flg == 0){
53 3 //S_reg = 0x82; //配置时钟源为光口1线路时钟
54 3 clksource_reg = 0x82;
55 3 clk_force = 1;
C51 COMPILER V7.50 CLK_DEAL 03/10/2006 16:35:31 PAGE 2
56 3 return_value = 0;
57 3 }
58 2 else {
59 3 clksource_reg = 0;
60 3 clk_force = 0xFF;
61 3 return_value = 2;
62 3 }
63 2 break;
64 2 case 2: flg = (f2rc7820_rd(F2Reflos_reg1)) & 0x80; //查看T16即光口2线路时钟
65 2 if (flg == 0 & start_flg[0] == 0){
66 3 //S_reg = 0x86; //配置时钟源为光口2线路时钟
67 3 clksource_reg = 0x86;
68 3 clk_force = 2;
69 3 return_value = 0;
70 3 }
71 2 else {
72 3 clksource_reg = 0;
73 3 clk_force = 0xFF;
74 3 return_value = 2;
75 3 }
76 2 break;
77 2 case 3: flg = (f2rc7820_rd(F2Reflos_reg1)) & 0x40; //查看T17即光口3线路时钟
78 2 if (flg == 0 & start_flg[0] == 0){
79 3 //S_reg = 0x87; //配置时钟源为光口3线路时钟
80 3 clksource_reg = 0x87;
81 3 clk_force = 3;
82 3 return_value = 0;
83 3 }
84 2 else {
85 3 clksource_reg = 0;
86 3 clk_force = 0xFF;
87 3 return_value = 2;
88 3 }
89 2 break;
90 2 case 7: flg = Reflos_reg2 & 0x08; //查看7820中T21即第二外时钟源
91 2 if (flg == 0){
92 3 //S_reg = 0x89; //配置时钟源为第二外时钟
93 3 clksource_reg = 0x89;
94 3 clk_force = 7;
95 3 return_value = 0;
96 3 }
97 2 else { //时钟源丢失
98 3 clksource_reg = 0;
99 3 clk_force = 0xFF;
100 3 return_value = 2; //返回值2执行失败
101 3 }
102 2 break;
103 2 case 6: flg = Reflos_reg2 & 0x02; //查看7820中T31即第一外时钟源
104 2 if (flg == 0){
105 3 //S_reg = 0x8B; //配置时钟源为第一外时钟源
106 3 clksource_reg = 0x8B;
107 3 clk_force = 6;
108 3 return_value = 0;
109 3 }
110 2 else {
111 3 clksource_reg = 0;
112 3 clk_force = 0xFF;
113 3 return_value = 2;
114 3 }
115 2 break;
116 2 case 8: //S_reg = 0xC0; //配置时钟源自由振荡模式
117 2 clksource_reg = 0xC0;
C51 COMPILER V7.50 CLK_DEAL 03/10/2006 16:35:31 PAGE 3
118 2 clk_force = 8;
119 2 return_value = 0; //返回值0执行成功
120 2 break;
121 2 case 9: //S_reg = 0xE0; //配置时钟源为保持模式
122 2 clksource_reg = 0xE0;
123 2 clk_force = 9;
124 2 return_value = 0; //返回值0执行成功
125 2 break;
126 2 default:clksource_reg = 0;
127 2 clk_force = 0xFF;
128 2 return_value = 2; //非法配置返回值2不成功
129 2 break;
130 2 }
131 1 if (!GetResRdyTbl(1))
132 1 SetResRdyTbl(1);
133 1 return (return_value);
134 1 }
135
136
137 unsigned char set_clock_mode(struct cmd_para_save *set_clock){
138 1 //C11设置时钟源运行模式
139 1 unsigned char xdata clk_mode;
140 1 unsigned char xdata return_value;
141 1
142 1 clk_mode = set_clock -> clock_source_mode;
143 1 commandid = 0x00433131;
144 1 clkmode_reg = clk_mode; //save clk mode
145 1
146 1 if (clkmode_reg){ //if clk run force mode
147 2 if (clksource_reg != 0){ //if clk mode no error
148 3 S_reg = clksource_reg; //run clk mode
149 3 clk_source = clk_force;
150 3 return_value = 0;
151 3 }
152 2 else return_value = 2;
153 2 }
154 1 else return_value = 0; //clk run auto mode
155 1 if (!GetResRdyTbl(1))
156 1 SetResRdyTbl(1);
157 1 return (return_value);
158 1 }
159
160 unsigned char set_clock_prio(struct cmd_para_save *set_clock){
161 1 //C12配置时钟源优先级表
162 1 unsigned char xdata clksource;
163 1 unsigned char xdata clkprio;
164 1
165 1 commandid = 0x00433132;
166 1 clksource = set_clock -> clock_source;
167 1 clkprio = set_clock -> clock_prio;
168 1
169 1 if (clkprio >=0 & clkprio <= 7){
170 2 clkarray[clkprio] = clksource;
171 2 clkarray_flg = 1;
172 2 if (!GetResRdyTbl(1))
173 2 SetResRdyTbl(1);
174 2 return(0);
175 2 }
176 1 else {
177 2 if (!GetResRdyTbl(1))
178 2 SetResRdyTbl(1);
179 2 return(2);
C51 COMPILER V7.50 CLK_DEAL 03/10/2006 16:35:31 PAGE 4
180 2 }
181 1 }
182
183
184
185 unsigned char get_clock_working(void){
186 1 //C13取得当前输入时钟源状态
187 1 unsigned char xdata return_value;
188 1 unsigned char xdata clkport;
189 1
190 1 // clkport = S_reg & 0x60;
191 1 if (Mode_reg == 0x02){
192 2 return_value = 9;
193 2 }
194 1 else if(Mode_reg == 0x03){
195 2 return_value = 8;
196 2 }
197 1 else {
198 2 clkport = S_reg & 0x0F;
199 2 switch (clkport){
200 3 case 1: return_value = 0;
201 3 break;
202 3 case 2: return_value = 1;
203 3 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -