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

📄 mainloop.lst

📁 周立功的DP-51+实验板 应用程序(原代码)
💻 LST
📖 第 1 页 / 共 2 页
字号:
 178   1      }
 179          
C51 COMPILER V7.06   MAINLOOP                                                              12/06/2003 10:37:16 PAGE 4   

 180          //返回stall应答
 181          void stall_ep0(void)
 182          {
 183   1              D12_SetEndpointStatus(0, 1);
 184   1              D12_SetEndpointStatus(1, 1);
 185   1      }
 186          
 187          //断开USB总线
 188          void disconnect_USB(void)
 189          {
 190   1              // Initialize D12 configuration
 191   1              D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
 192   1      }
 193          
 194          //连接USB总线
 195          void connect_USB(void)
 196          {
 197   1              // reset event flags
 198   1              DISABLE;
 199   1              bEPPflags.value = 0;//清除所有状态
 200   1              ENABLE;
 201   1      
 202   1              // V2.1 enable normal+sof interrupt
 203   1              D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
 204   1      
 205   1              // Initialize D12 configuration
 206   1              D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
 207   1      }
 208          
 209          //重新连接到USB总线
 210          void reconnect_USB(void)
 211          {
 212   1              unsigned long clk_cnt;
 213   1      
 214   1              // Pull-down D12's SUSPEND pin
 215   1              // Disable 74HCT123 pulse generation before disconnect
 216   1              // Release D12's SUSPEND pin after receiving bus reset from host
 217   1              D12SUSPD = 0;
 218   1              disconnect_USB();
 219   1      
 220   1              clk_cnt = ClockTicks;
 221   1              while(ClockTicks < clk_cnt + 20)
 222   1                      ;
 223   1      
 224   1              connect_USB();
 225   1      
 226   1      }
 227          
 228          //恢复到未配置状态
 229          void init_unconfig(void)
 230          {
 231   1      //      unsigned char i;
 232   1      
 233   1              D12_SetEndpointEnable(0);       /* Disable all endpoints but EPP0. */
 234   1      }
 235          
 236          //设置配置状态
 237          void init_config(void)
 238          {
 239   1              D12_SetEndpointEnable(1);       /* Enable  generic/iso endpoints. */
 240   1      }
 241          
C51 COMPILER V7.06   MAINLOOP                                                              12/06/2003 10:37:16 PAGE 5   

 242          //从端点号1发送数据
 243          void single_transmit(unsigned char * buf, unsigned char len)
 244          {
 245   1              if( len <= EP0_PACKET_SIZE) {
 246   2                      D12_WriteEndpoint(1, len, buf);
 247   2              }
 248   1      }
 249          
 250          //发送端点号1建立代码
 251          void code_transmit(unsigned char code * pRomData, unsigned short len)
 252          {
 253   1              ControlData.wCount = 0;
 254   1              if(ControlData.wLength > len)
 255   1                      ControlData.wLength = len;
 256   1      
 257   1              ControlData.pData = pRomData;
 258   1              if( ControlData.wLength >= EP0_PACKET_SIZE) {
 259   2                      D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);//发送16字节数据
 260   2                      ControlData.wCount += EP0_PACKET_SIZE;
 261   2                      DISABLE;
 262   2                      bEPPflags.bits.control_state = USB_TRANSMIT;
 263   2                      ENABLE;
 264   2              }
 265   1              else {
 266   2                      D12_WriteEndpoint(1, ControlData.wLength, pRomData);//发送16字节内数据
 267   2                      ControlData.wCount += ControlData.wLength;
 268   2                      DISABLE;
 269   2                      bEPPflags.bits.control_state = USB_IDLE;
 270   2                      ENABLE;
 271   2              }
 272   1      }
 273          
 274          
 275          //LED和按键处理子程序
 276          void check_key_LED(void)
 277          {
 278   1              static unsigned char kk=0x00;
 279   1              static unsigned char c = 0xff;
 280   1              static bit last_key = 1;
 281   1              LED_CS=1;
 282   1              KD_KEY=1;
 283   1              send(0x00);
 284   1              
 285   1              if(KD_KEY^last_key )
 286   1              {        
 287   2                      last_key = ~last_key;
 288   2                      c=~c;
 289   2                      D12_WriteEndpoint(3, 1, &c);//发送按键状态
 290   2              }
 291   1      
 292   1              if(bEPPflags.bits.ep1_rxdone)
 293   1              {
 294   2                      DISABLE;
 295   2                      bEPPflags.bits.ep1_rxdone = 0;
 296   2                      ENABLE;
 297   2                      kk=~GenEpBuf[3];                                ;//改变LED状态
 298   2                      
 299   2              }
 300   1              send(kk);
 301   1              LED_CS=0;
 302   1              delay(0x01);
 303   1              LED_CS=1;
C51 COMPILER V7.06   MAINLOOP                                                              12/06/2003 10:37:16 PAGE 6   

 304   1      }
 305          
 306          //DMA建立子程序
 307          void setup_dma()
 308          {
 309   1              ioSize = ioRequest.uSize;
 310   1              ioCount = 0;
 311   1      
 312   1              DISABLE;
 313   1              bEPPflags.bits.dma_state = DMA_RUNNING;
 314   1              ENABLE;
 315   1      
 316   1              single_transmit(0, 0);
 317   1      
 318   1              if(ioRequest.bCommand & 0x1) {
 319   2                      if(ioSize > 64 || ioSize == 0) {
 320   3                              //传输大于64字节数据
 321   3                              D12_WriteEndpoint(5, 64, EpBuf);
 322   3                              ioCount += 64;
 323   3                      }
 324   2                      else {
 325   3                              //传输64字节数据
 326   3                              D12_WriteEndpoint(5, ioSize, EpBuf);
 327   3                              ioCount += ioSize;
 328   3                      }
 329   2              }
 330   1      }
 331          
 332          //请求处理子程序
 333          void control_handler()
 334          {
 335   1              unsigned char type, req;
 336   1      
 337   1              type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
 338   1              req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
 339   1      
 340   1              if (type == USB_STANDARD_REQUEST)
 341   1                      (*StandardDeviceRequest[req])();//调用标准请求
 342   1              else if (type == USB_VENDOR_REQUEST)
 343   1                      (*VendorDeviceRequest[req])();//调用厂商请求
 344   1              else
 345   1                      stall_ep0();
 346   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    703    ----
   CONSTANT SIZE    =     96    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26       8
   IDATA SIZE       =   ----    ----
   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 + -