⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cp2200.lst

📁 c8051f020_uip1.0.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V9.00   CP2200                                                                02/08/2010 20:58:32 PAGE 5   

 241   1         MAC_Write(MACAD0, temp_int.Int);
 242   1         
 243   1         temp_int.Char[0] = pMAC->Char[3];
 244   1         temp_int.Char[1] = pMAC->Char[2];
 245   1         MAC_Write(MACAD1, temp_int.Int);
 246   1         
 247   1         temp_int.Char[0] = pMAC->Char[1];
 248   1         temp_int.Char[1] = pMAC->Char[0];
 249   1         MAC_Write(MACAD2, temp_int.Int);
 250   1         
 251   1         return;
 252   1      }
 253          
 254          
 255          /*---------------------------------------------------------------------------*/
 256          /*CP2200接收*/ 
 257          void CP220x_Send(void)
 258          {
 259   1      
 260   1         u16_t i; 
 261   1         u16_t ramaddr;
 262   1         u8_t *ptr;
 263   1      
 264   1         ptr = uip_buf;
 265   1      
 266   1          // Define Macro to increment the RAM address Pointer                   
 267   1          #define INC_RAMADDR {ramaddr++; \
 268   1                               RAMADDRH = (ramaddr >> 8);\
 269   1                               RAMADDRL = (ramaddr & 0x00FF);}
 270   1      
 271   1      
 272   1            //Step 1: Poll TXBUSY until it becomes 0x00                  
 273   1            while(TXBUSY);
 274   1      
 275   1            // Step 2: Set the TXSTARTH:TXSTARTL address to 0x0000              
 276   1            TXSTARTH = 0x00;
 277   1            TXSTARTL = 0x00;
 278   1      
 279   1      
 280   1            // Step 3: Load data into transmit buffer    
 281   1            // When the random access method is used, we do not need to check for                
 282   1            // aborted packets. This method will be slightly slower than the Autowrite                         
 283   1            // method, however, it reduces code space requirements.              
 284   1        
 285   1            // Setup RAM Address Pointer To 0x0000    
 286   1            RAMADDRH = 0x00;
 287   1            RAMADDRL = 0x00;
 288   1            ramaddr = 0x0000;
 289   1            // Step 3d: Load the packet payload
 290   1                          
 291   1            for(i = 0; i < uip_len; i++)
 292   1                {
 293   2                   if(i==40+UIP_LLH_LEN)
 294   2                       {
 295   3                         ptr=(u8_t *)uip_appdata;       //appdata
 296   3                       }
 297   2               RAMTXDATA = *ptr++;
 298   2               INC_RAMADDR
 299   2            }
 300   1            
 301   1            // Step 3e: Pad short packets         
 302   1            while(ramaddr < 64)
C51 COMPILER V9.00   CP2200                                                                02/08/2010 20:58:32 PAGE 6   

 303   1                {                    
 304   2               RAMTXDATA = 0;
 305   2               INC_RAMADDR
 306   2            }
 307   1            
 308   1            // Set the TXENDH:TXENDL address to <ramaddr - 1>             
 309   1            ramaddr--;
 310   1            TXENDH = (ramaddr >> 8);
 311   1            TXENDL = (ramaddr & 0x00FF);
 312   1            // Step 4: Set the TXSTARTH:TXSTARTL address back to 0x0000                   
 313   1            TXSTARTH = 0x00;
 314   1            TXSTARTL = 0x00;
 315   1            // Step 5: Write '1' to TXGO to begin transmission                  
 316   1            TXCN = 0x01;                         
 317   1                 
 318   1      
 319   1      }
 320          /*---------------------------------------------------------------------------*/
 321          /*CP2200发送*/  
 322          u16_t rcve_frame(void)
 323          
 324          {
 325   1         bit rx_ok;                               
 326   1         bit skip = 0;                           
 327   1         UINT1 cplen;                             
 328   1         u16_t i;
 329   1        
 330   1      
 331   1         u8_t interrupt_read;        
 332   1         u8_t valid_bits;              
 333   1         u8_t num_packets;             
 334   1      
 335   1         // Clear interrupt flags.     
 336   1         interrupt_read = INT1;                       
 337   1         interrupt_read = INT0;
 338   1         
 339   1         // Check for packet received interrupt           
 340   1         if( interrupt_read & RXINT)
 341   1         {   
 342   2              // Count the number of packets in the receive buffer         
 343   2              // This is equal to the number of bits set to 1 in TLBVALID                
 344   2              valid_bits = TLBVALID;                                      
 345   2                  for(num_packets = 0; valid_bits; num_packets++)      
 346   2              {                                 
 347   3                    valid_bits &= valid_bits - 1;                                  
 348   3              }
 349   2         
 350   2              // If the receive buffer has 7 packets, then disable reception.            
 351   2              if( num_packets >= 7)                                         
 352   2              {
 353   3                    RXCN = RXINH;           // Inhibit New Packet Reception     
 354   3              }                                                                            
 355   2         }                                                              
 356   1      
 357   1             // Step 1: Check the RXOK bit to see if packet was received correctly               
 358   1             rx_ok = (CPINFOL & RXOK) && (CPINFOH & RXVALID);   
 359   1      
 360   1             // Step 2: If packet received correctly, read the length, otherwise, skip packet.                         
 361   1             if(rx_ok)
 362   1                 {
 363   2                 // Read the packet length                     
 364   2                 cplen.Char[0] = CPLENH;
C51 COMPILER V9.00   CP2200                                                                02/08/2010 20:58:32 PAGE 7   

 365   2                 cplen.Char[1] = CPLENL;
 366   2                       
 367   2             } 
 368   1                 else 
 369   1                 {
 370   2                 // Set packet length to zero     
 371   2                 cplen.Int = 0;
 372   2                 // Skip packet        
 373   2                 skip = 1;                                                     
 374   2                     return(cplen.Int); 
 375   2             }   
 376   1      
 377   1             // Step 3: Read the entire packet from the buffer                                                        
 378   1             // If packet will fit in the buffer               
 379   1             if(1)
 380   1             {
 381   2            
 382   2                // Copy entire packet                 
 383   2                for(i = 0; i < cplen.Int; i++)
 384   2                    {    
 385   3                  *(uip_buf + i)= RXAUTORD;     
 386   3                }     
 387   2                        skip=0;
 388   2      
 389   2             }
 390   1             else
 391   1             {
 392   2                 // Set packet length to zero     
 393   2                 cplen.Int = 0;
 394   2                 // Skip packet         
 395   2                 skip = 1; 
 396   2             }
 397   1            
 398   1             // Step 4: Skip the packet, or clear the valid bit if the entire packet                     
 399   1             // has been unloaded from the buffer.       
 400   1         
 401   1             if(skip)
 402   1             {
 403   2                RXCN |= 0x02;                   // Skip the packet    RXSKIP   
 404   2             }                                                                
 405   1             else 
 406   1             {
 407   2                RXCN |= 0x04;                   // Clear the valid bit only            
 408   2             }                                                                  
 409   1      
 410   1             // If there are no more packets in the receive buffer, enable reception                     
 411   1             if(TLBVALID == 0x00)
 412   1             {
 413   2                RXCN = 0x00;                   
 414   2             }
 415   1             // Return the number of bytes added to the buffer
 416   1                       
 417   1             return(cplen.Int);                                                                                                
 418   1      }
 419          /*---------------------------------------------------------------------------*/
 420          /*发送*/
 421          void  etherdev_send(void)
 422          {
 423   1          CP220x_Send();
 424   1      }
 425          /*---------------------------------------------------------------------------*/
 426          /*接收*/
C51 COMPILER V9.00   CP2200                                                                02/08/2010 20:58:32 PAGE 8   

 427          u16_t etherdev_read(void)
 428          {
 429   1      
 430   1        return(rcve_frame());
 431   1      }
 432          /*---------------------------------------------------------------------------*/
 433          /*初始化CP2200*/
 434          void etherdev_init(void)
 435          {
 436   1               u8_t err_val;
 437   1      
 438   1           CP220x_RST_Low();
 439   1           Delay1ms(200);
 440   1           Delay1ms(200);
 441   1           CP220x_RST_High();
 442   1           Delay1ms(200);
 443   1           Delay1ms(200);
 444   1      
 445   1           INT0EN = 0x03;  /* CP2200  中断使能寄存器0*/     
 446   1                           /*1:允许接收FIFO满中断*/            
 447   1                                           /*1:允许包接收中断。*/          
 448   1      
 449   1                   
 450   1           INT1EN = 0x00;  /*  CP2200   中断使能寄存器1*/     
 451   1                           /*CP2200   35/106    中文DATASHEET*/    
 452   1         
 453   1           /* Clear all Interrupt Flags by reading the self-clearing status registers*/                     
 454   1           /*temp_char = INT0;*/                      
 455   1           /*temp_char = INT1;*/  
 456   1      
 457   1           do
 458   1           {  
 459   2              err_val = PHY_Init();     /*PHY初始化 等待完成*/
 460   2           }
 461   1           while(err_val!=0);
 462   1      
 463   1           Delay1ms(50);
 464   1           MAC_Init();    
 465   1           Delay1ms(50);
 466   1      
 467   1           ET2 = 1;                        /* Enable timer 2 interrupt*/          
 468   1           RXCN = RXCLEAR;                     /*接收缓冲区清除 向该位写1将丢弃接收缓冲区中的所有包*/ 
 469   1                                           /*并将缓冲区指针和有效位清0。注:当前位于缓冲区中的*/ 
 470   1                                           /*任何包仍保留在存储器中,但所有信息如每个包的起始*/  
 471   1                                           /*地址和长度都将丢失。任何新到达的包都会覆盖现有数据*/ 
 472   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    847    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     12      11
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -