📄 mdb.lst
字号:
C51 COMPILER V3.20, SN-0 MDB 05/14/03 11:30:42 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE MDB
OBJECT MODULE PLACED IN MDB.OBJ
COMPILER INVOKED BY: E:\APP\C51\BIN\C51.EXE MDB.C
stmt level source
1 /********************************************************************************/
2 /* */
3 /* 描述: 复用解复用板(V2.0)控制器程序 */
4 /* VER: 2.0 */
5 /* REV: 0.0 */
6 /* 作者: 胡丙龙 */
7 /* 时间: 2002年02月21日 */
8 /* 说明: 本软件版本针对VER2.0的硬件 */
9 /* */
10 /* */
11 /* */
12 /* */
13 /********************************************************************************/
14 #pragma debug code small optimize(5) objectextend
15
16 #include "reg52.h"
17 #include "mdb.h"
18 #include "hpi.h"
19 #include "hdlc.h"
20 #include "constant.h"
21 #include "sab82525.h"
22
23 /* 外部函数 */
24 extern void TestSRAM(void); /* 测试内存 */
25 extern void TestHPI(void); /* 测试HPI */
26 extern void TestSAB82525(void); /* 测试SAB82525读写 */
27
28 extern void InitSAB82525(void); /* 初始化HDLC函数 */
29 extern void InitHDLC(void); /* 初始化HDLC缓冲区 */
30 extern void CheckRxL3Layer(void); /* 监测第三层接收情况函数 */
31 extern void CheckTxL2Layer(void); /* 监测第二层发送情况函数 */
32 extern void CheckRxL2Layer(void); /* 监测第二层接收情况函数 */
33 extern void CheckTxL1Layer(void); /* 监测物理层发送情况函数 */
34 extern void CheckRxL1Layer(void); /* 监测物理层接收情况函数 */
35 extern uchar SendMSG(void); /* 发送消息L3,外部接口 */
36
37 extern void InitHPI(void); /* 初始化HPI缓冲区及变量 */
38 extern void CheckTxHPI(void); /* 监测各DSP接收命令情况 */
39 extern void CheckRxHPI(void); /* 监测各DSP上报消息情况 */
40 extern void CheckDSP(void); /* 监测各DSP运行状况 */
41 extern void GetSWVer(void); /* 获取CPU、DSP软件版本信息并上报 */
42
43 /* 函数声明 */
44 void HandleCMD(void); /* 处理收到的命令L3,外部接口 */
45 void InitMT8985(void); /* 配置MT8985 */
46 void SetTimeSlot(uchar,uchar,uchar,uchar); /* 配置MT8985交换时隙 */
47
48 /* 变量定义 */
49 uchar xdata *SRAM = 0x0; /* 定义外部数据RAM芯片译码地址 */
50 uchar xdata *SAB82525 = 0x2000; /* 定义SAB82525芯片译码地址 */
51 uchar xdata *MT8985 = 0x4000; /* 定义MT8985芯片译码地址 */
52 uchar xdata *HPI1 = 0x6000; /* 定义HPI-DSP1接口译码地址 */
53 uchar xdata *HPI2 = 0x8000; /* 定义HPI-DSP2接口译码地址 */
54 uchar xdata *HPI3 = 0xa000; /* 定义HPI-DSP3接口译码地址 */
55 uchar xdata *HPI4 = 0xc000; /* 定义HPI-DSP4接口译码地址 */
C51 COMPILER V3.20, SN-0 MDB 05/14/03 11:30:42 PAGE 2
56 uchar xdata *RESET = 0xe000; /* 定义C549复位操作地址 */
57
58 uchar data m_ucTimeSlot; /* 时隙号 */
59 uchar data m_ucTimer0Count; /* 10ms定时计数器 */
60 uchar data m_ucVar1; /* 通用变量1 */
61 uchar data m_ucVar2; /* 通用变量2 */
62
63 uchar bdata m_ucCommonFlag;
64 sbit m_bSendMsgFlag = m_ucCommonFlag^0; /* 需要发送消息标志 */
65
66 uchar bdata m_ucIntrFlag;
67 sbit m_bTimer0Flag = m_ucIntrFlag^0; /* 定义定时器0计时到标志 */
68 sbit m_bTimer1Flag = m_ucIntrFlag^1; /* 定义计数器1计数满标志 */
69 sbit m_bXint0Flag = m_ucIntrFlag^2; /* 定义外部中断0标志 */
70 sbit m_bXint1Flag = m_ucIntrFlag^3; /* 定义外部中断1标志 */
71
72 /* 外部变量 */
73 extern bit m_bSRAMTestFlag; /* 定义RAM测试结果标志 */
74 extern bit m_bSAB82525TestFlag; /* 定义SAB825255测试结果标志 */
75 extern bit m_bHPITestFlag; /* 定义HPI测试结果标志 */
76 extern bit m_bL1RxCRCFlag; /* 定义物理层L1接收队列CRC错误标志 */
77 extern bit m_bL1RxErrorFlag; /* 定义物理层L1接收队列溢出标志,收到后来不及处理 */
78 extern bit m_bL2TxErrorFlag; /* 定义链路层L2发送队列溢出标志,U/I/S帧来不及发送 */
79 extern bit m_bL3TxErrorFlag; /* 定义网络层L3发送队列溢出标志,I帧来不及发送 */
80 extern bit m_bL1TxErrorFlag; /* 定义物理层L1发送错误标志,不能发送 */
81
82 extern L3Pack xdata L3TxVar; /* 网络层发送暂存变量,用户接口 */
83 extern L3Pack xdata L3RxVar; /* 网络层接收暂存变量,用户接口 */
84
85 /********************************************************************************/
86 /* 函数名称:void main(void) */
87 /* 简要描述:主程序 */
88 /* */
89 /* 时 间:2002年02月21日 */
90 /********************************************************************************/
91 void main(void)
92 {
93 1 uchar data i;
94 1 uchar data temp;
95 1
96 1 /* 中断控制 */
97 1 EA = 0;
98 1 ET0 = 1;
99 1 ET1 = 0;
100 1 EX0 = 1;
101 1 EX1 = 1;
102 1 ES = 0;
103 1
104 1 /* 定时器设置 */
105 1 TMOD=0x01; /* 定时器0为定时模式1 */
106 1 TH0=0xd8; /* 设定定时器0初值,定时10ms */
107 1 TL0=0xf0;
108 1
109 1 /* 指示灯预置 */
110 1 ALARM_LED = OFF;
111 1 COMM_LED = OFF;
112 1 RUN_LED = OFF;
113 1
114 1 /* 确定时隙 */
115 1 if( BADD2==0 )
116 1 {
117 2 if( BADD1==0 )
C51 COMPILER V3.20, SN-0 MDB 05/14/03 11:30:42 PAGE 3
118 2 {
119 3 m_ucTimeSlot = SLOT7;
120 3 }
121 2 else
122 2 {
123 3 m_ucTimeSlot = SLOT8;
124 3 }
125 2 }
126 1 else
127 1 {
128 2 m_ucTimeSlot = SLOT9;
129 2 }
130 1
131 1 /* 清DSP复位 */
132 1 *(RESET+0) = 0x1; /* b0写入1 */
133 1 *(RESET+1) = 0x1; /* b0写入1 */
134 1 *(RESET+2) = 0x1; /* b0写入1 */
135 1 *(RESET+3) = 0x1; /* b0写入1 */
136 1
137 1 /* 测试 */
138 1 TestSRAM();
139 1 TestSAB82525();
140 1 TestHPI();
141 1
142 1 /* 定时器0计数清零 */
143 1 m_ucTimer0Count = 0;
144 1
145 1 /* 有消息需要发送标志清零 */
146 1 m_bSendMsgFlag = FALSE;
147 1
148 1
149 1 /* 初始化HPI缓冲区及变量 */
150 1 InitHPI();
151 1
152 1 /* 初始化HDLC缓冲区及变量 */
153 1 InitHDLC();
154 1
155 1 /* 初始化HDLC芯片 */
156 1 InitSAB82525();
157 1
158 1 /* 初始化交换网芯片 */
159 1 InitMT8985();
160 1
161 1 /* 开中断 */
162 1 EA=1;
163 1
164 1 /* 启动定时器T0 */
165 1 TR0 = 1;
166 1
167 1 /* 主循环 */
168 1 for(;;)
169 1 {
170 2 /* 指示灯控制 */
171 2 if(m_ucTimer0Count > 50)
172 2 {
173 3 RUN_LED = OFF;
174 3 if(m_ucTimer0Count > 100)
175 3 {
176 4 WATCHDOG = ~WATCHDOG;
177 4
178 4 m_ucTimer0Count = 0;
179 4
C51 COMPILER V3.20, SN-0 MDB 05/14/03 11:30:42 PAGE 4
180 4 /* DSP运行状况监测 */
181 4 temp = REVISION&0x01;
182 4 if(temp == 0x1)
183 4 {
184 5 CheckDSP();
185 5 }
186 4 }
187 3 }
188 2 else
189 2 {
190 3 RUN_LED = ON;
191 3 }
192 2
193 2 /* 故障指示 */
194 2 if( (m_bSRAMTestFlag == WRONG) ||
195 2 (m_bHPITestFlag == WRONG) ||
196 2 (m_bSAB82525TestFlag == WRONG) ||
197 2 (m_bL1RxErrorFlag == WRONG) ||
198 2 (m_bL1RxCRCFlag == WRONG) ||
199 2 (m_bL3TxErrorFlag == WRONG) )
200 2 {
201 3 ALARM_LED = ON;
202 3 }
203 2 else
204 2 {
205 3 ALARM_LED = OFF;
206 3 }
207 2
208 2 /* HPI上报消息监测 */
209 2 CheckRxHPI(); /* 监测各DSP上报消息情况 */
210 2
211 2 /* HDLC收发监测 */
212 2 CheckRxL3Layer(); /* 监测第三层接收情况函数 */
213 2 CheckTxL2Layer(); /* 监测第二层发送情况函数 */
214 2 CheckRxL2Layer(); /* 监测第二层接收情况函数 */
215 2 CheckTxL1Layer(); /* 监测物理层发送情况函数 */
216 2 CheckRxL1Layer(); /* 监测物理层接收情况函数 */
217 2 }
218 1 }
219
220
221 /********************************************************************************/
222 /* 函数名称:void InitMT8985(void) */
223 /* 简要描述:初始化MT8985函数 */
224 /* 交换 */
225 /* HWI0的0-7时隙为信令时隙 ————> HWO1-4的0-1时隙 */
226 /* */
227 /* 交换 */
228 /* HWI0的8-23时隙为数据时隙 ————> HWO1-4的2-5时隙 */
229 /* */
230 /* 交换 */
231 /* HWI1-4的0-1时隙为信令时隙————> HWO0的0-7时隙 */
232 /* */
233 /* 交换 */
234 /* HWI1-4的2-5时隙为数据时隙————> HWO0的8-23时隙 */
235 /* */
236 /* 时 间:2000年11月04日 */
237 /********************************************************************************/
238 void InitMT8985(void)
239 {
240 1 uchar data temp;
241 1 uchar data i,j;
C51 COMPILER V3.20, SN-0 MDB 05/14/03 11:30:42 PAGE 5
242 1
243 1 WATCHDOG = ~WATCHDOG;
244 1
245 1 /* 将MT8985所有输出关闭 */
246 1 for(j=0;j<8;j++)
247 1 {
248 2 *(MT8985+WRITE+0x00) = (0x18+j); /* 写CR,设置消息模式,对CMH/HW0-7读写 */
249 2 for(i=0;i<0x20;i++) /* 写CMH */
250 2 {
251 3 for(;;)
252 3 {
253 4 *(MT8985+WRITE+0x20+i) = 0x40; /* 写入后再读出比较直至正确 */
254 4 temp=*(MT8985+READ+0x20+i);
255 4 if(temp==0x40)
256 4 {
257 5 break;
258 5 }
259 4 }
260 3 }
261 2 }
262 1
263 1 /* 设置信令部分交换 */
264 1 SetTimeSlot(1,0,0,0);
265 1 SetTimeSlot(1,1,0,1);
266 1 SetTimeSlot(2,0,0,2);
267 1 SetTimeSlot(2,1,0,3);
268 1 SetTimeSlot(3,0,0,4);
269 1 SetTimeSlot(3,1,0,5);
270 1 SetTimeSlot(4,0,0,6);
271 1 SetTimeSlot(4,1,0,7);
272 1 SetTimeSlot(0,0,1,0);
273 1 SetTimeSlot(0,1,1,1);
274 1 SetTimeSlot(0,2,2,0);
275 1 SetTimeSlot(0,3,2,1);
276 1 SetTimeSlot(0,4,3,0);
277 1 SetTimeSlot(0,5,3,1);
278 1 SetTimeSlot(0,6,4,0);
279 1 SetTimeSlot(0,7,4,1);
280 1
281 1
282 1 /* 设置T120部分交换 */
283 1 SetTimeSlot(1,2,0,8);
284 1 SetTimeSlot(1,3,0,9);
285 1 SetTimeSlot(1,4,0,10);
286 1 SetTimeSlot(1,5,0,11);
287 1 SetTimeSlot(2,2,0,12);
288 1 SetTimeSlot(2,3,0,13);
289 1 SetTimeSlot(2,4,0,14);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -