📄 hpi.lst
字号:
C51 COMPILER V3.20, SN-0 HPI 05/14/03 11:30:42 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE HPI
OBJECT MODULE PLACED IN HPI.OBJ
COMPILER INVOKED BY: E:\APP\C51\BIN\C51.EXE HPI.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 uchar SendMSG(void); /* 发送消息L3,外部接口 */
25
26 /* 函数声明 */
27 void InitHPI(void); /* 初始化HPI缓冲区及变量 */
28 void TestHPI(void); /* 测试HPI读写状况 */
29 void CheckTxHPI(void); /* 监测各DSP接收命令情况 */
30 void CheckRxHPI(void); /* 监测各DSP上报消息情况 */
31 void SendFrameHPI(void); /* 从HPI向各DSP发送数据 */
32 void SetDSPINT(void); /* 从HPI向各DSP发中断通知 */
33 void ReadFrameHPI(void); /* 从HPI读取DSP的上报消息 */
34 void CheckDSP(void); /* 监测各DSP运行状况 */
35 void GetSWVer(void); /* 获取CPU、DSP软件版本信息并上报 */
36
37 /* 变量定义 */
38 HPIQueue idata m_sHPIQue;
39 uchar idata HPITxVar[BUFSIZE+1]; /* HPI接口发送(-->DSP)暂存变量 */
40 uchar idata HPIRxVar[BUFSIZE+1]; /* HPI接口接收(<--DSP)暂存变量 */
41 uchar idata HPIRxVarA[BUFSIZE+1]; /* HPI接口接收(<--DSP)暂存变量,中断中用 */
42 L3Pack xdata HPIRxBuf[HPIRXBUFNUM]; /* HPI接口接收(<--DSP)缓冲区 */
43 uchar xdata *m_pHPI; /* 定义HPI接口地址暂存变量(指针) */
44 uint data m_uiHPIAREA; /* 定义HPI接口读写区变量 */
45 uchar data m_ucHPILEN; /* 定义HPI接口读写长度变量 */
46
47 uchar idata m_ucHPIWatchdogTC; /* 定义HPI软件看门狗计数器 */
48
49 uchar bdata m_ucHPIFlag;
50 sbit m_bHPITestFlag = m_ucHPIFlag^0; /* 定义HPI测试结果标志 */
51 sbit m_bHPIWatchdogFlag = m_ucHPIFlag^1;/* 定义HPI软件看门狗标志 */
52
53 /* 外部变量定义 */
54 extern uchar xdata *RESET; /* 定义DSP复位接口译码地址 */
55 extern uchar xdata *HPI1; /* 定义HPI-DSP1接口译码地址 */
C51 COMPILER V3.20, SN-0 HPI 05/14/03 11:30:42 PAGE 2
56 extern uchar xdata *HPI2; /* 定义HPI-DSP2接口译码地址 */
57 extern uchar xdata *HPI3; /* 定义HPI-DSP3接口译码地址 */
58 extern uchar xdata *HPI4; /* 定义HPI-DSP4接口译码地址 */
59 extern L3Pack xdata L3TxVar; /* 网络层发送暂存变量,用户接口 */
60 extern L3Pack xdata L3RxVar; /* 网络层接收暂存变量,用户接口 */
61 extern uchar data m_ucVar1; /* 通用变量1 */
62 extern uchar data m_ucTimer0Count; /* 10ms定时计数器 */
63
64 /********************************************************************************/
65 /* 函数名称:void GetSWVer(void) */
66 /* 简要描述:/* 获取CPU、DSP软件版本信息并上报 */
67 /* */
68 /* 时 间:2002年02月21日 */
69 /********************************************************************************/
70 void GetSWVer(void)
71 {
72 1 uchar data i;
73 1
74 1 /* 判断缓冲区是否溢出 */
75 1 if(m_sHPIQue.ucRxPendNum <= HPIRXBUFNUM-5)
76 1 {
77 2 /* 获取DSP软件版本信息 */
78 2 for(i=0; i<4; i++)
79 2 {
80 3 WATCHDOG = ~WATCHDOG;
81 3
82 3 /* 基地址确定 */
83 3 if(i == 0)
84 3 {
85 4 m_pHPI = HPI1;
86 4 }
87 3 else if(i == 1)
88 3 {
89 4 m_pHPI = HPI2;
90 4 }
91 3 else if(i == 2)
92 3 {
93 4 m_pHPI = HPI3;
94 4 }
95 3 else if(i == 3)
96 3 {
97 4 m_pHPI = HPI4;
98 4 }
99 3
100 3 /* 设置HPI读区间和长度 */
101 3 m_uiHPIAREA = DSPSOFTVER;
102 3 m_ucHPILEN = 5;
103 3
104 3 /* 读DSPSTATUS状态字 */
105 3 ReadFrameHPI();
106 3
107 3 /* 指针获取及调整 */
108 3 EX1 = 0; /* 关中断防止指针调整出错 */
109 3 m_ucVar1 = m_sHPIQue.ucRxPlaceIndex;
110 3 m_sHPIQue.ucRxPlaceIndex++;
111 3 m_sHPIQue.ucRxPlaceIndex = m_sHPIQue.ucRxPlaceIndex%HPIRXBUFNUM;
112 3 m_sHPIQue.ucRxPendNum++;
113 3 EX1 = 1; /* 重开中断 */
114 3
115 3 HPIRxBuf[m_ucVar1].ucPID = 0x55;
116 3 HPIRxBuf[m_ucVar1].ucLength = 0x0a;
117 3 HPIRxBuf[m_ucVar1].uiType = PM_BOARDVER_IND;
C51 COMPILER V3.20, SN-0 HPI 05/14/03 11:30:42 PAGE 3
118 3 HPIRxBuf[m_ucVar1].ucData[0] = i+1; /* 数据处理单元号 */
119 3 HPIRxBuf[m_ucVar1].ucData[1] = HPIRxVar[0]; /* 版本号——年 */
120 3 HPIRxBuf[m_ucVar1].ucData[2] = HPIRxVar[1]; /* 月 */
121 3 HPIRxBuf[m_ucVar1].ucData[3] = HPIRxVar[2]; /* 日 */
122 3 HPIRxBuf[m_ucVar1].ucData[4] = HPIRxVar[3]; /* 版本号 */
123 3 HPIRxBuf[m_ucVar1].ucData[5] = HPIRxVar[4]; /* 修正号 */
124 3 }
125 2
126 2 /* 指针获取及调整 */
127 2 EX1 = 0; /* 关中断防止指针调整出错 */
128 2 m_ucVar1 = m_sHPIQue.ucRxPlaceIndex;
129 2 m_sHPIQue.ucRxPlaceIndex++;
130 2 m_sHPIQue.ucRxPlaceIndex = m_sHPIQue.ucRxPlaceIndex%HPIRXBUFNUM;
131 2 m_sHPIQue.ucRxPendNum++;
132 2 EX1 = 1; /* 重开中断 */
133 2
134 2 /* 获取CPU软件版本信息 */
135 2 HPIRxBuf[m_ucVar1].ucPID = 0x55;
136 2 HPIRxBuf[m_ucVar1].ucLength = 0x0a;
137 2 HPIRxBuf[m_ucVar1].uiType = PM_BOARDVER_IND;
138 2 HPIRxBuf[m_ucVar1].ucData[0] = 0; /* 数据处理单元号 */
139 2 HPIRxBuf[m_ucVar1].ucData[1] = YEAR; /* 版本号——年 */
140 2 HPIRxBuf[m_ucVar1].ucData[2] = MONTH; /* 月 */
141 2 HPIRxBuf[m_ucVar1].ucData[3] = DATE; /* 日 */
142 2 HPIRxBuf[m_ucVar1].ucData[4] = VERSION; /* 版本号 */
143 2 HPIRxBuf[m_ucVar1].ucData[5] = REVISION; /* 修正号 */
144 2 }
145 1
146 1 return;
147 1 }
148
149
150 /********************************************************************************/
151 /* 函数名称:void CheckTxHPI(void) */
152 /* 简要描述:转发通过HPI发到各DSP的命令 */
153 /* */
154 /* 时 间:2002年02月21日 */
155 /********************************************************************************/
156 void CheckTxHPI(void)
157 {
158 1 uchar data temp1,i;
159 1
160 1 /* 转发命令 */
161 1 HPITxVar[0] = SOI;
162 1 HPITxVar[1] = L3RxVar.ucPID;
163 1 HPITxVar[2] = L3RxVar.ucLength;
164 1 HPITxVar[3] = (L3RxVar.uiType>>8)&0xff;
165 1 HPITxVar[4] = L3RxVar.uiType&0xff;
166 1 HPITxVar[5] = L3RxVar.ucData[0]%2; /* 单元号 */
167 1 /* 剩余有效字节 */
168 1 for(i=6; i<=HPITxVar[2]; i++)
169 1 {
170 2 HPITxVar[i] = L3RxVar.ucData[i-5];
171 2 }
172 1
173 1
174 1 /* 计算HPI基地址 */
175 1 temp1 = L3RxVar.ucData[0]/2;
176 1 if(temp1 == 0)
177 1 {
178 2 m_pHPI = HPI1;
179 2 }
C51 COMPILER V3.20, SN-0 HPI 05/14/03 11:30:42 PAGE 4
180 1 else if(temp1 == 1)
181 1 {
182 2 m_pHPI = HPI2;
183 2 }
184 1 else if(temp1 == 2)
185 1 {
186 2 m_pHPI = HPI3;
187 2 }
188 1 else
189 1 {
190 2 m_pHPI = HPI4;
191 2 }
192 1
193 1 /* 设置HPI读写区间和长度 */
194 1 m_uiHPIAREA = AREAWRITE;
195 1 m_ucHPILEN = HPITxVar[2];
196 1
197 1 /* 写数据给C549 */
198 1 SendFrameHPI();
199 1 /* 发中断通知C549 */
200 1 SetDSPINT();
201 1
202 1 return;
203 1 }
204
205
206 /********************************************************************************/
207 /* 函数名称:void CheckRxHPI(void) */
208 /* 简要描述:转发通过HPI收到各DSP的上报消息 */
209 /* */
210 /* 时 间:2002年02月21日 */
211 /********************************************************************************/
212 void CheckRxHPI(void)
213 {
214 1 uchar data temp1;
215 1
216 1 /* 转发上报消息 */
217 1 if(m_sHPIQue.ucRxPendNum > 0)
218 1 {
219 2 L3TxVar = HPIRxBuf[m_sHPIQue.ucRxDealIndex];
220 2
221 2 temp1 = SendMSG();
222 2
223 2 if(temp1 == TRUE)
224 2 {
225 3 /* 发送成功,则调整指针,否则不调整指针 */
226 3 m_sHPIQue.ucRxDealIndex++;
227 3 m_sHPIQue.ucRxDealIndex = m_sHPIQue.ucRxDealIndex%HPIRXBUFNUM;
228 3 m_sHPIQue.ucRxPendNum--;
229 3 }
230 2 }
231 1
232 1 return;
233 1 }
234
235 /********************************************************************************/
236 /* 函数名称:void InitHPI(void) */
237 /* 简要描述:初始化HPI接口变量 */
238 /* */
239 /* 时 间:2002年02月21日 */
240 /********************************************************************************/
241 void InitHPI(void)
C51 COMPILER V3.20, SN-0 HPI 05/14/03 11:30:42 PAGE 5
242 {
243 1 uchar data i,j;
244 1 uchar xdata *pHPI;
245 1
246 1 /* 初始化HPI接口缓冲区 */
247 1 for(i=0;i<BUFSIZE+1;i++)
248 1 {
249 2 HPIRxVar[i] = 0;
250 2 HPIRxVarA[i] = 0;
251 2 HPITxVar[i] = 0;
252 2 }
253 1
254 1 for(i=0;i<HPIRXBUFNUM;i++)
255 1 {
256 2 HPIRxBuf[i].ucPID = 0;
257 2 HPIRxBuf[i].ucLength = 0;
258 2 HPIRxBuf[i].uiType = 0;
259 2 for(j=0;j<BUFSIZE-8;j++)
260 2 {
261 3 HPIRxBuf[i].ucData[j] = 0;
262 3 }
263 2 }
264 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -