📄 hdlc.lst
字号:
C51 COMPILER V3.20, SN-0 HDLC 09/29/02 18:24:18 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE HDLC
OBJECT MODULE PLACED IN HDLC.OBJ
COMPILER INVOKED BY: E:\C51\BIN\C51.EXE HDLC.C
stmt level source
1 /********************************************************************************/
2 /* */
3 /* 描述: 复用解复用板(V2.0)控制器程序 */
4 /* VER: 2.0 */
5 /* REV: 1.0 */
6 /* 作者: 胡丙龙 */
7 /* 时间: 2002年02月21日 */
8 /* */
9 /********************************************************************************/
10 #pragma debug code small optimize(5) objectextend
11
12 #include "reg52.h"
13 #include "mdb.h"
14 #include "hpi.h"
15 #include "hdlc.h"
16 #include "constant.h"
17 #include "sab82525.h"
18
19
20 /* 结构变量定义 */
21 L1Queue idata m_sL1Que;
22 L2Queue idata m_sL2Que;
23 L3Queue idata m_sL3Que;
24
25 /* 缓冲区定义 */
26 L1Pack xdata L1RxBuf[L1RXBUFNUM]; /* 定义全局变量,物理层接收缓冲区 */
27 L1Pack xdata L1TxBuf[L1TXBUFNUM]; /* 定义全局变量,物理层发送缓冲区 */
28 L2Pack xdata L2RxBuf[L2RXBUFNUM]; /* 定义全局变量,链路层接收缓冲区 */
29 L2Pack xdata L2TxBuf[L2TXBUFNUM]; /* 定义全局变量,链路层发送缓冲区 */
30 L3Pack xdata L3RxBuf[L3RXBUFNUM]; /* 定义全局变量,网络层接收缓冲区 */
31 L3Pack xdata L3TxBuf[L3TXBUFNUM]; /* 定义全局变量,网络层发送缓冲区 */
32
33 L3Pack xdata L3TxVar; /* 网络层发送暂存变量,用户接口 */
34 L3Pack xdata L3RxVar; /* 网络层接收暂存变量,用户接口 */
35
36 /* 辅助变量定义 */
37 uchar data m_ucARSTAStatus;
38 uchar data m_ucBRSTAStatus;
39 uchar data m_ucASTARStatus;
40 uchar data m_ucBSTARStatus;
41 uchar data m_ucAISTAStatus;
42 uchar data m_ucBISTAStatus;
43 uchar data m_ucAEXIRStatus;
44 uchar data m_ucBEXIRStatus;
45 uchar data m_ucATxFrameLen;
46 uchar data m_ucBTxFrameLen;
47 uchar data m_ucARBCL;
48 uchar data m_ucBRBCL;
49
50 uchar bdata m_ucHDLCErrorFlag;
51 sbit m_bL1RxErrorFlag = m_ucHDLCErrorFlag^0; /* 定义物理层L1接收队列溢出标志,收到后来不及处理 */
52 sbit m_bL2TxErrorFlag = m_ucHDLCErrorFlag^1; /* 定义链路层L2发送队列溢出标志,U/I/S帧来不及发送 */
53 sbit m_bL3TxErrorFlag = m_ucHDLCErrorFlag^2; /* 定义网络层L3发送队列溢出标志,I帧来不及发送 */
54 sbit m_bL1RxCRCFlag = m_ucHDLCErrorFlag^3; /* 定义物理层L1接收CRC校验错标志 */
55 sbit m_bARxFrameFlag = m_ucHDLCErrorFlag^4; /* 定义A通道接收到HDLC消息标志 */
C51 COMPILER V3.20, SN-0 HDLC 09/29/02 18:24:18 PAGE 2
56 sbit m_bBRxFrameFlag = m_ucHDLCErrorFlag^5; /* 定义B通道接收到HDLC消息标志 */
57 sbit m_bL1TxErrorFlag = m_ucHDLCErrorFlag^6; /* 定义物理层L1发送错误标志 */
58
59 /* 外部变量 */
60 extern uchar xdata *SAB82525; /* 定义SAB82525芯片译码地址 */
61
62 extern uchar data m_ucTimeSlot; /* 时隙号 */
63 extern uchar data m_ucTimer0Count; /* 10ms定时计数器 */
64
65 extern bit m_bTimer0Flag;
66 extern bit m_bTimer1Flag;
67 extern bit m_bXint0Flag;
68 extern bit m_bXint1Flag;
69
70 /* 函数声明 */
71 void InitSAB82525(void); /* 初始化HDLC函数 */
72 void InitHDLC(void); /* 初始化HDLC缓冲区 */
73 void CheckRxL3Layer(void); /* 监测第三层接收情况函数 */
74 void CheckTxL2Layer(void); /* 监测第二层发送情况函数 */
75 void CheckRxL2Layer(void); /* 监测第二层接收情况函数 */
76 void CheckTxL1Layer(void); /* 监测物理层发送情况函数 */
77 void CheckRxL1Layer(void); /* 监测物理层接收情况函数 */
78 void SendFrameB(void); /* A通道发送HDLC消息函数 */
79 uchar CheckASTAR(void); /* 检查ASTAR状态函数 */
80 uchar CheckBSTAR(void); /* 检查BSTAR状态函数 */
81 uchar SendMSG(void); /* 发送消息L3,外部接口 */
82
83 /* 外部函数 */
84 extern void HandleCMD(void); /* 处理收到的命令L3,外部接口 */
85
86 /********************************************************************************/
87 /* 函数名称:void InitHDLC(void) */
88 /* 简要描述:初始化HDLC缓冲区及参数 */
89 /* */
90 /* 时 间:2002年02月25日 */
91 /********************************************************************************/
92 void InitHDLC(void)
93 {
94 1 uchar data i,j;
95 1
96 1 WATCHDOG = ~WATCHDOG; /* 看门狗 */
97 1
98 1 /* 初始化缓冲区 */
99 1 for(i=0;i<L3RXBUFNUM;i++) /* 网络层L3 */
100 1 {
101 2 L3RxBuf[i].ucPID = 0;
102 2 L3RxBuf[i].ucLength = 0;
103 2 L3RxBuf[i].uiType = 0;
104 2 for(j=0;j<BUFSIZE-8;j++)
105 2 {
106 3 L3RxBuf[i].ucData[j] = 0;
107 3 }
108 2 }
109 1 for(i=0;i<L3TXBUFNUM;i++)
110 1 {
111 2 L3TxBuf[i].ucPID = 0;
112 2 L3TxBuf[i].ucLength = 0;
113 2 L3TxBuf[i].uiType = 0;
114 2 for(j=0;j<BUFSIZE-8;j++)
115 2 {
116 3 L3TxBuf[i].ucData[j] = 0;
117 3 }
C51 COMPILER V3.20, SN-0 HDLC 09/29/02 18:24:18 PAGE 3
118 2 }
119 1 for(i=0;i<L2RXBUFNUM;i++) /* 链路层L2 */
120 1 {
121 2 L2RxBuf[i].ucLength = 0;
122 2 L2RxBuf[i].ucRsv1[0] = 0;
123 2 L2RxBuf[i].ucRsv1[1] = 0;
124 2 L2RxBuf[i].ucCRID = 0;
125 2 L2RxBuf[i].ucRsv2 = 0;
126 2 for(j=0;j<BUFSIZE-4;j++)
127 2 {
128 3 L2RxBuf[i].ucData[j] = 0;
129 3 }
130 2 }
131 1 for(i=0;i<L2TXBUFNUM;i++)
132 1 {
133 2 L2TxBuf[i].ucLength = 0;
134 2 L2TxBuf[i].ucRsv1[0] = 0;
135 2 L2TxBuf[i].ucRsv1[1] = 0;
136 2 L2TxBuf[i].ucCRID = 0;
137 2 L2TxBuf[i].ucRsv2 = 0;
138 2 for(j=0;j<BUFSIZE-4;j++)
139 2 {
140 3 L2TxBuf[i].ucData[j] = 0;
141 3 }
142 2 }
143 1 for(i=0;i<L1RXBUFNUM;i++) /* 物理层L1 */
144 1 {
145 2 L1RxBuf[i].ucLength = 0;
146 2 for(j=0;j<BUFSIZE-8;j++)
147 2 {
148 3 L1RxBuf[i].ucData[j] = 0;
149 3 }
150 2 }
151 1 for(i=0;i<L1TXBUFNUM;i++)
152 1 {
153 2 L1TxBuf[i].ucLength = 0;
154 2 for(j=0;j<BUFSIZE-8;j++)
155 2 {
156 3 L1TxBuf[i].ucData[j] = 0;
157 3 }
158 2 }
159 1
160 1
161 1 /* 初始化变量 */
162 1 m_sL1Que.ucTxPendNum = 0; /* 物理层 */
163 1 m_sL1Que.ucRxPendNum = 0;
164 1 m_sL1Que.ucTxDealIndex = 0;
165 1 m_sL1Que.ucTxPlaceIndex = 0;
166 1 m_sL1Que.ucRxDealIndex = 0;
167 1 m_sL1Que.ucRxPlaceIndex = 0;
168 1
169 1 m_sL2Que.ucLinkState = DL_RELEASE; /* 链路层 */
170 1 m_sL2Que.ucTxIFrameStatus = IDLE;
171 1 m_sL2Que.ucT201Control = OFF;
172 1 m_sL2Que.ucT201 = 0;
173 1 m_sL2Que.ucN200 = 0;
174 1 m_sL2Que.ucRSendFlag = FALSE;
175 1 m_sL2Que.ucTxPendNum = 0;
176 1 m_sL2Que.ucRxPendNum = 0;
177 1 m_sL2Que.ucTxDealIndex = 0;
178 1 m_sL2Que.ucTxPlaceIndex = 0;
179 1 m_sL2Que.ucRxDealIndex = 0;
C51 COMPILER V3.20, SN-0 HDLC 09/29/02 18:24:18 PAGE 4
180 1 m_sL2Que.ucRxPlaceIndex = 0;
181 1
182 1 m_sL3Que.ucTxPendNum = 0; /* 网络层 */
183 1 m_sL3Que.ucRxPendNum = 0;
184 1 m_sL3Que.ucTxDealIndex = 0;
185 1 m_sL3Que.ucTxPlaceIndex = 0;
186 1 m_sL3Que.ucRxDealIndex = 0;
187 1 m_sL3Que.ucRxPlaceIndex = 0;
188 1
189 1 m_bL1RxErrorFlag = RIGHT;
190 1 m_bL2TxErrorFlag = RIGHT;
191 1 m_bL3TxErrorFlag = RIGHT;
192 1 m_bL1RxCRCFlag = RIGHT;
193 1 m_bL1TxErrorFlag = RIGHT;
194 1 m_bARxFrameFlag = FALSE;
195 1 m_bBRxFrameFlag = FALSE;
196 1
197 1 return;
198 1 }
199
200
201 /********************************************************************************/
202 /* 函数名称:void InitSAB82525(void) */
203 /* 简要描述:初始化SAB82525函数 */
204 /* */
205 /* 时 间:2002年02月21日 */
206 /********************************************************************************/
207 void InitSAB82525(void)
208 {
209 1 WATCHDOG = ~WATCHDOG;
210 1
211 1 /* 初始化A通道,测试时用内部环回 */
212 1 *(SAB82525+ACCR1) = 0x25; /* 设为:待机+总线模式1+TXD开漏输出+空闲发1+时钟模式5 */
213 1 *(SAB82525+ACCR2) = 0x38; /* 设为:发送时钟由外部输入 */
214 1 *(SAB82525+ATSAX) = (m_ucTimeSlot<<2)|0x03; /* 设置时隙 */
215 1 *(SAB82525+ATSAR) = (m_ucTimeSlot<<2)|0x03; /* 设置时隙 */
216 1 *(SAB82525+AXCCR) = 0x07; /* 设为:每个时隙8位 */
217 1 *(SAB82525+ARCCR) = 0x07; /* 设为:每个时隙8位 */
218 1 *(SAB82525+AMASK) = 0x3f; /* 设为:开RME+RPF中断 */
219 1 *(SAB82525+AMODE) = 0x88; /* 设为:透明模式+无地址识别+外部定时 */
220 1 *(SAB82525+ARLCR) = 0x01; /* 设为:接收数据帧长度检测(62字节) */
221 1 *(SAB82525+AXBCH) = 0x00; /* 设为:全双工LAPB/LAPD */
222 1
223 1 *(SAB82525+ACMDR) = 0xc1; /* 设为:复位HDLC接收器+发送器 */
224 1 *(SAB82525+ACCR1) = 0xa5; /* 设为:启动+ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -