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

📄 mainloop.lst

📁 USB D12 SMART 开发套件 usb驱动程序的源代码和技术文档
💻 LST
📖 第 1 页 / 共 2 页
字号:
 162   5                                              case 0x0004:                            //24c08
 163   5                                              case 0x0005:                            //24c16
 164   5                                                      {
 165   6                                                      operate_type=1;
 166   6                                                      break;
 167   6                                                      }
 168   5                                              case 0x0006:                            //24c64
 169   5                                                      {
 170   6                                                      operate_type=2;
 171   6                                                      break;
 172   6                                                      }
 173   5                                              default:
 174   5                                                      {
 175   6                                                      operate_type=0;
 176   6                                                      break;
 177   6                                                      }
 178   5                                      }//end of switch
 179   4                              }//end of if
C51 COMPILER V7.00  MAINLOOP                                                               06/16/2004 13:29:52 PAGE 4   

 180   3                              else
 181   3                              {
 182   4                                      GenEpBuf[0]=0xaa;
 183   4                                      GenEpBuf[1]=0x55;
 184   4                                      bEPPflags.bits.command=0;
 185   4                              }
 186   3                              D12_WriteEndpoint(3, 2, GenEpBuf);
 187   3                              bEPPflags.bits.timer=0;
 188   3                      }//end of if
 189   2                      else
 190   2                      {
 191   3                              ComEpBuf[0]=GenEpBuf[0];
 192   3                              ComEpBuf[1]=GenEpBuf[1];
 193   3                              ComEpBuf[2]=GenEpBuf[2];
 194   3                              ComEpBuf[3]=GenEpBuf[3];
 195   3                              bEPPflags.bits.command=0;
 196   3                              bEPPflags.bits.timer=1;
 197   3                      }//end of else
 198   2              }//end of if
 199   1      
 200   1              //Read operate
 201   1              if ((ComEpBuf[0]=='R') && (bEPPflags.bits.command)) 
 202   1              {
 203   2                      bEPPflags.bits.command=0;
 204   2                      rwrom_addr.word=(ComEpBuf[4] <<8)+ComEpBuf[3];
 205   2                      rwlen.byte.high=0;
 206   2                      rwlen.byte.low=ComEpBuf[5];
 207   2                      if (rwlen.byte.low>64) rwlen.byte.low=64;
 208   2                      if ((rwrom_addr.word+rwlen.byte.low)>rom_size[rwrom_type.byte.low])
 209   2                      {
 210   3                              rwlen.word=rom_size[rwrom_type.byte.low]-rwrom_addr.word;
 211   3                              if (rwrom_addr.word>rom_size[rwrom_type.byte.low])
 212   3                              {
 213   4                                      operate_type=0;
 214   4                              }
 215   3                      }
 216   2                      
 217   2                      if ((operate_type==1) || (operate_type==2))
 218   2                      {
 219   3                              read_24cxx();
 220   3                      }
 221   2      
 222   2                      //default operate
 223   2                      if (operate_type==0) 
 224   2                      {
 225   3                              D12_WriteEndpoint(5, 0, EpBuf);
 226   3                      }
 227   2              }//end of read
 228   1      
 229   1              //write operate
 230   1              if ((bEPPflags.bits.ep2_rxdone) && (bEPPflags.bits.command) && (ComEpBuf[0]=='W'))
 231   1              {
 232   2                      bEPPflags.bits.command=0;
 233   2                      bEPPflags.bits.ep2_rxdone=0;
 234   2                      if (ComEpBuf[5]>64) ComEpBuf[5]=64;
 235   2                      rwrom_addr.word=(ComEpBuf[4] <<8)+ComEpBuf[3];
 236   2                      rwlen.byte.high=0;
 237   2                      rwlen.byte.low=((~rwrom_addr.byte.low) & i2crom_mask[rwrom_type.byte.low])+1;
 238   2                      rwcount=0;
 239   2              
 240   2                      if ((operate_type==1) || (operate_type==2))
 241   2                      {
C51 COMPILER V7.00  MAINLOOP                                                               06/16/2004 13:29:52 PAGE 5   

 242   3                              write_24cxx();
 243   3                      }//end of write 24cxx
 244   2                      
 245   2              }//end of ep2_rxd
 246   1      
 247   1      }//end of sub
 248          
 249          
 250          void write_24cxx(void)
 251          {
 252   1              do
 253   1              {
 254   2                      if (ComEpBuf[5]>rwlen.byte.low)
 255   2                      {
 256   3                              ComEpBuf[5]=ComEpBuf[5]-rwlen.byte.low;
 257   3                      }
 258   2                      else
 259   2                      {
 260   3                              rwlen.byte.low=ComEpBuf[5];
 261   3                              ComEpBuf[5]=0;
 262   3                      }
 263   2                      if ((rwrom_addr.word+rwlen.byte.low)>rom_size[rwrom_type.byte.low])
 264   2                      {
 265   3                              rwlen.word=rom_size[rwrom_type.byte.low]-rwrom_addr.word;
 266   3                              if (rwrom_addr.word>rom_size[rwrom_type.byte.low])
 267   3                              {
 268   4                                      operate_type=0;
 269   4                              }
 270   3                              ComEpBuf[5]=0;
 271   3                      }
 272   2                      if (operate_type==1) 
 273   2                      {
 274   3                              do
 275   3                              {
 276   4                                      i=Iwcheck(0xa0);
 277   4                              }while (i==0);
 278   3                              eprom_sla=0xa0 | rwrom_addr.byte.high;
 279   3                              i=ISendStr(eprom_sla, rwrom_addr.byte.low, &(EpBuf[rwcount]), rwlen.byte.low);
 280   3                      }
 281   2                      if (operate_type==2) 
 282   2                      {
 283   3                              do
 284   3                              {
 285   4                                      i=Iwcheck(0xa0);
 286   4                              }while (i==0);
 287   3                              eprom_sub=&(rwrom_addr.byte.high);
 288   3                              i=ISendStr2(0xa0, eprom_sub, &(EpBuf[rwcount]), rwlen.byte.low);
 289   3                      }
 290   2                      rwrom_addr.word=rwrom_addr.word+rwlen.byte.low;
 291   2                      rwcount=rwcount+rwlen.byte.low;
 292   2                      rwlen.byte.low=i2crom_mask[rwrom_type.byte.low]+1;
 293   2                      rwlen.byte.high=0;
 294   2              }while (ComEpBuf[5]!=0);//end of do
 295   1      }//end of write_24cxx sub
 296          
 297          void read_24cxx(void)
 298          {
 299   1              if (operate_type==1) 
 300   1              {
 301   2                      eprom_sla=0xa0 | rwrom_addr.byte.high;
 302   2                      i=IRcvStr(eprom_sla, rwrom_addr.byte.low, EpBuf, rwlen.byte.low);
 303   2                      D12_WriteEndpoint(5, rwlen.byte.low, EpBuf);
C51 COMPILER V7.00  MAINLOOP                                                               06/16/2004 13:29:52 PAGE 6   

 304   2              }//end of read 24c01,02,04,08,
 305   1              if (operate_type==2) 
 306   1              {
 307   2                      eprom_sub=&(rwrom_addr.byte.high);
 308   2                      i=IRcvStr2(0xa0, eprom_sub, EpBuf, rwlen.byte.low);
 309   2                      D12_WriteEndpoint(5, rwlen.byte.low, EpBuf);
 310   2              }//end of read 24c64
 311   1      }//end of read_24cxx sub
 312          
 313          
 314          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1023    ----
   CONSTANT SIZE    =     21    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13    ----
   IDATA SIZE       =      8    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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