📄 main.lst
字号:
220 1 CP220x_RST_High();
221 1 INT0EN = 0x03;
222 1 INT1EN = 0x00; // 清除中断标志位
223 1
224 1
225 1 error_code = PHY_Init();
226 1 MAC_Init();
227 1 ET2 = 1;
228 1 RXCN = RXCLEAR;
229 1 EA = 1;
230 1 IP = 0x01;
231 1 SFRPAGE = EMI0_PAGE;
232 1
233 1 // 下面代码为设置何种事件中断发生,以做出相应的处理
234 1 while (1)
235 1 {
236 2
237 2 if(CPINFOH & RXVALID)
238 2 event_word |= EVENT_ETH_ARRIVED;
239 2 event_word_copy = event_word;
240 2 EA = 1;
C51 COMPILER V7.50 MAIN 12/14/2006 13:34:45 PAGE 5
241 2 if (event_word_copy & EVENT_ETH_ARRIVED)
242 2 {
243 3 EA = 0;
244 3 event_word &= (~EVENT_ETH_ARRIVED);
245 3 EA = 1;
246 3 inbuf = rcve_frame();
247 3 if (inbuf != NULL)
248 3 {
249 4 eth_rcve(inbuf);
250 4 if (rcve_buf_allocated)
251 4 {
252 5 rcve_buf_allocated = FALSE;
253 5 }
254 4 }
255 3 }
256 2
257 2
258 2 else if (event_word_copy & EVENT_TCP_RETRANSMIT) //判断TCP传输是否超时
259 2 {
260 3 event_word &= (~EVENT_TCP_RETRANSMIT);
261 3 EA = 1;
262 3 tcp_retransmit();
263 3 }
264 2
265 2 else if (event_word_copy & EVENT_TCP_INACTIVITY)//判断TCP休止时间
266 2 {
267 3 event_word &= (~EVENT_TCP_INACTIVITY);
268 3 EA = 1;
269 3 tcp_inactivity();
270 3 }
271 2
272 2
273 2 else if (event_word_copy & EVENT_ARP_RETRANSMIT) //判断ARP传输是否超时
274 2 {
275 3 event_word &= (~EVENT_ARP_RETRANSMIT);
276 3 EA = 1;
277 3 arp_retransmit();
278 3 }
279 2
280 2 else if (event_word_copy & EVENT_AGE_ARP_CACHE)
281 2 {
282 3 event_word &= (~EVENT_AGE_ARP_CACHE);
283 3 EA = 1;
284 3 age_arp_cache();
285 3 }
286 2
287 2 else if (event_word_copy & EVENT_READ_ANALOG) //读AD输入的时间
288 2 {
289 3 event_word &= (~EVENT_READ_ANALOG);
290 3 EA = 1;
291 3
292 3 read_analog_inputs();
293 3 }
294 2
295 2
296 2 else if (event_word_copy & EVENT_RS232_ARRIVED)
297 2 {
298 3 event_word &= (~EVENT_RS232_ARRIVED);
299 3 EA = 1;
300 3 }
301 2 }
302 1 }
C51 COMPILER V7.50 MAIN 12/14/2006 13:34:45 PAGE 6
303 /**********************************************************************/
304 //CP2200片选置低
305 /*********************************************************************/
306
307 void CP220x_RST_Low(void)
308 {
309 1 char SFRPAGE_SAVE = SFRPAGE;
310 1 SFRPAGE = CONFIG_PAGE;
311 1 P4 &= ~0x20;
312 1 SFRPAGE=SFRPAGE_SAVE;
313 1 }
314
315 /***********************************************************************/
316
317 //CP2200片选置高
318 /***********************************************************************/
319 void CP220x_RST_High(void)
320 {
321 1 char SFRPAGE_SAVE = SFRPAGE;
322 1 SFRPAGE = CONFIG_PAGE;
323 1
324 1 P4 |= 0x20;
325 1 SFRPAGE=SFRPAGE_SAVE;
326 1 }
327 /***********************************************************************/
328 //物理层出始化
329
330 /***********************************************************************/
331 unsigned char PHY_Init()
332 {
333 1 unsigned char temp_char;
334 1 unsigned char retval = 0;
335 1
336 1 //--------------------------------------------------------------------------
337 1 //以下部分为物理层自适应同步,详见CP2200数据手册
338 1 //--------------------------------------------------------------------------
339 1
340 1
341 1 PHYCN = 0x00; // 禁止物理层寄存器
342 1
343 1
344 1 TXPWR = 0x80;
345 1 PHYCF = ( SMSQ | JABBER | ADPAUSE | AUTOPOL );
346 1
347 1 // 使能物理层
348 1 PHYCN = PHYEN;
349 1
350 1 // 物理层上电
351 1
352 1 PHYCN = ( PHYEN | TXEN | RXEN ); // 使能传输与接收寄存器
353 1 // 唤醒中断
354 1
355 1
356 1 temp_char = INT1;
357 1
358 1
359 1
360 1
361 1 //--------------------------------------------------------------------------
362 1 //以下是物理层初始化
363 1 //--------------------------------------------------------------------------
364 1
C51 COMPILER V7.50 MAIN 12/14/2006 13:34:45 PAGE 7
365 1
366 1 PHYCN = 0x00; //禁止物理层寄存器
367 1
368 1
369 1 PHYCF = ( SMSQ | LINKINTG | JABBER | AUTONEG | ADPAUSE | AUTOPOL ); //进行连接完整性与自适应配置
370 1
371 1 PHYCN = PHYEN;//使能物理层
372 1 PHYCN = ( PHYEN | TXEN | RXEN ); // 使能传输与接收寄存器
373 1
374 1
375 1
376 1 temp_char = INT1;
377 1
378 1 while(1){
379 2
380 2 if(INT1RD & (ANCINT | ANFINT))break; // 判断初始化是成功
381 2
382 2 }
383 1
384 1 temp_char = INT1RD;
385 1 temp_char &= (ANCINT | ANFINT);
386 1
387 1
388 1 if(temp_char & ANFINT) // 检测自适应是否失败
389 1 {
390 2 retval = LINK_ERROR;
391 2 }
392 1 else
393 1
394 1
395 1 if(temp_char == ANCINT) // 检测自适应是否通过
396 1 {
397 2 retval = 0;
398 2 IOPWR = 0x0C; // 使能 Link LED and Activity LED
399 2 }
400 1 else
401 1 {
402 2 retval = LINK_ERROR;
403 2 }
404 1
405 1 return retval;
406 1
407 1 }
408
409 /***********************************************************************/
410 //数据链路层初始化
411 /***********************************************************************/
412
413 void MAC_Init(void)
414 {
415 1
416 1 //判断是否为全双工通讯,并进行相关设置 详见CP2200数据手册
417 1 if(PHYCN & 0x10)
418 1 {
419 2 MAC_Write(MACCF, 0x40B3);
420 2 MAC_Write(IPGT, 0x0015);
421 2 }
422 1 else
423 1 {
424 2 MAC_Write(MACCF, 0x4012);
425 2 MAC_Write(IPGT, 0x0012);
426 2 }
C51 COMPILER V7.50 MAIN 12/14/2006 13:34:45 PAGE 8
427 1 MAC_Write(IPGR, 0x0C12);
428 1 MAC_Write(MAXLEN, 0x05EE);
429 1
430 1 // 读出厂前设置的MAC地址
431 1 FLASHADDRH = 0x1F;
432 1 FLASHADDRL = 0xFA;
433 1
434 1 MYMAC.Char[0] = FLASHAUTORD;
435 1 MYMAC.Char[1] = FLASHAUTORD;
436 1 MYMAC.Char[2] = FLASHAUTORD;
437 1 MYMAC.Char[3] = FLASHAUTORD;
438 1 MYMAC.Char[4] = FLASHAUTORD;
439 1 MYMAC.Char[5] = FLASHAUTORD;
440 1 my_hwaddr[0]=MYMAC.Char[0];
441 1 my_hwaddr[1]=MYMAC.Char[1];
442 1 my_hwaddr[2]=MYMAC.Char[2];
443 1 my_hwaddr[3]=MYMAC.Char[3];
444 1 my_hwaddr[4]=MYMAC.Char[4];
445 1 my_hwaddr[5]=MYMAC.Char[5];
446 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -