chap_9.SRC
上传用户:ids068
上传日期:2013-04-04
资源大小:639k
文件大小:115k
源码类别:

USB编程

开发平台:

C/C++

  1. ; .chap_9.SRC generated from: chap_9.c
  2. ; COMPILER INVOKED BY:
  3. ;        C:KEILC51BINC51.EXE chap_9.c OPTIMIZE(2,SPEED) BROWSE DEBUG OBJECTEXTEND SRC(.chap_9.SRC)
  4. $NOMOD51
  5. NAME CHAP_9
  6. P0 DATA 080H
  7. P1 DATA 090H
  8. P2 DATA 0A0H
  9. P3 DATA 0B0H
  10. T0 BIT 0B0H.4
  11. AC BIT 0D0H.6
  12. T1 BIT 0B0H.5
  13. EA BIT 0A8H.7
  14. IE DATA 0A8H
  15. DMA_Wr_Rd BIT 090H.4
  16. RD BIT 0B0H.7
  17. ES BIT 0A8H.4
  18. IP DATA 0B8H
  19. RI BIT 098H.0
  20. INT0 BIT 0B0H.2
  21. CY BIT 0D0H.7
  22. TI BIT 098H.1
  23. INT1 BIT 0B0H.3
  24. ISP1581_RESET BIT 090H.3
  25. PS BIT 0B8H.4
  26. SP DATA 081H
  27. OV BIT 0D0H.2
  28. WR BIT 0B0H.6
  29. SBUF DATA 099H
  30. PCON DATA 087H
  31. ISP1581_CS BIT 090H.2
  32. SCON DATA 098H
  33. TMOD DATA 089H
  34. TCON DATA 088H
  35. RESET_IDE BIT 090H.4
  36. DMA_Reset BIT 090H.4
  37. IE0 BIT 088H.1
  38. IE1 BIT 088H.3
  39. AUXR DATA 08EH
  40. B DATA 0F0H
  41. DMA_Start BIT 090H.4
  42. ACC DATA 0E0H
  43. ET0 BIT 0A8H.1
  44. ET1 BIT 0A8H.3
  45. TF0 BIT 088H.5
  46. HS_FS_LED BIT 090H.0
  47. TF1 BIT 088H.7
  48. RB8 BIT 098H.2
  49. TH0 DATA 08CH
  50. EX0 BIT 0A8H.0
  51. IT0 BIT 088H.0
  52. TH1 DATA 08DH
  53. TB8 BIT 098H.3
  54. EX1 BIT 0A8H.2
  55. IT1 BIT 088H.2
  56. P BIT 0D0H.0
  57. SM0 BIT 098H.7
  58. TL0 DATA 08AH
  59. SM1 BIT 098H.6
  60. TL1 DATA 08BH
  61. SM2 BIT 098H.5
  62. PT0 BIT 0B8H.1
  63. PT1 BIT 0B8H.3
  64. RS0 BIT 0D0H.3
  65. TR0 BIT 088H.4
  66. RS1 BIT 0D0H.4
  67. TR1 BIT 088H.6
  68. PX0 BIT 0B8H.0
  69. PX1 BIT 0B8H.2
  70. DPH DATA 083H
  71. DPL DATA 082H
  72. VBus_Sense BIT 0A0H.4
  73. REN BIT 098H.4
  74. RXD BIT 0B0H.0
  75. CKCON DATA 08FH
  76. TXD BIT 0B0H.1
  77. F0 BIT 0D0H.5
  78. PSW DATA 0D0H
  79. ?PR?USB_Debug_Mode?CHAP_9                SEGMENT CODE 
  80. ?PR?USB_Setup?CHAP_9 SEGMENT CODE 
  81. ?DT?USB_Setup?CHAP_9 SEGMENT DATA OVERLAYABLE 
  82. ?PR?Vendor_Specific_Command?CHAP_9       SEGMENT CODE 
  83. ?PR?reserved?CHAP_9  SEGMENT CODE 
  84. ?PR?get_descriptor?CHAP_9                SEGMENT CODE 
  85. ?PR?set_address?CHAP_9                   SEGMENT CODE 
  86. ?PR?set_config?CHAP_9                    SEGMENT CODE 
  87. ?PR?get_config?CHAP_9                    SEGMENT CODE 
  88. ?PR?clear_feature?CHAP_9                 SEGMENT CODE 
  89. ?DT?clear_feature?CHAP_9                 SEGMENT DATA OVERLAYABLE 
  90. ?PR?get_status?CHAP_9                    SEGMENT CODE 
  91. ?PR?set_feature?CHAP_9                   SEGMENT CODE 
  92. ?DT?set_feature?CHAP_9                   SEGMENT DATA OVERLAYABLE 
  93. ?PR?get_interface?CHAP_9                 SEGMENT CODE 
  94. ?PR?set_interface?CHAP_9                 SEGMENT CODE 
  95. ?PR?ep0in_ack?CHAP_9 SEGMENT CODE 
  96. ?PR?wait_ep0tx?CHAP_9                    SEGMENT CODE 
  97. ?PR?ep0out_ack?CHAP_9                    SEGMENT CODE 
  98. ?PR?wait_ep0rx?CHAP_9                    SEGMENT CODE 
  99. ?PR?_read_endpoint?CHAP_9                SEGMENT CODE 
  100. ?DT?_read_endpoint?CHAP_9                SEGMENT DATA OVERLAYABLE 
  101. ?CO?CHAP_9           SEGMENT CODE 
  102. ?ID?CHAP_9           SEGMENT IDATA 
  103. ?DT?CHAP_9           SEGMENT DATA 
  104. EXTRN CODE (Standard_String_ID)
  105. EXTRN CODE (HS_Bulk_Interface_Descriptor)
  106. EXTRN CODE (Bulk_Interface_Descriptor)
  107. EXTRN XDATA (D14_Cntrl_Reg)
  108. EXTRN DATA (Temp)
  109. EXTRN CODE (Other_Speed_Config_Descriptor)
  110. EXTRN CODE (HS_Bulk_In_Descriptor)
  111. EXTRN DATA (count)
  112. EXTRN CODE (HS_Bulk_Out_Descriptor)
  113. EXTRN CODE (Bulk_In_Descriptor)
  114. EXTRN CODE (Bulk_Out_Descriptor)
  115. EXTRN CODE (Init_Endpoint)
  116. EXTRN DATA (Kernel_Flag)
  117. EXTRN CODE (HS_Int_In_Descriptor)
  118. EXTRN CODE (HS_Int_Out_Descriptor)
  119. EXTRN CODE (Int_In_Descriptor)
  120. EXTRN CODE (Int_Out_Descriptor)
  121. EXTRN CODE (HS_Device_Descriptor)
  122. EXTRN CODE (HS_Device_Qualifier)
  123. EXTRN DATA (Device_Config_Value)
  124. EXTRN CODE (Standard_Device_Descriptor)
  125. EXTRN CODE (Standard_Config_Descriptor)
  126. EXTRN CODE (?C?ICALL)
  127. EXTRN CODE (?C?ICASE)
  128. EXTRN CODE (?C?LSHL)
  129. EXTRN CODE (?C?LSTXDATA)
  130. EXTRN CODE (?C?CSTPTR)
  131. PUBLIC USB_Device_Request
  132. PUBLIC VID
  133. PUBLIC bytecount
  134. PUBLIC PID
  135. PUBLIC PIO_Count
  136. PUBLIC USB_Int_Flag
  137. PUBLIC File_Number
  138. PUBLIC Current_File
  139. PUBLIC Descriptor_Ptr
  140. PUBLIC FileSize
  141. PUBLIC USB_Device
  142. PUBLIC FIFO_Count
  143. PUBLIC Endpt_FIFO
  144. PUBLIC StandardDeviceRequest
  145. PUBLIC _read_endpoint
  146. PUBLIC wait_ep0rx
  147. PUBLIC ep0out_ack
  148. PUBLIC wait_ep0tx
  149. PUBLIC ep0in_ack
  150. PUBLIC set_interface
  151. PUBLIC get_interface
  152. PUBLIC set_feature
  153. PUBLIC get_status
  154. PUBLIC clear_feature
  155. PUBLIC get_config
  156. PUBLIC set_config
  157. PUBLIC set_address
  158. PUBLIC get_descriptor
  159. PUBLIC reserved
  160. PUBLIC Vendor_Specific_Command
  161. PUBLIC USB_Setup
  162. PUBLIC USB_Debug_Mode
  163. RSEG  ?DT?set_feature?CHAP_9
  164. ?set_feature?BYTE:
  165. bRecipient?1043:   DS   1
  166. RSEG  ?DT?_read_endpoint?CHAP_9
  167. ?_read_endpoint?BYTE:
  168.       endp?1744:   DS   1
  169.        len?1745:   DS   2
  170.        buf?1746:   DS   3
  171. RSEG  ?DT?clear_feature?CHAP_9
  172. ?clear_feature?BYTE:
  173.  bRecipient?842:   DS   1
  174. RSEG  ?DT?USB_Setup?CHAP_9
  175. ?USB_Setup?BYTE:
  176.        type?140:   DS   1
  177.         req?141:   DS   1
  178. RSEG  ?ID?CHAP_9
  179.      Endpt_FIFO:   DS   64
  180. USB_Device_Request:   DS   8
  181. RSEG  ?DT?CHAP_9
  182.      FIFO_Count:   DS   2
  183.      USB_Device:   DS   4
  184.        FileSize:   DS   8
  185.  Descriptor_Ptr:   DS   2
  186.    Current_File:   DS   1
  187.     File_Number:   DS   1
  188.    USB_Int_Flag:   DS   4
  189.       PIO_Count:   DS   2
  190.             PID:   DS   2
  191.       bytecount:   DS   4
  192.             VID:   DS   2
  193. RSEG  ?CO?CHAP_9
  194. StandardDeviceRequest:
  195. DB 0FFH
  196. DW get_status + 0
  197. DB 0FFH
  198. DW clear_feature + 0
  199. DB 0FFH
  200. DW reserved + 0
  201. DB 0FFH
  202. DW set_feature + 0
  203. DB 0FFH
  204. DW reserved + 0
  205. DB 0FFH
  206. DW set_address + 0
  207. DB 0FFH
  208. DW get_descriptor + 0
  209. DB 0FFH
  210. DW reserved + 0
  211. DB 0FFH
  212. DW get_config + 0
  213. DB 0FFH
  214. DW set_config + 0
  215. DB 0FFH
  216. DW get_interface + 0
  217. DB 0FFH
  218. DW set_interface + 0
  219. DB 0FFH
  220. DW reserved + 0
  221. DB 0FFH
  222. DW reserved + 0
  223. DB 0FFH
  224. DW reserved + 0
  225. DB 0FFH
  226. DW reserved + 0
  227. ; //***********************************************************************
  228. ; //                         *
  229. ; //                P H I L I P S   P R O P R I E T A R Y              *
  230. ; //                                                                      *
  231. ; //          COPYRIGHT (c)   1999 BY PHILIPS SINGAPORE (APIC).        *
  232. ; //                    --  ALL RIGHTS RESERVED  --                  *
  233. ; //                                                                      *
  234. ; //  File Name :       USBDebug.c                                    *
  235. ; //  Author :       Albert Goh         *
  236. ; //  Created :       3 March 2000                                *
  237. ; //                                                                      *
  238. ; //***********************************************************************
  239. ; //***********************************************************************
  240. ; //                                                                      *
  241. ; // USBDebug has the ability to test the USB core in Bus enumeration or  *
  242. ; // in CBI/bulk mode.                                                   *
  243. ; //                                                                      *
  244. ; //***********************************************************************
  245. ; //***********************************************************************
  246. ; //                                                                      *
  247. ; //  Module History             *
  248. ; //  **************             *
  249. ; //                   *
  250. ; //  Date    Version Author Changes       *
  251. ; //  ====    ======= ====== =======       *
  252. ; //  030300   0.1  Albert Created           *
  253. ; //                                                                      *
  254. ; //***********************************************************************
  255. ; //***********************************************************************
  256. ; //*                *
  257. ; //*                      Include Files Definition    *
  258. ; //*                *
  259. ; //***********************************************************************
  260. ; #include "standard.h"
  261. ; #include "Kernel.h"
  262. ; #include "D14.h"
  263. ; #include "usb.h"
  264. ; extern volatile D14_CNTRL_REG xdata D14_Cntrl_Reg;
  265. ; extern void Init_D14(void);
  266. ; extern UC code Standard_Device_Descriptor[];
  267. ; extern UC code Bulk_Interface_Descriptor[];
  268. ; extern UC code Iso_Interface_Descriptor[];
  269. ; extern UC code Standard_Config_Descriptor[];
  270. ; extern UC code Standard_Manufacturer_String[];
  271. ; extern UC code Standard_Product_String[];
  272. ; extern UC code Standard_String_ID[];
  273. ; extern UC code Bulk_In_Descriptor[];
  274. ; extern UC code Bulk_Out_Descriptor[];
  275. ; extern UC code Int_In_Descriptor[];
  276. ; extern UC code Int_Out_Descriptor[];
  277. ; extern UC code Iso_In_Descriptor[];
  278. ; extern UC code Iso_Out_Descriptor[];
  279. ; extern UC code Iso_In_Zero_Descriptor[];
  280. ; extern UC code Iso_Out_Zero_Descriptor[];
  281. ; extern UC code HS_Device_Descriptor[];
  282. ; extern UC code HS_Device_Qualifier[];
  283. ; extern UC code HS_Bulk_Interface_Descriptor[];
  284. ; extern UC code HS_Bulk_In_Descriptor[];
  285. ; extern UC code HS_Bulk_Out_Descriptor[];
  286. ; extern UC code HS_Int_In_Descriptor[];
  287. ; extern UC code HS_Int_Out_Descriptor[];
  288. ; extern UC code Other_Speed_Config_Descriptor[];
  289. ; extern UI count;
  290. ; extern void Start_mSEC_Timer(Data);
  291. ; extern void Start_SEC_Timer(Data);
  292. ; extern void Check_Busy(void);
  293. ; extern void TaskFile_Update(void);
  294. ; extern UI Temp;
  295. ; extern UC Device_Config_Value;
  296. ; extern KERNEL Kernel_Flag;
  297. ; extern DMA_INT_FLAG DMA_Int_Flag;
  298. ; extern USB_INT_FLAG USB_Int_Flag;
  299. ; extern USBCBW USB_CBW;
  300. ; extern void Init_Device(void);
  301. ; extern UC code Test_Packet[];
  302. ; extern void Init_Endpoint(void);
  303. ; extern void Init_Device(void);
  304. ; extern void Set_USB(void);
  305. ; //***********************************************************************
  306. ; //*                *
  307. ; //*                  Prototype Routine Definition      *
  308. ; //*                *
  309. ; //***********************************************************************
  310. ; void USB_Setup(void);
  311. ; void reserved(void);
  312. ; void Send_Device_Status(void);
  313. ; void Send_Interface_Status(void);
  314. ; void Send_Endpoint_Status(void);
  315. ; void Vendor_Specific_Command(void);
  316. ; void Send_Status(unsigned char tran_status);
  317. ; void Set_Interface_Value(void);
  318. ; void Get_Interface_Value(void);
  319. ; void Process_Synch_Frame(void);
  320. ; void get_status(void);
  321. ; void clear_feature(void);
  322. ; void set_feature(void);
  323. ; void set_address(void);
  324. ; void get_descriptor(void);
  325. ; void get_config(void);
  326. ; void set_config(void);
  327. ; void get_interface(void);
  328. ; void set_interface(void);
  329. ; void Set_Descriptor(void);
  330. ; void reserved(void);
  331. ; void ep0in_ack(void);
  332. ; void ep0out_ack(void);
  333. ; void wait_ep0tx(void);
  334. ; void wait_ep0rx(void);
  335. ; //***********************************************************************
  336. ; //*                *
  337. ; //*                      Variable Definition        *
  338. ; //*                *
  339. ; //***********************************************************************
  340. ; USB_INT_FLAG  USB_Int_Flag;
  341. ; USB_DEVICE_REQ idata USB_Device_Request;
  342. ; USB_DEVICE USB_Device;
  343. ; UC code *Descriptor_Ptr;
  344. ; UC idata Endpt_FIFO[MAX_BUF];
  345. ; UI FIFO_Count;
  346. ; UC VID[2],PID[2];
  347. ; FILESIZE FileSize;
  348. ; UI PIO_Count;
  349. ; UC File_Number;
  350. ; UC Current_File;
  351. ; ULI bytecount;
  352. ; //USB标准请求
  353. ; code void (*StandardDeviceRequest[])(void) =
  354. ; {
  355. ;  get_status,
  356. ;  clear_feature,
  357. ;  reserved,
  358. ;  set_feature,
  359. ;  reserved,
  360. ;  set_address,
  361. ;  get_descriptor,
  362. ;  reserved,
  363. ;  get_config,
  364. ;  set_config,
  365. ;  get_interface,
  366. ;  set_interface,
  367. ;  reserved,
  368. ;  reserved,
  369. ;  reserved,
  370. ;  reserved
  371. ; };
  372. ; //***********************************************************************
  373. ; //*                *
  374. ; //*                      Routine Definition    *
  375. ; //*                *
  376. ; //***********************************************************************
  377. ; //***********************************************************************
  378. ; //*                     *
  379. ; //* Routine  :  USB Debug Mode                                     *
  380. ; //* Input :  USB Interrupt Register           *
  381. ; //* Output :  None                                    *
  382. ; //* Function :  Branch to respective ISR                      *
  383. ; //*                *
  384. ; //***********************************************************************
  385. ; void USB_Debug_Mode(void)
  386. RSEG  ?PR?USB_Debug_Mode?CHAP_9
  387. USB_Debug_Mode:
  388. USING 0
  389. ; SOURCE LINE # 179
  390. ; {
  391. ; SOURCE LINE # 180
  392. ;  //端点0接收到setup包处理      
  393. ;     if(USB_Int_Flag.BITS.EP0SETUP)
  394. ; SOURCE LINE # 182
  395. MOV   R7,USB_Int_Flag+01H
  396. MOV   A,R7
  397. JNB   ACC.0,?C0001
  398. ;  {
  399. ; SOURCE LINE # 183
  400. ;  EA_DISABLE;
  401. ; SOURCE LINE # 184
  402. CLR   EA
  403. ;  USB_Setup();
  404. ; SOURCE LINE # 185
  405. LCALL USB_Setup
  406. ;  EA_ENABLE;
  407. ; SOURCE LINE # 186
  408. SETB  EA
  409. ;  }
  410. ; SOURCE LINE # 187
  411. ?C0001:
  412. ;  //挂起处理
  413. ;  if(USB_Int_Flag.BITS.SUSP)
  414. ; SOURCE LINE # 190
  415. MOV   R7,USB_Int_Flag
  416. MOV   A,R7
  417. RRC   A
  418. RRC   A
  419. RRC   A
  420. ANL   A,#01FH
  421. MOV   R7,A
  422. MOV   A,R7
  423. JNB   ACC.0,?C0002
  424. ;  {
  425. ; SOURCE LINE # 191
  426. ;  //清除挂起标志
  427. ;  EA_DISABLE;
  428. ; SOURCE LINE # 193
  429. CLR   EA
  430. ;  USB_Int_Flag.BITS.SUSP = 0;
  431. ; SOURCE LINE # 194
  432. MOV   R7,USB_Int_Flag
  433. MOV   A,R7
  434. ANL   A,#0F7H
  435. MOV   USB_Int_Flag,A
  436. ;  EA_ENABLE;
  437. ; SOURCE LINE # 195
  438. SETB  EA
  439. ;  //ISP1581进入挂起状态           
  440. ;  D14_Cntrl_Reg.D14_MODE.BITS.GOSUSP = 1;
  441. ; SOURCE LINE # 197
  442. MOV   DPTR,#D14_Cntrl_Reg+0CH
  443. MOVX  A,@DPTR
  444. MOV   R7,A
  445. MOV   A,R7
  446. ORL   A,#020H
  447. MOV   R7,A
  448. MOV   DPTR,#D14_Cntrl_Reg+0CH
  449. MOV   A,R7
  450. MOVX  @DPTR,A
  451. ;  D14_Cntrl_Reg.D14_MODE.BITS.GOSUSP = 0;
  452. ; SOURCE LINE # 198
  453. MOV   DPTR,#D14_Cntrl_Reg+0CH
  454. MOVX  A,@DPTR
  455. MOV   R7,A
  456. MOV   A,R7
  457. ANL   A,#0DFH
  458. MOV   R7,A
  459. MOV   DPTR,#D14_Cntrl_Reg+0CH
  460. MOV   A,R7
  461. MOVX  @DPTR,A
  462. ;  }
  463. ; SOURCE LINE # 199
  464. ?C0002:
  465. ;  //挂起恢复处理
  466. ;  if(USB_Int_Flag.BITS.RESUME)
  467. ; SOURCE LINE # 202
  468. MOV   R7,USB_Int_Flag
  469. MOV   A,R7
  470. SWAP  A
  471. ANL   A,#0FH
  472. MOV   R7,A
  473. MOV   A,R7
  474. JNB   ACC.0,?C0003
  475. ;  {
  476. ; SOURCE LINE # 203
  477. ;  //清除恢复标志
  478. ;  EA_DISABLE;
  479. ; SOURCE LINE # 205
  480. CLR   EA
  481. ;  USB_Int_Flag.BITS.RESUME = 0;         
  482. ; SOURCE LINE # 206
  483. MOV   R7,USB_Int_Flag
  484. MOV   A,R7
  485. ANL   A,#0EFH
  486. MOV   USB_Int_Flag,A
  487. ;  EA_ENABLE;
  488. ; SOURCE LINE # 207
  489. SETB  EA
  490. ;  //产生一个恢复信号
  491. ;  D14_Cntrl_Reg.D14_MODE.BITS.SNDRSU = 1;
  492. ; SOURCE LINE # 209
  493. MOV   DPTR,#D14_Cntrl_Reg+0CH
  494. MOVX  A,@DPTR
  495. MOV   R7,A
  496. MOV   A,R7
  497. ORL   A,#040H
  498. MOV   R7,A
  499. MOV   DPTR,#D14_Cntrl_Reg+0CH
  500. MOV   A,R7
  501. MOVX  @DPTR,A
  502. ;  D14_Cntrl_Reg.D14_MODE.BITS.SNDRSU = 0;
  503. ; SOURCE LINE # 210
  504. MOV   DPTR,#D14_Cntrl_Reg+0CH
  505. MOVX  A,@DPTR
  506. MOV   R7,A
  507. MOV   A,R7
  508. ANL   A,#0BFH
  509. MOV   R7,A
  510. MOV   DPTR,#D14_Cntrl_Reg+0CH
  511. MOV   A,R7
  512. MOVX  @DPTR,A
  513. ;     }
  514. ; SOURCE LINE # 211
  515. ?C0003:
  516. ;  //高速状态
  517. ;  if(USB_Int_Flag.BITS.HS_STAT)
  518. ; SOURCE LINE # 214
  519. MOV   R7,USB_Int_Flag
  520. MOV   A,R7
  521. SWAP  A
  522. RRC   A
  523. ANL   A,#07H
  524. MOV   R7,A
  525. MOV   A,R7
  526. JNB   ACC.0,?C0006
  527. ;  {
  528. ; SOURCE LINE # 215
  529. ;  //清除高速状态标志
  530. ;  EA_DISABLE;
  531. ; SOURCE LINE # 217
  532. CLR   EA
  533. ;  USB_Int_Flag.BITS.HS_STAT = 0;
  534. ; SOURCE LINE # 218
  535. MOV   R7,USB_Int_Flag
  536. MOV   A,R7
  537. ANL   A,#0DFH
  538. MOV   USB_Int_Flag,A
  539. ;  EA_ENABLE;
  540. ; SOURCE LINE # 219
  541. SETB  EA
  542. ;  if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
  543. ; SOURCE LINE # 220
  544. MOV   R7,Kernel_Flag+03H
  545. MOV   A,R7
  546. JNB   ACC.0,?C0006
  547. ;  {
  548. ; SOURCE LINE # 221
  549. ;  //切换高速指示
  550. ;  HS_FS_LED = HIGH_SPEED_LED;
  551. ; SOURCE LINE # 223
  552. SETB  HS_FS_LED
  553. ;  //设置高速模式状态
  554. ;  Kernel_Flag.BITS.HS_FS_State = HIGH_SPEED;
  555. ; SOURCE LINE # 225
  556. MOV   R7,Kernel_Flag+03H
  557. MOV   A,R7
  558. ANL   A,#0FEH
  559. MOV   Kernel_Flag+03H,A
  560. ;  //重新配置高速端点
  561. ;  Init_Endpoint();
  562. ; SOURCE LINE # 227
  563. LCALL Init_Endpoint
  564. ; // PIO_Count = 64;
  565. ;  PIO_Count = 512;
  566. ; SOURCE LINE # 230
  567. MOV   PIO_Count,#02H
  568. MOV   PIO_Count+01H,#00H
  569. ;  }
  570. ; SOURCE LINE # 231
  571. ;  }
  572. ; SOURCE LINE # 232
  573. ; }
  574. ; SOURCE LINE # 233
  575. ?C0006:
  576. RET  
  577. ; END OF USB_Debug_Mode
  578. ; //***********************************************************************
  579. ; //*      *
  580. ; //* Routine  :                                                 *
  581. ; //* Input : None                    *
  582. ; //* Output : None                                 *
  583. ; //* Function :                                             *
  584. ; //* *
  585. ; //***********************************************************************
  586. ; //建立包处理
  587. ; void USB_Setup(void)
  588. RSEG  ?PR?USB_Setup?CHAP_9
  589. USB_Setup:
  590. USING 0
  591. ; SOURCE LINE # 245
  592. ; {
  593. ; SOURCE LINE # 246
  594. ;  unsigned char type, req;
  595. ;  //清除EP0SETUP中断标志
  596. ;  USB_Int_Flag.BITS.EP0SETUP = 0;   
  597. ; SOURCE LINE # 250
  598. MOV   R7,USB_Int_Flag+01H
  599. MOV   A,R7
  600. ANL   A,#0FEH
  601. MOV   USB_Int_Flag+01H,A
  602. ;  //清除总线复位标志
  603. ;     Kernel_Flag.BITS.Bus_Reset = 0;
  604. ; SOURCE LINE # 252
  605. MOV   R7,Kernel_Flag+01H
  606. MOV   A,R7
  607. ANL   A,#0BFH
  608. MOV   Kernel_Flag+01H,A
  609. ;  //选择端点0SETUP缓冲区
  610. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 0x20;
  611. ; SOURCE LINE # 254
  612. MOV   DPTR,#D14_Cntrl_Reg+02CH
  613. MOV   A,#020H
  614. MOVX  @DPTR,A
  615. ;  //读取USB请求
  616. ;  //读取请求类型
  617. ;  USB_Device_Request.bmRequestType =  D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  618. ; SOURCE LINE # 258
  619. MOV   DPTR,#D14_Cntrl_Reg+020H
  620. MOVX  A,@DPTR
  621. MOV   R7,A
  622. MOV   R0,#LOW (USB_Device_Request)
  623. MOV   @R0,AR7
  624. ;  //读取请求号
  625. ;  USB_Device_Request.bRequest = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  626. ; SOURCE LINE # 260
  627. MOV   DPTR,#D14_Cntrl_Reg+020H
  628. MOVX  A,@DPTR
  629. MOV   R7,A
  630. MOV   R0,#LOW (USB_Device_Request+01H)
  631. MOV   @R0,AR7
  632. ;  //读取16bit请求数据
  633. ;  USB_Device_Request.wValue = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  634. ; SOURCE LINE # 262
  635. MOV   DPTR,#D14_Cntrl_Reg+020H
  636. MOVX  A,@DPTR
  637. MOV   R7,A
  638. MOV   R6,#00H
  639. MOV   R0,#LOW (USB_Device_Request+02H)
  640. MOV   @R0,AR6
  641. INC   R0
  642. MOV   @R0,AR7
  643. ;  USB_Device_Request.wValue <<= 8;
  644. ; SOURCE LINE # 263
  645. MOV   R0,#LOW (USB_Device_Request+02H)
  646. MOV   A,@R0
  647. MOV   R6,A
  648. INC   R0
  649. MOV   A,@R0
  650. MOV   R7,A
  651. MOV   A,R7
  652. MOV   R7,#00H
  653. MOV   R6,A
  654. MOV   R0,#LOW (USB_Device_Request+02H)
  655. MOV   @R0,AR6
  656. INC   R0
  657. MOV   @R0,AR7
  658. ;  USB_Device_Request.wValue |= D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  659. ; SOURCE LINE # 264
  660. MOV   R0,#LOW (USB_Device_Request+02H)
  661. MOV   A,@R0
  662. MOV   R6,A
  663. INC   R0
  664. MOV   A,@R0
  665. MOV   R7,A
  666. MOV   DPTR,#D14_Cntrl_Reg+020H
  667. MOVX  A,@DPTR
  668. MOV   R5,A
  669. MOV   R4,#00H
  670. MOV   A,R6
  671. ORL   A,R4
  672. MOV   R6,A
  673. MOV   A,R7
  674. ORL   A,R5
  675. MOV   R7,A
  676. MOV   R0,#LOW (USB_Device_Request+02H)
  677. MOV   @R0,AR6
  678. INC   R0
  679. MOV   @R0,AR7
  680. ;  //读取16bit请求索引
  681. ;  USB_Device_Request.wIndex = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  682. ; SOURCE LINE # 266
  683. MOV   DPTR,#D14_Cntrl_Reg+020H
  684. MOVX  A,@DPTR
  685. MOV   R7,A
  686. MOV   R6,#00H
  687. MOV   R0,#LOW (USB_Device_Request+04H)
  688. MOV   @R0,AR6
  689. INC   R0
  690. MOV   @R0,AR7
  691. ;  USB_Device_Request.wIndex <<= 8;
  692. ; SOURCE LINE # 267
  693. MOV   R0,#LOW (USB_Device_Request+04H)
  694. MOV   A,@R0
  695. MOV   R6,A
  696. INC   R0
  697. MOV   A,@R0
  698. MOV   R7,A
  699. MOV   A,R7
  700. MOV   R7,#00H
  701. MOV   R6,A
  702. MOV   R0,#LOW (USB_Device_Request+04H)
  703. MOV   @R0,AR6
  704. INC   R0
  705. MOV   @R0,AR7
  706. ;  USB_Device_Request.wIndex |= D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  707. ; SOURCE LINE # 268
  708. MOV   R0,#LOW (USB_Device_Request+04H)
  709. MOV   A,@R0
  710. MOV   R6,A
  711. INC   R0
  712. MOV   A,@R0
  713. MOV   R7,A
  714. MOV   DPTR,#D14_Cntrl_Reg+020H
  715. MOVX  A,@DPTR
  716. MOV   R5,A
  717. MOV   R4,#00H
  718. MOV   A,R6
  719. ORL   A,R4
  720. MOV   R6,A
  721. MOV   A,R7
  722. ORL   A,R5
  723. MOV   R7,A
  724. MOV   R0,#LOW (USB_Device_Request+04H)
  725. MOV   @R0,AR6
  726. INC   R0
  727. MOV   @R0,AR7
  728. ;  //读取16bit长度
  729. ;  USB_Device_Request.wLength = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  730. ; SOURCE LINE # 270
  731. MOV   DPTR,#D14_Cntrl_Reg+020H
  732. MOVX  A,@DPTR
  733. MOV   R7,A
  734. MOV   R6,#00H
  735. MOV   R0,#LOW (USB_Device_Request+06H)
  736. MOV   @R0,AR6
  737. INC   R0
  738. MOV   @R0,AR7
  739. ;  USB_Device_Request.wLength <<= 8;
  740. ; SOURCE LINE # 271
  741. MOV   R0,#LOW (USB_Device_Request+06H)
  742. MOV   A,@R0
  743. MOV   R6,A
  744. INC   R0
  745. MOV   A,@R0
  746. MOV   R7,A
  747. MOV   A,R7
  748. MOV   R7,#00H
  749. MOV   R6,A
  750. MOV   R0,#LOW (USB_Device_Request+06H)
  751. MOV   @R0,AR6
  752. INC   R0
  753. MOV   @R0,AR7
  754. ;  USB_Device_Request.wLength |= D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  755. ; SOURCE LINE # 272
  756. MOV   R0,#LOW (USB_Device_Request+06H)
  757. MOV   A,@R0
  758. MOV   R6,A
  759. INC   R0
  760. MOV   A,@R0
  761. MOV   R7,A
  762. MOV   DPTR,#D14_Cntrl_Reg+020H
  763. MOVX  A,@DPTR
  764. MOV   R5,A
  765. MOV   R4,#00H
  766. MOV   A,R6
  767. ORL   A,R4
  768. MOV   R6,A
  769. MOV   A,R7
  770. ORL   A,R5
  771. MOV   R7,A
  772. MOV   R0,#LOW (USB_Device_Request+06H)
  773. MOV   @R0,AR6
  774. INC   R0
  775. MOV   @R0,AR7
  776. ;  //长度处理(高低8位对调)
  777. ;  Temp = USB_Device_Request.wLength;
  778. ; SOURCE LINE # 275
  779. MOV   R0,#LOW (USB_Device_Request+06H)
  780. MOV   A,@R0
  781. MOV   Temp,A
  782. INC   R0
  783. MOV   A,@R0
  784. MOV   Temp+01H,A
  785. ;  USB_Device_Request.wLength = 0;
  786. ; SOURCE LINE # 276
  787. MOV   R0,#LOW (USB_Device_Request+06H)
  788. MOV   @R0,#00H
  789. INC   R0
  790. MOV   @R0,#00H
  791. ;  USB_Device_Request.wLength = (UC) Temp;
  792. ; SOURCE LINE # 277
  793. MOV   R7,Temp+01H
  794. MOV   R6,#00H
  795. MOV   R0,#LOW (USB_Device_Request+06H)
  796. MOV   @R0,AR6
  797. INC   R0
  798. MOV   @R0,AR7
  799. ;  USB_Device_Request.wLength <<= 8;
  800. ; SOURCE LINE # 278
  801. MOV   R0,#LOW (USB_Device_Request+06H)
  802. MOV   A,@R0
  803. MOV   R6,A
  804. INC   R0
  805. MOV   A,@R0
  806. MOV   R7,A
  807. MOV   A,R7
  808. MOV   R7,#00H
  809. MOV   R6,A
  810. MOV   R0,#LOW (USB_Device_Request+06H)
  811. MOV   @R0,AR6
  812. INC   R0
  813. MOV   @R0,AR7
  814. ;  Temp >>= 8;
  815. ; SOURCE LINE # 279
  816. MOV   A,Temp
  817. MOV   Temp+01H,A
  818. MOV   Temp,#00H
  819. ;  USB_Device_Request.wLength |= Temp;
  820. ; SOURCE LINE # 280
  821. MOV   R0,#LOW (USB_Device_Request+06H)
  822. MOV   A,@R0
  823. MOV   R6,A
  824. INC   R0
  825. MOV   A,@R0
  826. MOV   R7,A
  827. MOV   A,R6
  828. ORL   A,Temp
  829. MOV   R6,A
  830. MOV   A,R7
  831. ORL   A,Temp+01H
  832. MOV   R7,A
  833. MOV   R0,#LOW (USB_Device_Request+06H)
  834. MOV   @R0,AR6
  835. INC   R0
  836. MOV   @R0,AR7
  837. ;  type = USB_Device_Request.bmRequestType & 0x60;
  838. ; SOURCE LINE # 282
  839. MOV   R0,#LOW (USB_Device_Request)
  840. MOV   A,@R0
  841. MOV   R7,A
  842. MOV   A,R7
  843. ANL   A,#060H
  844. MOV   type?140,A
  845. ;  req = USB_Device_Request.bRequest & 0x0f;
  846. ; SOURCE LINE # 283
  847. MOV   R0,#LOW (USB_Device_Request+01H)
  848. MOV   A,@R0
  849. MOV   R7,A
  850. MOV   A,R7
  851. ANL   A,#0FH
  852. MOV   req?141,A
  853. ;  //厂商请求
  854. ;  if (type == 0x40)
  855. ; SOURCE LINE # 286
  856. MOV   A,type?140
  857. CJNE  A,#040H,?C0007
  858. ;  {
  859. ; SOURCE LINE # 287
  860. ;  Vendor_Specific_Command();//厂商请求处理
  861. ; SOURCE LINE # 288
  862. LCALL Vendor_Specific_Command
  863. ;  }
  864. ; SOURCE LINE # 289
  865. RET  
  866. ?C0007:
  867. ;  else if (type == 0x00)
  868. ; SOURCE LINE # 290
  869. MOV   A,type?140
  870. JNZ   ?C0010
  871. ;  (*StandardDeviceRequest[req])();//调用标准请求
  872. ; SOURCE LINE # 291
  873. MOV   R7,req?141
  874. MOV   A,R7
  875. MOV   B,#03H
  876. MUL   AB
  877. ADD   A,#LOW (StandardDeviceRequest)
  878. MOV   DPL,A
  879. CLR   A
  880. ADDC  A,#HIGH (StandardDeviceRequest)
  881. MOV   DPH,A
  882. CLR   A
  883. MOVC  A,@A+DPTR
  884. MOV   R3,A
  885. MOV   A,#01H
  886. MOVC  A,@A+DPTR
  887. MOV   R2,A
  888. MOV   A,#02H
  889. MOVC  A,@A+DPTR
  890. MOV   R1,A
  891. LCALL ?C?ICALL
  892. ; }
  893. ; SOURCE LINE # 292
  894. ?C0010:
  895. RET  
  896. ; END OF USB_Setup
  897. ; //***********************************************************************
  898. ; //*      *
  899. ; //* Routine  :                                                 *
  900. ; //* Input : None                    *
  901. ; //* Output : None                                 *
  902. ; //* Function :                                             *
  903. ; //* *
  904. ; //***********************************************************************
  905. ; //厂商请求处理
  906. ; void Vendor_Specific_Command(void)
  907. RSEG  ?PR?Vendor_Specific_Command?CHAP_9
  908. Vendor_Specific_Command:
  909. USING 0
  910. ; SOURCE LINE # 303
  911. ; {
  912. ; SOURCE LINE # 304
  913. ;  if(USB_Device_Request.bRequest == 0x0C)
  914. ; SOURCE LINE # 305
  915. MOV   R0,#LOW (USB_Device_Request+01H)
  916. MOV   A,@R0
  917. MOV   R7,A
  918. MOV   A,R7
  919. XRL   A,#0CH
  920. JZ    $ + 5H
  921. LJMP  ?C0023
  922. ;  {
  923. ; SOURCE LINE # 306
  924. ;  switch (USB_Device_Request.wIndex)
  925. ; SOURCE LINE # 307
  926. MOV   R0,#LOW (USB_Device_Request+04H)
  927. MOV   A,@R0
  928. MOV   R6,A
  929. INC   R0
  930. MOV   A,@R0
  931. MOV   R7,A
  932. MOV   A,R7
  933. MOV   B,R6
  934. LCALL ?C?ICASE
  935. DW    ?C0015
  936. DW    07104H
  937. DW    ?C0013
  938. DW    07204H
  939. DW    00H
  940. DW    ?C0016
  941. ;  {
  942. ; SOURCE LINE # 308
  943. ;  case GET_FIRMWARE_VERSION  ://获取固件版本
  944. ; SOURCE LINE # 309
  945. ?C0013:
  946. ;  if(USB_Device_Request.wLength == 1)
  947. ; SOURCE LINE # 310
  948. MOV   R0,#LOW (USB_Device_Request+06H)
  949. MOV   A,@R0
  950. MOV   R6,A
  951. INC   R0
  952. MOV   A,@R0
  953. MOV   R7,A
  954. MOV   A,R7
  955. XRL   A,#01H
  956. ORL   A,R6
  957. JNZ   ?C0015
  958. ;  {
  959. ; SOURCE LINE # 311
  960. ;  //select endpoint
  961. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  962. ; SOURCE LINE # 313
  963. MOV   DPTR,#D14_Cntrl_Reg+02CH
  964. MOV   A,#01H
  965. MOVX  @DPTR,A
  966. ;  //set the data length to 1 byte
  967. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 1;
  968. ; SOURCE LINE # 315
  969. MOV   DPTR,#D14_Cntrl_Reg+01CH
  970. MOV   A,#01H
  971. MOVX  @DPTR,A
  972. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  973. ; SOURCE LINE # 316
  974. MOV   DPTR,#D14_Cntrl_Reg+01DH
  975. CLR   A
  976. MOVX  @DPTR,A
  977. ;  //sent 0x21 as data
  978. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0x21;//版本号
  979. ; SOURCE LINE # 318
  980. MOV   DPTR,#D14_Cntrl_Reg+020H
  981. MOV   A,#021H
  982. MOVX  @DPTR,A
  983. ;  wait_ep0tx();
  984. ; SOURCE LINE # 319
  985. LCALL wait_ep0tx
  986. ;  ep0out_ack();
  987. ; SOURCE LINE # 320
  988. LCALL ep0out_ack
  989. ; // ep0in_ack();
  990. ;  break;
  991. ; SOURCE LINE # 322
  992. RET  
  993. ;  }
  994. ; SOURCE LINE # 323
  995. ;  case SETUP_DMA_REQUEST :
  996. ; SOURCE LINE # 325
  997. ?C0015:
  998. ;  //Out Token Ack detected
  999. ;  wait_ep0rx();
  1000. ; SOURCE LINE # 327
  1001. LCALL wait_ep0rx
  1002. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
  1003. ; SOURCE LINE # 328
  1004. MOV   DPTR,#D14_Cntrl_Reg+02CH
  1005. CLR   A
  1006. MOVX  @DPTR,A
  1007. ;  //
  1008. ;  FileSize.Size.Address[0] = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  1009. ; SOURCE LINE # 330
  1010. MOV   DPTR,#D14_Cntrl_Reg+020H
  1011. MOVX  A,@DPTR
  1012. MOV   R7,A
  1013. MOV   FileSize,R7
  1014. ;  FileSize.Size.Address[1] = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  1015. ; SOURCE LINE # 331
  1016. MOV   DPTR,#D14_Cntrl_Reg+020H
  1017. MOVX  A,@DPTR
  1018. MOV   R7,A
  1019. MOV   FileSize+01H,R7
  1020. ;  FileSize.Size.Address[2] = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  1021. ; SOURCE LINE # 332
  1022. MOV   DPTR,#D14_Cntrl_Reg+020H
  1023. MOVX  A,@DPTR
  1024. MOV   R7,A
  1025. MOV   FileSize+02H,R7
  1026. ;  //读取传输字节数
  1027. ;  Temp = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  1028. ; SOURCE LINE # 334
  1029. MOV   DPTR,#D14_Cntrl_Reg+020H
  1030. MOVX  A,@DPTR
  1031. MOV   R7,A
  1032. MOV   R6,#00H
  1033. MOV   Temp,R6
  1034. MOV   Temp+01H,R7
  1035. ;  bytecount = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  1036. ; SOURCE LINE # 335
  1037. MOV   DPTR,#D14_Cntrl_Reg+020H
  1038. MOVX  A,@DPTR
  1039. MOV   R7,A
  1040. CLR   A
  1041. MOV   R4,A
  1042. MOV   R5,A
  1043. MOV   R6,A
  1044. MOV   bytecount+03H,R7
  1045. MOV   bytecount+02H,R6
  1046. MOV   bytecount+01H,R5
  1047. MOV   bytecount,R4
  1048. ;  bytecount <<= 8;
  1049. ; SOURCE LINE # 336
  1050. MOV   R7,bytecount+03H
  1051. MOV   R6,bytecount+02H
  1052. MOV   R5,bytecount+01H
  1053. MOV   R4,bytecount
  1054. MOV   R0,#08H
  1055. LCALL ?C?LSHL
  1056. MOV   bytecount+03H,R7
  1057. MOV   bytecount+02H,R6
  1058. MOV   bytecount+01H,R5
  1059. MOV   bytecount,R4
  1060. ;  bytecount |= Temp;
  1061. ; SOURCE LINE # 337
  1062. MOV   R6,Temp
  1063. MOV   R7,Temp+01H
  1064. CLR   A
  1065. MOV   R4,A
  1066. MOV   R5,A
  1067. MOV   A,bytecount+03H
  1068. ORL   A,R7
  1069. MOV   bytecount+03H,A
  1070. MOV   A,bytecount+02H
  1071. ORL   A,R6
  1072. MOV   bytecount+02H,A
  1073. MOV   A,bytecount+01H
  1074. ORL   A,R5
  1075. MOV   bytecount+01H,A
  1076. MOV   A,bytecount
  1077. ORL   A,R4
  1078. MOV   bytecount,A
  1079. ;  //读取传输方式
  1080. ;  FileSize.Size.DIR = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  1081. ; SOURCE LINE # 339
  1082. MOV   DPTR,#D14_Cntrl_Reg+020H
  1083. MOVX  A,@DPTR
  1084. MOV   R7,A
  1085. MOV   FileSize+07H,R7
  1086. ;  ep0in_ack();
  1087. ; SOURCE LINE # 340
  1088. LCALL ep0in_ack
  1089. ;  Kernel_Flag.BITS.Transfer_Start = 1;//标志传输数据开始
  1090. ; SOURCE LINE # 341
  1091. MOV   R7,Kernel_Flag+03H
  1092. MOV   A,R7
  1093. ORL   A,#020H
  1094. MOV   Kernel_Flag+03H,A
  1095. ;  break;
  1096. ; SOURCE LINE # 342
  1097. RET  
  1098. ;  default :
  1099. ; SOURCE LINE # 344
  1100. ?C0016:
  1101. ;  if(USB_Device_Request.bmRequestType == 0xC0)
  1102. ; SOURCE LINE # 345
  1103. MOV   R0,#LOW (USB_Device_Request)
  1104. MOV   A,@R0
  1105. MOV   R7,A
  1106. MOV   A,R7
  1107. CJNE  A,#0C0H,?C0017
  1108. ;  {
  1109. ; SOURCE LINE # 346
  1110. ;  ep0in_ack();
  1111. ; SOURCE LINE # 347
  1112. LCALL ep0in_ack
  1113. ;  break;
  1114. ; SOURCE LINE # 348
  1115. RET  
  1116. ;  }
  1117. ; SOURCE LINE # 349
  1118. ?C0017:
  1119. ;  if(USB_Device_Request.bmRequestType == 0x40)
  1120. ; SOURCE LINE # 350
  1121. MOV   R0,#LOW (USB_Device_Request)
  1122. MOV   A,@R0
  1123. MOV   R7,A
  1124. MOV   A,R7
  1125. XRL   A,#040H
  1126. JNZ   ?C0023
  1127. ;  {
  1128. ; SOURCE LINE # 351
  1129. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
  1130. ; SOURCE LINE # 352
  1131. MOV   DPTR,#D14_Cntrl_Reg+02CH
  1132. CLR   A
  1133. MOVX  @DPTR,A
  1134. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
  1135. ; SOURCE LINE # 353
  1136. MOV   DPTR,#D14_Cntrl_Reg+028H
  1137. MOVX  A,@DPTR
  1138. MOV   R7,A
  1139. MOV   A,R7
  1140. ORL   A,#01H
  1141. MOV   R7,A
  1142. MOV   DPTR,#D14_Cntrl_Reg+028H
  1143. MOV   A,R7
  1144. MOVX  @DPTR,A
  1145. ?C0019:
  1146. ;  while(!USB_Int_Flag.BITS.EP0SETUP)
  1147. ; SOURCE LINE # 354
  1148. MOV   R7,USB_Int_Flag+01H
  1149. MOV   A,R7
  1150. JB    ACC.0,?C0020
  1151. ;  {
  1152. ; SOURCE LINE # 355
  1153. ;  //读取ISP1581中断寄存器
  1154. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  1155. ; SOURCE LINE # 357
  1156. MOV   DPTR,#D14_Cntrl_Reg+018H
  1157. MOVX  A,@DPTR
  1158. MOV   R4,A
  1159. INC   DPTR
  1160. MOVX  A,@DPTR
  1161. MOV   R5,A
  1162. INC   DPTR
  1163. MOVX  A,@DPTR
  1164. MOV   R6,A
  1165. INC   DPTR
  1166. MOVX  A,@DPTR
  1167. MOV   R7,A
  1168. MOV   A,USB_Int_Flag+03H
  1169. ORL   A,R7
  1170. MOV   USB_Int_Flag+03H,A
  1171. MOV   A,USB_Int_Flag+02H
  1172. ORL   A,R6
  1173. MOV   USB_Int_Flag+02H,A
  1174. MOV   A,USB_Int_Flag+01H
  1175. ORL   A,R5
  1176. MOV   USB_Int_Flag+01H,A
  1177. MOV   A,USB_Int_Flag
  1178. ORL   A,R4
  1179. MOV   USB_Int_Flag,A
  1180. ;  //回写ISP1581中断寄存器
  1181. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  1182. ; SOURCE LINE # 359
  1183. MOV   R7,USB_Int_Flag+03H
  1184. MOV   R6,USB_Int_Flag+02H
  1185. MOV   R5,USB_Int_Flag+01H
  1186. MOV   R4,USB_Int_Flag
  1187. MOV   DPTR,#D14_Cntrl_Reg+018H
  1188. LCALL ?C?LSTXDATA
  1189. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  1190. ; SOURCE LINE # 360
  1191. MOV   R7,USB_Int_Flag
  1192. MOV   A,R7
  1193. RRC   A
  1194. RRC   A
  1195. RRC   A
  1196. ANL   A,#01FH
  1197. MOV   R7,A
  1198. MOV   A,R7
  1199. JB    ACC.0,?C0023
  1200. MOV   R7,USB_Int_Flag
  1201. MOV   A,R7
  1202. JNB   ACC.0,?C0019
  1203. RET  
  1204. ;  return;
  1205. ;  }
  1206. ; SOURCE LINE # 362
  1207. ?C0020:
  1208. ;  USB_Int_Flag.BITS.EP0TX = 0;
  1209. ; SOURCE LINE # 363
  1210. MOV   R7,USB_Int_Flag+01H
  1211. MOV   A,R7
  1212. ANL   A,#0F7H
  1213. MOV   USB_Int_Flag+01H,A
  1214. ;  break;
  1215. ; SOURCE LINE # 364
  1216. ;  }
  1217. ; SOURCE LINE # 365
  1218. ;  }
  1219. ; SOURCE LINE # 366
  1220. ;  }
  1221. ; SOURCE LINE # 367
  1222. ; }
  1223. ; SOURCE LINE # 368
  1224. ?C0023:
  1225. RET  
  1226. ; END OF Vendor_Specific_Command
  1227. ; //***********************************************************************
  1228. ; //*      *
  1229. ; //* Routine  :                                                 *
  1230. ; //* Input : None                    *
  1231. ; //* Output : None                                 *
  1232. ; //* Function :                                             *
  1233. ; //* *
  1234. ; //***********************************************************************
  1235. ; void reserved(void)
  1236. RSEG  ?PR?reserved?CHAP_9
  1237. reserved:
  1238. ; SOURCE LINE # 379
  1239. ; {
  1240. ; SOURCE LINE # 380
  1241. ; }
  1242. ; SOURCE LINE # 381
  1243. RET  
  1244. ; END OF reserved
  1245. ; //Get_Descriptor()获取描述符
  1246. ; void get_descriptor(void)
  1247. RSEG  ?PR?get_descriptor?CHAP_9
  1248. get_descriptor:
  1249. USING 0
  1250. ; SOURCE LINE # 385
  1251. ; {
  1252. ; SOURCE LINE # 386
  1253. ;  switch(USB_Device_Request.wValue)
  1254. ; SOURCE LINE # 388
  1255. MOV   R0,#LOW (USB_Device_Request+02H)
  1256. MOV   A,@R0
  1257. MOV   R6,A
  1258. INC   R0
  1259. MOV   A,@R0
  1260. MOV   R7,A
  1261. MOV   A,R7
  1262. MOV   B,R6
  1263. LCALL ?C?ICASE
  1264. DW    ?C0026
  1265. DW    01H
  1266. DW    ?C0031
  1267. DW    02H
  1268. DW    ?C0060
  1269. DW    03H
  1270. DW    ?C0064
  1271. DW    04H
  1272. DW    ?C0065
  1273. DW    05H
  1274. DW    ?C0087
  1275. DW    06H
  1276. DW    ?C0092
  1277. DW    07H
  1278. DW    ?C0071
  1279. DW    08H
  1280. DW    00H
  1281. DW    ?C0112
  1282. ;  {
  1283. ; SOURCE LINE # 389
  1284. ;  case  1://设备描述符
  1285. ; SOURCE LINE # 390
  1286. ?C0026:
  1287. ;  //选择描述符
  1288. ;  if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
  1289. ; SOURCE LINE # 392
  1290. MOV   R7,Kernel_Flag+03H
  1291. MOV   A,R7
  1292. JNB   ACC.0,?C0027
  1293. ;  Descriptor_Ptr = &Standard_Device_Descriptor[0]; //set pointer to device descriptor
  1294. ; SOURCE LINE # 393
  1295. MOV   R6,#HIGH (Standard_Device_Descriptor)
  1296. MOV   R7,#LOW (Standard_Device_Descriptor)
  1297. MOV   Descriptor_Ptr,R6
  1298. MOV   Descriptor_Ptr+01H,R7
  1299. ?C0027:
  1300. ;  if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
  1301. ; SOURCE LINE # 394
  1302. MOV   R7,Kernel_Flag+03H
  1303. MOV   A,R7
  1304. JB    ACC.0,?C0028
  1305. ;  Descriptor_Ptr = &HS_Device_Descriptor[0]; //set pointer to device descriptor
  1306. ; SOURCE LINE # 395
  1307. MOV   R6,#HIGH (HS_Device_Descriptor)
  1308. MOV   R7,#LOW (HS_Device_Descriptor)
  1309. MOV   Descriptor_Ptr,R6
  1310. MOV   Descriptor_Ptr+01H,R7
  1311. ?C0028:
  1312. ;  count = *Descriptor_Ptr; //read in descriptor length
  1313. ; SOURCE LINE # 396
  1314. MOV   R6,Descriptor_Ptr
  1315. MOV   R7,Descriptor_Ptr+01H
  1316. MOV   DPL,R7
  1317. MOV   DPH,R6
  1318. CLR   A
  1319. MOVC  A,@A+DPTR
  1320. MOV   R7,A
  1321. MOV   R6,#00H
  1322. MOV   count,R6
  1323. MOV   count+01H,R7
  1324. ;  //选择端点号
  1325. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  1326. ; SOURCE LINE # 398
  1327. MOV   DPTR,#D14_Cntrl_Reg+02CH
  1328. MOV   A,#01H
  1329. MOVX  @DPTR,A
  1330. ;  //写下发送字节数
  1331. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 0x12;
  1332. ; SOURCE LINE # 400
  1333. MOV   DPTR,#D14_Cntrl_Reg+01CH
  1334. MOV   A,#012H
  1335. MOVX  @DPTR,A
  1336. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  1337. ; SOURCE LINE # 401
  1338. MOV   DPTR,#D14_Cntrl_Reg+01DH
  1339. CLR   A
  1340. MOVX  @DPTR,A
  1341. ?C0029:
  1342. ;  //send descriptor
  1343. ;  //发送描述符
  1344. ;  while(count != 0)
  1345. ; SOURCE LINE # 404
  1346. MOV   A,count+01H
  1347. ORL   A,count
  1348. JZ    ?C0030
  1349. ;  {
  1350. ; SOURCE LINE # 405
  1351. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  1352. ; SOURCE LINE # 406
  1353. MOV   R6,Descriptor_Ptr
  1354. MOV   R7,Descriptor_Ptr+01H
  1355. MOV   DPL,R7
  1356. MOV   DPH,R6
  1357. CLR   A
  1358. MOVC  A,@A+DPTR
  1359. MOV   R7,A
  1360. MOV   DPTR,#D14_Cntrl_Reg+020H
  1361. MOV   A,R7
  1362. MOVX  @DPTR,A
  1363. ;  count--;
  1364. ; SOURCE LINE # 407
  1365. MOV   A,count+01H
  1366. DEC   count+01H
  1367. JNZ   ?C0214
  1368. DEC   count
  1369. ?C0214:
  1370. ;  Descriptor_Ptr++;
  1371. ; SOURCE LINE # 408
  1372. INC   Descriptor_Ptr+01H
  1373. MOV   A,Descriptor_Ptr+01H
  1374. JNZ   ?C0215
  1375. INC   Descriptor_Ptr
  1376. ?C0215:
  1377. ;  }
  1378. ; SOURCE LINE # 409
  1379. SJMP  ?C0029
  1380. ?C0030:
  1381. ;  wait_ep0tx();
  1382. ; SOURCE LINE # 410
  1383. LCALL wait_ep0tx
  1384. ;  ep0out_ack();
  1385. ; SOURCE LINE # 411
  1386. LCALL ep0out_ack
  1387. ;  break;
  1388. ; SOURCE LINE # 412
  1389. RET  
  1390. ;  case  2        :  //获取配置描述符
  1391. ; SOURCE LINE # 414
  1392. ?C0031:
  1393. ;  USB_Int_Flag.BITS.EP0RX = 0;
  1394. ; SOURCE LINE # 415
  1395. MOV   R7,USB_Int_Flag+01H
  1396. MOV   A,R7
  1397. ANL   A,#0FBH
  1398. MOV   USB_Int_Flag+01H,A
  1399. ;  Temp = 64;
  1400. ; SOURCE LINE # 416
  1401. MOV   Temp,#00H
  1402. MOV   Temp+01H,#040H
  1403. ;  Descriptor_Ptr = &Standard_Config_Descriptor[0]; //set pointer to configuration descriptor
  1404. ; SOURCE LINE # 417
  1405. MOV   R6,#HIGH (Standard_Config_Descriptor)
  1406. MOV   R7,#LOW (Standard_Config_Descriptor)
  1407. MOV   Descriptor_Ptr,R6
  1408. MOV   Descriptor_Ptr+01H,R7
  1409. ;  count = *Descriptor_Ptr; //get configuration Descriptor length
  1410. ; SOURCE LINE # 418
  1411. MOV   R6,Descriptor_Ptr
  1412. MOV   R7,Descriptor_Ptr+01H
  1413. MOV   DPL,R7
  1414. MOV   DPH,R6
  1415. CLR   A
  1416. MOVC  A,@A+DPTR
  1417. MOV   R7,A
  1418. MOV   R6,#00H
  1419. MOV   count,R6
  1420. MOV   count+01H,R7
  1421. ;  //选择端点号1
  1422. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  1423. ; SOURCE LINE # 420
  1424. MOV   DPTR,#D14_Cntrl_Reg+02CH
  1425. MOV   A,#01H
  1426. MOVX  @DPTR,A
  1427. ;  //check if only configuration descriptor required
  1428. ;  //检查描述符长度,决定是只发送配置描述符还是描述符集合
  1429. ;  if(count >= USB_Device_Request.wLength) //Send only Configuration descriptor
  1430. ; SOURCE LINE # 423
  1431. MOV   R0,#LOW (USB_Device_Request+06H)
  1432. MOV   A,@R0
  1433. MOV   R6,A
  1434. INC   R0
  1435. MOV   A,@R0
  1436. MOV   R7,A
  1437. CLR   C
  1438. MOV   A,count+01H
  1439. SUBB  A,R7
  1440. MOV   A,count
  1441. SUBB  A,R6
  1442. JC    ?C0032
  1443. ;  {
  1444. ; SOURCE LINE # 424
  1445. ;  //写入发送字节数
  1446. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
  1447. ; SOURCE LINE # 426
  1448. MOV   R0,#LOW (USB_Device_Request+07H)
  1449. MOV   A,@R0
  1450. MOV   R7,A
  1451. MOV   DPTR,#D14_Cntrl_Reg+01CH
  1452. MOV   A,R7
  1453. MOVX  @DPTR,A
  1454. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
  1455. ; SOURCE LINE # 427
  1456. MOV   R0,#LOW (USB_Device_Request+06H)
  1457. MOV   A,@R0
  1458. MOV   R6,A
  1459. INC   R0
  1460. MOV   A,@R0
  1461. MOV   R7,A
  1462. MOV   A,R6
  1463. MOV   R7,A
  1464. MOV   R6,#00H
  1465. MOV   DPTR,#D14_Cntrl_Reg+01DH
  1466. MOV   A,R7
  1467. MOVX  @DPTR,A
  1468. ;  //send descriptor
  1469. ;  //发送描述符
  1470. ;  for(count = 0 ; count < USB_Device_Request.wLength ; count++)
  1471. ; SOURCE LINE # 430
  1472. MOV   count,#00H
  1473. MOV   count+01H,#00H
  1474. ?C0033:
  1475. MOV   R0,#LOW (USB_Device_Request+06H)
  1476. MOV   A,@R0
  1477. MOV   R6,A
  1478. INC   R0
  1479. MOV   A,@R0
  1480. MOV   R7,A
  1481. CLR   C
  1482. MOV   A,count+01H
  1483. SUBB  A,R7
  1484. MOV   A,count
  1485. SUBB  A,R6
  1486. JNC   ?C0034
  1487. ;  {
  1488. ; SOURCE LINE # 431
  1489. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  1490. ; SOURCE LINE # 432
  1491. MOV   R6,Descriptor_Ptr
  1492. MOV   R7,Descriptor_Ptr+01H
  1493. MOV   DPL,R7
  1494. MOV   DPH,R6
  1495. CLR   A
  1496. MOVC  A,@A+DPTR
  1497. MOV   R7,A
  1498. MOV   DPTR,#D14_Cntrl_Reg+020H
  1499. MOV   A,R7
  1500. MOVX  @DPTR,A
  1501. ;  Descriptor_Ptr++;
  1502. ; SOURCE LINE # 433
  1503. INC   Descriptor_Ptr+01H
  1504. MOV   A,Descriptor_Ptr+01H
  1505. JNZ   ?C0216
  1506. INC   Descriptor_Ptr
  1507. ?C0216:
  1508. ;  }
  1509. ; SOURCE LINE # 434
  1510. INC   count+01H
  1511. MOV   A,count+01H
  1512. JNZ   ?C0217
  1513. INC   count
  1514. ?C0217:
  1515. SJMP  ?C0033
  1516. ?C0034:
  1517. ;  wait_ep0tx();
  1518. ; SOURCE LINE # 435
  1519. LCALL wait_ep0tx
  1520. ;  ep0out_ack();
  1521. ; SOURCE LINE # 436
  1522. LCALL ep0out_ack
  1523. ;  }
  1524. ; SOURCE LINE # 437
  1525. RET  
  1526. ?C0032:
  1527. ;  else //send Configuration,Interface and Endpoint descriptor
  1528. ;  {
  1529. ; SOURCE LINE # 439
  1530. ;  //发送描述符集合(配置+接口+端点)
  1531. ;  if(USB_Device_Request.wLength >= 32)
  1532. ; SOURCE LINE # 441
  1533. MOV   R0,#LOW (USB_Device_Request+06H)
  1534. MOV   A,@R0
  1535. MOV   R6,A
  1536. INC   R0
  1537. MOV   A,@R0
  1538. MOV   R7,A
  1539. CLR   C
  1540. MOV   A,R7
  1541. SUBB  A,#020H
  1542. MOV   A,R6
  1543. SUBB  A,#00H
  1544. JNC   $ + 5H
  1545. LJMP  ?C0037
  1546. ;  {
  1547. ; SOURCE LINE # 442
  1548. ?C0038:
  1549. ;  //写入配置描述符
  1550. ;  while(count != 0)
  1551. ; SOURCE LINE # 444
  1552. MOV   A,count+01H
  1553. ORL   A,count
  1554. JZ    ?C0039
  1555. ;  {
  1556. ; SOURCE LINE # 445
  1557. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  1558. ; SOURCE LINE # 446
  1559. MOV   R6,Descriptor_Ptr
  1560. MOV   R7,Descriptor_Ptr+01H
  1561. MOV   DPL,R7
  1562. MOV   DPH,R6
  1563. CLR   A
  1564. MOVC  A,@A+DPTR
  1565. MOV   R7,A
  1566. MOV   DPTR,#D14_Cntrl_Reg+020H
  1567. MOV   A,R7
  1568. MOVX  @DPTR,A
  1569. ;  count--;
  1570. ; SOURCE LINE # 447
  1571. MOV   A,count+01H
  1572. DEC   count+01H
  1573. JNZ   ?C0218
  1574. DEC   count
  1575. ?C0218:
  1576. ;  Descriptor_Ptr++;
  1577. ; SOURCE LINE # 448
  1578. INC   Descriptor_Ptr+01H
  1579. MOV   A,Descriptor_Ptr+01H
  1580. JNZ   ?C0219
  1581. INC   Descriptor_Ptr
  1582. ?C0219:
  1583. ;  }
  1584. ; SOURCE LINE # 449
  1585. SJMP  ?C0038
  1586. ?C0039:
  1587. ;  //选择高速还是全速接口描述符
  1588. ;  if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
  1589. ; SOURCE LINE # 451
  1590. MOV   R7,Kernel_Flag+03H
  1591. MOV   A,R7
  1592. JNB   ACC.0,?C0040
  1593. ;  Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
  1594. ; SOURCE LINE # 452
  1595. MOV   R6,#HIGH (Bulk_Interface_Descriptor)
  1596. MOV   R7,#LOW (Bulk_Interface_Descriptor)
  1597. MOV   Descriptor_Ptr,R6
  1598. MOV   Descriptor_Ptr+01H,R7
  1599. ?C0040:
  1600. ;  if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
  1601. ; SOURCE LINE # 453
  1602. MOV   R7,Kernel_Flag+03H
  1603. MOV   A,R7
  1604. JB    ACC.0,?C0041
  1605. ;  Descriptor_Ptr = &HS_Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
  1606. ; SOURCE LINE # 454
  1607. MOV   R6,#HIGH (HS_Bulk_Interface_Descriptor)
  1608. MOV   R7,#LOW (HS_Bulk_Interface_Descriptor)
  1609. MOV   Descriptor_Ptr,R6
  1610. MOV   Descriptor_Ptr+01H,R7
  1611. ?C0041:
  1612. ;  count = *Descriptor_Ptr; //get the descriptor count
  1613. ; SOURCE LINE # 455
  1614. MOV   R6,Descriptor_Ptr
  1615. MOV   R7,Descriptor_Ptr+01H
  1616. MOV   DPL,R7
  1617. MOV   DPH,R6
  1618. CLR   A
  1619. MOVC  A,@A+DPTR
  1620. MOV   R7,A
  1621. MOV   R6,#00H
  1622. MOV   count,R6
  1623. MOV   count+01H,R7
  1624. ?C0042:
  1625. ;  //写入接口描述符
  1626. ;  while(count != 0)
  1627. ; SOURCE LINE # 457
  1628. MOV   A,count+01H
  1629. ORL   A,count
  1630. JZ    ?C0043
  1631. ;  {
  1632. ; SOURCE LINE # 458
  1633. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  1634. ; SOURCE LINE # 459
  1635. MOV   R6,Descriptor_Ptr
  1636. MOV   R7,Descriptor_Ptr+01H
  1637. MOV   DPL,R7
  1638. MOV   DPH,R6
  1639. CLR   A
  1640. MOVC  A,@A+DPTR
  1641. MOV   R7,A
  1642. MOV   DPTR,#D14_Cntrl_Reg+020H
  1643. MOV   A,R7
  1644. MOVX  @DPTR,A
  1645. ;  count--;
  1646. ; SOURCE LINE # 460
  1647. MOV   A,count+01H
  1648. DEC   count+01H
  1649. JNZ   ?C0220
  1650. DEC   count
  1651. ?C0220:
  1652. ;  Descriptor_Ptr++;
  1653. ; SOURCE LINE # 461
  1654. INC   Descriptor_Ptr+01H
  1655. MOV   A,Descriptor_Ptr+01H
  1656. JNZ   ?C0221
  1657. INC   Descriptor_Ptr
  1658. ?C0221:
  1659. ;  }
  1660. ; SOURCE LINE # 462
  1661. SJMP  ?C0042
  1662. ?C0043:
  1663. ;  //选择高速还是全速端点1IN描述符
  1664. ;  if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
  1665. ; SOURCE LINE # 464
  1666. MOV   R7,Kernel_Flag+03H
  1667. MOV   A,R7
  1668. JNB   ACC.0,?C0044
  1669. ;  Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
  1670. ; SOURCE LINE # 465
  1671. MOV   R6,#HIGH (Int_In_Descriptor)
  1672. MOV   R7,#LOW (Int_In_Descriptor)
  1673. MOV   Descriptor_Ptr,R6
  1674. MOV   Descriptor_Ptr+01H,R7
  1675. ?C0044:
  1676. ;  if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
  1677. ; SOURCE LINE # 466
  1678. MOV   R7,Kernel_Flag+03H
  1679. MOV   A,R7
  1680. JB    ACC.0,?C0045
  1681. ;  Descriptor_Ptr = &HS_Int_In_Descriptor[0]; //set pointer to interface descriptor
  1682. ; SOURCE LINE # 467
  1683. MOV   R6,#HIGH (HS_Int_In_Descriptor)
  1684. MOV   R7,#LOW (HS_Int_In_Descriptor)
  1685. MOV   Descriptor_Ptr,R6
  1686. MOV   Descriptor_Ptr+01H,R7
  1687. ?C0045:
  1688. ;  count = *Descriptor_Ptr; //read in descriptor length
  1689. ; SOURCE LINE # 468
  1690. MOV   R6,Descriptor_Ptr
  1691. MOV   R7,Descriptor_Ptr+01H
  1692. MOV   DPL,R7
  1693. MOV   DPH,R6
  1694. CLR   A
  1695. MOVC  A,@A+DPTR
  1696. MOV   R7,A
  1697. MOV   R6,#00H
  1698. MOV   count,R6
  1699. MOV   count+01H,R7
  1700. ?C0046:
  1701. ;  //写入端点1IN描述符
  1702. ;  while(count != 0)
  1703. ; SOURCE LINE # 470
  1704. MOV   A,count+01H
  1705. ORL   A,count
  1706. JZ    ?C0047
  1707. ;  {
  1708. ; SOURCE LINE # 471
  1709. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  1710. ; SOURCE LINE # 472
  1711. MOV   R6,Descriptor_Ptr
  1712. MOV   R7,Descriptor_Ptr+01H
  1713. MOV   DPL,R7
  1714. MOV   DPH,R6
  1715. CLR   A
  1716. MOVC  A,@A+DPTR
  1717. MOV   R7,A
  1718. MOV   DPTR,#D14_Cntrl_Reg+020H
  1719. MOV   A,R7
  1720. MOVX  @DPTR,A
  1721. ;  count--;
  1722. ; SOURCE LINE # 473
  1723. MOV   A,count+01H
  1724. DEC   count+01H
  1725. JNZ   ?C0222
  1726. DEC   count
  1727. ?C0222:
  1728. ;  Descriptor_Ptr++;
  1729. ; SOURCE LINE # 474
  1730. INC   Descriptor_Ptr+01H
  1731. MOV   A,Descriptor_Ptr+01H
  1732. JNZ   ?C0223
  1733. INC   Descriptor_Ptr
  1734. ?C0223:
  1735. ;  }
  1736. ; SOURCE LINE # 475
  1737. SJMP  ?C0046
  1738. ?C0047:
  1739. ;  //选择高速还是全速端点1OUT描述符
  1740. ;  if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
  1741. ; SOURCE LINE # 477
  1742. MOV   R7,Kernel_Flag+03H
  1743. MOV   A,R7
  1744. JNB   ACC.0,?C0048
  1745. ;  Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor
  1746. ; SOURCE LINE # 478
  1747. MOV   R6,#HIGH (Int_Out_Descriptor)
  1748. MOV   R7,#LOW (Int_Out_Descriptor)
  1749. MOV   Descriptor_Ptr,R6
  1750. MOV   Descriptor_Ptr+01H,R7
  1751. ?C0048:
  1752. ;  if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
  1753. ; SOURCE LINE # 479
  1754. MOV   R7,Kernel_Flag+03H
  1755. MOV   A,R7
  1756. JB    ACC.0,?C0049
  1757. ;  Descriptor_Ptr = &HS_Int_Out_Descriptor[0]; //set pointer to interface descriptor
  1758. ; SOURCE LINE # 480
  1759. MOV   R6,#HIGH (HS_Int_Out_Descriptor)
  1760. MOV   R7,#LOW (HS_Int_Out_Descriptor)
  1761. MOV   Descriptor_Ptr,R6
  1762. MOV   Descriptor_Ptr+01H,R7
  1763. ?C0049:
  1764. ;  count = *Descriptor_Ptr; //read in descriptor length
  1765. ; SOURCE LINE # 481
  1766. MOV   R6,Descriptor_Ptr
  1767. MOV   R7,Descriptor_Ptr+01H
  1768. MOV   DPL,R7
  1769. MOV   DPH,R6
  1770. CLR   A
  1771. MOVC  A,@A+DPTR
  1772. MOV   R7,A
  1773. MOV   R6,#00H
  1774. MOV   count,R6
  1775. MOV   count+01H,R7
  1776. ?C0050:
  1777. ;  //写入端点1OUT描述符
  1778. ;  while(count != 0)
  1779. ; SOURCE LINE # 483
  1780. MOV   A,count+01H
  1781. ORL   A,count
  1782. JZ    ?C0051
  1783. ;  {
  1784. ; SOURCE LINE # 484
  1785. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  1786. ; SOURCE LINE # 485
  1787. MOV   R6,Descriptor_Ptr
  1788. MOV   R7,Descriptor_Ptr+01H
  1789. MOV   DPL,R7
  1790. MOV   DPH,R6
  1791. CLR   A
  1792. MOVC  A,@A+DPTR
  1793. MOV   R7,A
  1794. MOV   DPTR,#D14_Cntrl_Reg+020H
  1795. MOV   A,R7
  1796. MOVX  @DPTR,A
  1797. ;  count--;
  1798. ; SOURCE LINE # 486
  1799. MOV   A,count+01H
  1800. DEC   count+01H
  1801. JNZ   ?C0224
  1802. DEC   count
  1803. ?C0224:
  1804. ;  Descriptor_Ptr++;
  1805. ; SOURCE LINE # 487
  1806. INC   Descriptor_Ptr+01H
  1807. MOV   A,Descriptor_Ptr+01H
  1808. JNZ   ?C0225
  1809. INC   Descriptor_Ptr
  1810. ?C0225:
  1811. ;  }
  1812. ; SOURCE LINE # 488
  1813. SJMP  ?C0050
  1814. ?C0051:
  1815. ;  //选择高速还是全速端点2IN描述符
  1816. ;  if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
  1817. ; SOURCE LINE # 490
  1818. MOV   R7,Kernel_Flag+03H
  1819. MOV   A,R7
  1820. JNB   ACC.0,?C0052
  1821. ;  Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
  1822. ; SOURCE LINE # 491
  1823. MOV   R6,#HIGH (Bulk_In_Descriptor)
  1824. MOV   R7,#LOW (Bulk_In_Descriptor)
  1825. MOV   Descriptor_Ptr,R6
  1826. MOV   Descriptor_Ptr+01H,R7
  1827. ?C0052:
  1828. ;  if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
  1829. ; SOURCE LINE # 492
  1830. MOV   R7,Kernel_Flag+03H
  1831. MOV   A,R7
  1832. JB    ACC.0,?C0053
  1833. ;  Descriptor_Ptr = &HS_Bulk_In_Descriptor[0]; //set pointer to interface descriptor
  1834. ; SOURCE LINE # 493
  1835. MOV   R6,#HIGH (HS_Bulk_In_Descriptor)
  1836. MOV   R7,#LOW (HS_Bulk_In_Descriptor)
  1837. MOV   Descriptor_Ptr,R6
  1838. MOV   Descriptor_Ptr+01H,R7
  1839. ?C0053:
  1840. ;  count = *Descriptor_Ptr; //read in descriptor length
  1841. ; SOURCE LINE # 494
  1842. MOV   R6,Descriptor_Ptr
  1843. MOV   R7,Descriptor_Ptr+01H
  1844. MOV   DPL,R7
  1845. MOV   DPH,R6
  1846. CLR   A
  1847. MOVC  A,@A+DPTR
  1848. MOV   R7,A
  1849. MOV   R6,#00H
  1850. MOV   count,R6
  1851. MOV   count+01H,R7
  1852. ?C0054:
  1853. ;  //写入端点2IN描述符
  1854. ;  while(count != 0)
  1855. ; SOURCE LINE # 496
  1856. MOV   A,count+01H
  1857. ORL   A,count
  1858. JZ    ?C0055
  1859. ;  {
  1860. ; SOURCE LINE # 497
  1861. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  1862. ; SOURCE LINE # 498
  1863. MOV   R6,Descriptor_Ptr
  1864. MOV   R7,Descriptor_Ptr+01H
  1865. MOV   DPL,R7
  1866. MOV   DPH,R6
  1867. CLR   A
  1868. MOVC  A,@A+DPTR
  1869. MOV   R7,A
  1870. MOV   DPTR,#D14_Cntrl_Reg+020H
  1871. MOV   A,R7
  1872. MOVX  @DPTR,A
  1873. ;  count--;
  1874. ; SOURCE LINE # 499
  1875. MOV   A,count+01H
  1876. DEC   count+01H
  1877. JNZ   ?C0226
  1878. DEC   count
  1879. ?C0226:
  1880. ;  Descriptor_Ptr++;
  1881. ; SOURCE LINE # 500
  1882. INC   Descriptor_Ptr+01H
  1883. MOV   A,Descriptor_Ptr+01H
  1884. JNZ   ?C0227
  1885. INC   Descriptor_Ptr
  1886. ?C0227:
  1887. ;  }
  1888. ; SOURCE LINE # 501
  1889. SJMP  ?C0054
  1890. ?C0055:
  1891. ;  //选择高速还是全速端点2OUT描述符
  1892. ;  if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
  1893. ; SOURCE LINE # 503
  1894. MOV   R7,Kernel_Flag+03H
  1895. MOV   A,R7
  1896. JNB   ACC.0,?C0056
  1897. ;  Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
  1898. ; SOURCE LINE # 504
  1899. MOV   R6,#HIGH (Bulk_Out_Descriptor)
  1900. MOV   R7,#LOW (Bulk_Out_Descriptor)
  1901. MOV   Descriptor_Ptr,R6
  1902. MOV   Descriptor_Ptr+01H,R7
  1903. ?C0056:
  1904. ;  if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
  1905. ; SOURCE LINE # 505
  1906. MOV   R7,Kernel_Flag+03H
  1907. MOV   A,R7
  1908. JB    ACC.0,?C0057
  1909. ;  Descriptor_Ptr = &HS_Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
  1910. ; SOURCE LINE # 506
  1911. MOV   R6,#HIGH (HS_Bulk_Out_Descriptor)
  1912. MOV   R7,#LOW (HS_Bulk_Out_Descriptor)
  1913. MOV   Descriptor_Ptr,R6
  1914. MOV   Descriptor_Ptr+01H,R7
  1915. ?C0057:
  1916. ;  count = *Descriptor_Ptr; //read in descriptor length
  1917. ; SOURCE LINE # 507
  1918. MOV   R6,Descriptor_Ptr
  1919. MOV   R7,Descriptor_Ptr+01H
  1920. MOV   DPL,R7
  1921. MOV   DPH,R6
  1922. CLR   A
  1923. MOVC  A,@A+DPTR
  1924. MOV   R7,A
  1925. MOV   R6,#00H
  1926. MOV   count,R6
  1927. MOV   count+01H,R7
  1928. ?C0058:
  1929. ;  //写入端点2OUT描述符
  1930. ;  while(count != 0)
  1931. ; SOURCE LINE # 509
  1932. MOV   A,count+01H
  1933. ORL   A,count
  1934. JZ    ?C0037
  1935. ;  {
  1936. ; SOURCE LINE # 510
  1937. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  1938. ; SOURCE LINE # 511
  1939. MOV   R6,Descriptor_Ptr
  1940. MOV   R7,Descriptor_Ptr+01H
  1941. MOV   DPL,R7
  1942. MOV   DPH,R6
  1943. CLR   A
  1944. MOVC  A,@A+DPTR
  1945. MOV   R7,A
  1946. MOV   DPTR,#D14_Cntrl_Reg+020H
  1947. MOV   A,R7
  1948. MOVX  @DPTR,A
  1949. ;  count--;
  1950. ; SOURCE LINE # 512
  1951. MOV   A,count+01H
  1952. DEC   count+01H
  1953. JNZ   ?C0228
  1954. DEC   count
  1955. ?C0228:
  1956. ;  Descriptor_Ptr++;
  1957. ; SOURCE LINE # 513
  1958. INC   Descriptor_Ptr+01H
  1959. MOV   A,Descriptor_Ptr+01H
  1960. JNZ   ?C0229
  1961. INC   Descriptor_Ptr
  1962. ?C0229:
  1963. ;  }
  1964. ; SOURCE LINE # 514
  1965. SJMP  ?C0058
  1966. ;  }
  1967. ; SOURCE LINE # 515
  1968. ?C0037:
  1969. ;  //使端点有效
  1970. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1; //validate FIFO
  1971. ; SOURCE LINE # 517
  1972. MOV   DPTR,#D14_Cntrl_Reg+028H
  1973. MOVX  A,@DPTR
  1974. MOV   R7,A
  1975. MOV   A,R7
  1976. ORL   A,#08H
  1977. MOV   R7,A
  1978. MOV   DPTR,#D14_Cntrl_Reg+028H
  1979. MOV   A,R7
  1980. MOVX  @DPTR,A
  1981. ;  wait_ep0tx();
  1982. ; SOURCE LINE # 518
  1983. LCALL wait_ep0tx
  1984. ;  ep0out_ack();
  1985. ; SOURCE LINE # 519
  1986. LCALL ep0out_ack
  1987. ;  }
  1988. ; SOURCE LINE # 520
  1989. ;  break;
  1990. ; SOURCE LINE # 521
  1991. RET  
  1992. ;  case  3:  //获取字符串描述符
  1993. ; SOURCE LINE # 523
  1994. ?C0060:
  1995. ;  Descriptor_Ptr = &Standard_String_ID[0]; //set pointer to interface descriptor
  1996. ; SOURCE LINE # 524
  1997. MOV   R6,#HIGH (Standard_String_ID)
  1998. MOV   R7,#LOW (Standard_String_ID)
  1999. MOV   Descriptor_Ptr,R6
  2000. MOV   Descriptor_Ptr+01H,R7
  2001. ;  count = *Descriptor_Ptr; //get length
  2002. ; SOURCE LINE # 525
  2003. MOV   R6,Descriptor_Ptr
  2004. MOV   R7,Descriptor_Ptr+01H
  2005. MOV   DPL,R7
  2006. MOV   DPH,R6
  2007. CLR   A
  2008. MOVC  A,@A+DPTR
  2009. MOV   R7,A
  2010. MOV   R6,#00H
  2011. MOV   count,R6
  2012. MOV   count+01H,R7
  2013. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  2014. ; SOURCE LINE # 526
  2015. MOV   DPTR,#D14_Cntrl_Reg+02CH
  2016. MOV   A,#01H
  2017. MOVX  @DPTR,A
  2018. ;  if(USB_Device_Request.wLength < count)
  2019. ; SOURCE LINE # 527
  2020. MOV   R0,#LOW (USB_Device_Request+06H)
  2021. MOV   A,@R0
  2022. MOV   R6,A
  2023. INC   R0
  2024. MOV   A,@R0
  2025. MOV   R7,A
  2026. CLR   C
  2027. MOV   A,R7
  2028. SUBB  A,count+01H
  2029. MOV   A,R6
  2030. SUBB  A,count
  2031. JNC   ?C0061
  2032. ;  count = USB_Device_Request.wLength; //get the remaining length
  2033. ; SOURCE LINE # 528
  2034. MOV   R0,#LOW (USB_Device_Request+06H)
  2035. MOV   A,@R0
  2036. MOV   count,A
  2037. INC   R0
  2038. MOV   A,@R0
  2039. MOV   count+01H,A
  2040. ?C0061:
  2041. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
  2042. ; SOURCE LINE # 529
  2043. MOV   R7,count+01H
  2044. MOV   DPTR,#D14_Cntrl_Reg+01CH
  2045. MOV   A,R7
  2046. MOVX  @DPTR,A
  2047. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  2048. ; SOURCE LINE # 530
  2049. MOV   DPTR,#D14_Cntrl_Reg+01DH
  2050. CLR   A
  2051. MOVX  @DPTR,A
  2052. ?C0062:
  2053. ;  //send string ID
  2054. ;  while(count != 0)
  2055. ; SOURCE LINE # 532
  2056. MOV   A,count+01H
  2057. ORL   A,count
  2058. JZ    ?C0063
  2059. ;  {
  2060. ; SOURCE LINE # 533
  2061. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr; //fill up FIFO
  2062. ; SOURCE LINE # 534
  2063. MOV   R6,Descriptor_Ptr
  2064. MOV   R7,Descriptor_Ptr+01H
  2065. MOV   DPL,R7
  2066. MOV   DPH,R6
  2067. CLR   A
  2068. MOVC  A,@A+DPTR
  2069. MOV   R7,A
  2070. MOV   DPTR,#D14_Cntrl_Reg+020H
  2071. MOV   A,R7
  2072. MOVX  @DPTR,A
  2073. ;  Descriptor_Ptr++;
  2074. ; SOURCE LINE # 535
  2075. INC   Descriptor_Ptr+01H
  2076. MOV   A,Descriptor_Ptr+01H
  2077. JNZ   ?C0230
  2078. INC   Descriptor_Ptr
  2079. ?C0230:
  2080. ;  count--;
  2081. ; SOURCE LINE # 536
  2082. MOV   A,count+01H
  2083. DEC   count+01H
  2084. JNZ   ?C0231
  2085. DEC   count
  2086. ?C0231:
  2087. ;  }
  2088. ; SOURCE LINE # 537
  2089. SJMP  ?C0062
  2090. ?C0063:
  2091. ;  wait_ep0tx();
  2092. ; SOURCE LINE # 538
  2093. LCALL wait_ep0tx
  2094. ;  ep0out_ack();
  2095. ; SOURCE LINE # 539
  2096. LCALL ep0out_ack
  2097. ;  break;
  2098. ; SOURCE LINE # 540
  2099. RET  
  2100. ;  case  4:  
  2101. ; SOURCE LINE # 543
  2102. ?C0064:
  2103. ;  reserved();
  2104. ; SOURCE LINE # 544
  2105. LCALL reserved
  2106. ;  break;
  2107. ; SOURCE LINE # 545
  2108. RET  
  2109. ;  case  5:  //获取端点描述符
  2110. ; SOURCE LINE # 547
  2111. ?C0065:
  2112. ;  Temp = 0;
  2113. ; SOURCE LINE # 548
  2114. MOV   Temp,#00H
  2115. MOV   Temp+01H,#00H
  2116. ;  if((USB_Device_Request.wValue & 0x00ff) > 0x0001)
  2117. ; SOURCE LINE # 549
  2118. MOV   R0,#LOW (USB_Device_Request+02H)
  2119. MOV   A,@R0
  2120. MOV   R6,A
  2121. INC   R0
  2122. MOV   A,@R0
  2123. MOV   R7,A
  2124. MOV   R6,#00H
  2125. SETB  C
  2126. MOV   A,R7
  2127. SUBB  A,#01H
  2128. MOV   A,R6
  2129. SUBB  A,#00H
  2130. JC    ?C0066
  2131. ;  {
  2132. ; SOURCE LINE # 550
  2133. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
  2134. ; SOURCE LINE # 551
  2135. MOV   DPTR,#D14_Cntrl_Reg+028H
  2136. MOVX  A,@DPTR
  2137. MOV   R7,A
  2138. MOV   A,R7
  2139. ORL   A,#01H
  2140. MOV   R7,A
  2141. MOV   DPTR,#D14_Cntrl_Reg+028H
  2142. MOV   A,R7
  2143. MOVX  @DPTR,A
  2144. ?C0067:
  2145. ;  while(!USB_Int_Flag.BITS.EP0SETUP)
  2146. ; SOURCE LINE # 552
  2147. MOV   R7,USB_Int_Flag+01H
  2148. MOV   A,R7
  2149. JB    ACC.0,?C0068
  2150. ;  {
  2151. ; SOURCE LINE # 553
  2152. ;  //读取ISP1581中断寄存器
  2153. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  2154. ; SOURCE LINE # 555
  2155. MOV   DPTR,#D14_Cntrl_Reg+018H
  2156. MOVX  A,@DPTR
  2157. MOV   R4,A
  2158. INC   DPTR
  2159. MOVX  A,@DPTR
  2160. MOV   R5,A
  2161. INC   DPTR
  2162. MOVX  A,@DPTR
  2163. MOV   R6,A
  2164. INC   DPTR
  2165. MOVX  A,@DPTR
  2166. MOV   R7,A
  2167. MOV   A,USB_Int_Flag+03H
  2168. ORL   A,R7
  2169. MOV   USB_Int_Flag+03H,A
  2170. MOV   A,USB_Int_Flag+02H
  2171. ORL   A,R6
  2172. MOV   USB_Int_Flag+02H,A
  2173. MOV   A,USB_Int_Flag+01H
  2174. ORL   A,R5
  2175. MOV   USB_Int_Flag+01H,A
  2176. MOV   A,USB_Int_Flag
  2177. ORL   A,R4
  2178. MOV   USB_Int_Flag,A
  2179. ;  //回写ISP1581中断寄存器
  2180. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  2181. ; SOURCE LINE # 557
  2182. MOV   R7,USB_Int_Flag+03H
  2183. MOV   R6,USB_Int_Flag+02H
  2184. MOV   R5,USB_Int_Flag+01H
  2185. MOV   R4,USB_Int_Flag
  2186. MOV   DPTR,#D14_Cntrl_Reg+018H
  2187. LCALL ?C?LSTXDATA
  2188. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  2189. ; SOURCE LINE # 558
  2190. MOV   R7,USB_Int_Flag
  2191. MOV   A,R7
  2192. RRC   A
  2193. RRC   A
  2194. RRC   A
  2195. ANL   A,#01FH
  2196. MOV   R7,A
  2197. MOV   A,R7
  2198. JNB   ACC.0,$ + 6H
  2199. LJMP  ?C0071
  2200. MOV   R7,USB_Int_Flag
  2201. MOV   A,R7
  2202. JNB   ACC.0,?C0067
  2203. RET  
  2204. ;  return;
  2205. ;  }
  2206. ; SOURCE LINE # 560
  2207. ?C0068:
  2208. ;  USB_Int_Flag.BITS.EP0TX = 0;
  2209. ; SOURCE LINE # 561
  2210. MOV   R7,USB_Int_Flag+01H
  2211. MOV   A,R7
  2212. ANL   A,#0F7H
  2213. MOV   USB_Int_Flag+01H,A
  2214. ;  }
  2215. ; SOURCE LINE # 562
  2216. RET  
  2217. ?C0066:
  2218. ;  else
  2219. ;  {
  2220. ; SOURCE LINE # 564
  2221. ;  Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to Bulk Out endpoint descriptor
  2222. ; SOURCE LINE # 565
  2223. MOV   R6,#HIGH (Bulk_Out_Descriptor)
  2224. MOV   R7,#LOW (Bulk_Out_Descriptor)
  2225. MOV   Descriptor_Ptr,R6
  2226. MOV   Descriptor_Ptr+01H,R7
  2227. ;  count = *Descriptor_Ptr; //read in descriptor length
  2228. ; SOURCE LINE # 566
  2229. MOV   R6,Descriptor_Ptr
  2230. MOV   R7,Descriptor_Ptr+01H
  2231. MOV   DPL,R7
  2232. MOV   DPH,R6
  2233. CLR   A
  2234. MOVC  A,@A+DPTR
  2235. MOV   R7,A
  2236. MOV   R6,#00H
  2237. MOV   count,R6
  2238. MOV   count+01H,R7
  2239. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  2240. ; SOURCE LINE # 567
  2241. MOV   DPTR,#D14_Cntrl_Reg+02CH
  2242. MOV   A,#01H
  2243. MOVX  @DPTR,A
  2244. ;  if(count >= USB_Device_Request.wLength)
  2245. ; SOURCE LINE # 568
  2246. MOV   R0,#LOW (USB_Device_Request+06H)
  2247. MOV   A,@R0
  2248. MOV   R6,A
  2249. INC   R0
  2250. MOV   A,@R0
  2251. MOV   R7,A
  2252. CLR   C
  2253. MOV   A,count+01H
  2254. SUBB  A,R7
  2255. MOV   A,count
  2256. SUBB  A,R6
  2257. JC    ?C0073
  2258. ;  {
  2259. ; SOURCE LINE # 569
  2260. ;  Temp = USB_Device_Request.wLength;
  2261. ; SOURCE LINE # 570
  2262. MOV   R0,#LOW (USB_Device_Request+06H)
  2263. MOV   A,@R0
  2264. MOV   Temp,A
  2265. INC   R0
  2266. MOV   A,@R0
  2267. MOV   Temp+01H,A
  2268. ;  //send endpoint descriptor
  2269. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
  2270. ; SOURCE LINE # 572
  2271. MOV   R7,Temp+01H
  2272. MOV   DPTR,#D14_Cntrl_Reg+01CH
  2273. MOV   A,R7
  2274. MOVX  @DPTR,A
  2275. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
  2276. ; SOURCE LINE # 573
  2277. MOV   A,Temp
  2278. MOV   R7,A
  2279. MOV   R6,#00H
  2280. MOV   DPTR,#D14_Cntrl_Reg+01DH
  2281. MOV   A,R7
  2282. MOVX  @DPTR,A
  2283. ;  for(count = 0 ; count < USB_Device_Request.wLength ; count++)
  2284. ; SOURCE LINE # 574
  2285. MOV   count,#00H
  2286. MOV   count+01H,#00H
  2287. ?C0074:
  2288. MOV   R0,#LOW (USB_Device_Request+06H)
  2289. MOV   A,@R0
  2290. MOV   R6,A
  2291. INC   R0
  2292. MOV   A,@R0
  2293. MOV   R7,A
  2294. CLR   C
  2295. MOV   A,count+01H
  2296. SUBB  A,R7
  2297. MOV   A,count
  2298. SUBB  A,R6
  2299. JNC   ?C0075
  2300. ;  {
  2301. ; SOURCE LINE # 575
  2302. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  2303. ; SOURCE LINE # 576
  2304. MOV   R6,Descriptor_Ptr
  2305. MOV   R7,Descriptor_Ptr+01H
  2306. MOV   DPL,R7
  2307. MOV   DPH,R6
  2308. CLR   A
  2309. MOVC  A,@A+DPTR
  2310. MOV   R7,A
  2311. MOV   DPTR,#D14_Cntrl_Reg+020H
  2312. MOV   A,R7
  2313. MOVX  @DPTR,A
  2314. ;  Descriptor_Ptr++;
  2315. ; SOURCE LINE # 577
  2316. INC   Descriptor_Ptr+01H
  2317. MOV   A,Descriptor_Ptr+01H
  2318. JNZ   ?C0232
  2319. INC   Descriptor_Ptr
  2320. ?C0232:
  2321. ;  }
  2322. ; SOURCE LINE # 578
  2323. INC   count+01H
  2324. MOV   A,count+01H
  2325. JNZ   ?C0233
  2326. INC   count
  2327. ?C0233:
  2328. SJMP  ?C0074
  2329. ?C0075:
  2330. ;  wait_ep0tx();
  2331. ; SOURCE LINE # 579
  2332. LCALL wait_ep0tx
  2333. ;  ep0out_ack();
  2334. ; SOURCE LINE # 580
  2335. LCALL ep0out_ack
  2336. ;  }
  2337. ; SOURCE LINE # 581
  2338. RET  
  2339. ?C0073:
  2340. ;  else
  2341. ;  {
  2342. ; SOURCE LINE # 583
  2343. ;  USB_Device_Request.wLength -= count; //send Endpoint descriptor
  2344. ; SOURCE LINE # 584
  2345. MOV   R0,#LOW (USB_Device_Request+06H)
  2346. MOV   A,@R0
  2347. MOV   R6,A
  2348. INC   R0
  2349. MOV   A,@R0
  2350. MOV   R7,A
  2351. CLR   C
  2352. MOV   A,R7
  2353. SUBB  A,count+01H
  2354. MOV   R7,A
  2355. MOV   A,R6
  2356. SUBB  A,count
  2357. MOV   R6,A
  2358. MOV   R0,#LOW (USB_Device_Request+06H)
  2359. MOV   @R0,AR6
  2360. INC   R0
  2361. MOV   @R0,AR7
  2362. ;  Temp += count;
  2363. ; SOURCE LINE # 585
  2364. MOV   A,count+01H
  2365. ADD   A,Temp+01H
  2366. MOV   Temp+01H,A
  2367. MOV   A,count
  2368. ADDC  A,Temp
  2369. MOV   Temp,A
  2370. ?C0078:
  2371. ;  while(count != 0)
  2372. ; SOURCE LINE # 586
  2373. MOV   A,count+01H
  2374. ORL   A,count
  2375. JZ    ?C0079
  2376. ;  {
  2377. ; SOURCE LINE # 587
  2378. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  2379. ; SOURCE LINE # 588
  2380. MOV   R6,Descriptor_Ptr
  2381. MOV   R7,Descriptor_Ptr+01H
  2382. MOV   DPL,R7
  2383. MOV   DPH,R6
  2384. CLR   A
  2385. MOVC  A,@A+DPTR
  2386. MOV   R7,A
  2387. MOV   DPTR,#D14_Cntrl_Reg+020H
  2388. MOV   A,R7
  2389. MOVX  @DPTR,A
  2390. ;  count--;
  2391. ; SOURCE LINE # 589
  2392. MOV   A,count+01H
  2393. DEC   count+01H
  2394. JNZ   ?C0234
  2395. DEC   count
  2396. ?C0234:
  2397. ;  Descriptor_Ptr++;
  2398. ; SOURCE LINE # 590
  2399. INC   Descriptor_Ptr+01H
  2400. MOV   A,Descriptor_Ptr+01H
  2401. JNZ   ?C0235
  2402. INC   Descriptor_Ptr
  2403. ?C0235:
  2404. ;  }
  2405. ; SOURCE LINE # 591
  2406. SJMP  ?C0078
  2407. ?C0079:
  2408. ;  Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to Bulk In endpoint descriptor
  2409. ; SOURCE LINE # 592
  2410. MOV   R6,#HIGH (Bulk_In_Descriptor)
  2411. MOV   R7,#LOW (Bulk_In_Descriptor)
  2412. MOV   Descriptor_Ptr,R6
  2413. MOV   Descriptor_Ptr+01H,R7
  2414. ;  count = *Descriptor_Ptr; //read in descriptor length
  2415. ; SOURCE LINE # 593
  2416. MOV   R6,Descriptor_Ptr
  2417. MOV   R7,Descriptor_Ptr+01H
  2418. MOV   DPL,R7
  2419. MOV   DPH,R6
  2420. CLR   A
  2421. MOVC  A,@A+DPTR
  2422. MOV   R7,A
  2423. MOV   R6,#00H
  2424. MOV   count,R6
  2425. MOV   count+01H,R7
  2426. ;  if(count >= USB_Device_Request.wLength)
  2427. ; SOURCE LINE # 594
  2428. MOV   R0,#LOW (USB_Device_Request+06H)
  2429. MOV   A,@R0
  2430. MOV   R6,A
  2431. INC   R0
  2432. MOV   A,@R0
  2433. MOV   R7,A
  2434. CLR   C
  2435. MOV   A,count+01H
  2436. SUBB  A,R7
  2437. MOV   A,count
  2438. SUBB  A,R6
  2439. JC    ?C0080
  2440. ;  {
  2441. ; SOURCE LINE # 595
  2442. ;  Temp += USB_Device_Request.wLength;
  2443. ; SOURCE LINE # 596
  2444. MOV   R0,#LOW (USB_Device_Request+06H)
  2445. MOV   A,@R0
  2446. MOV   R6,A
  2447. INC   R0
  2448. MOV   A,@R0
  2449. MOV   R7,A
  2450. MOV   A,R7
  2451. ADD   A,Temp+01H
  2452. MOV   Temp+01H,A
  2453. MOV   A,R6
  2454. ADDC  A,Temp
  2455. MOV   Temp,A
  2456. ;  //send endpoint descriptor
  2457. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
  2458. ; SOURCE LINE # 598
  2459. MOV   R7,Temp+01H
  2460. MOV   DPTR,#D14_Cntrl_Reg+01CH
  2461. MOV   A,R7
  2462. MOVX  @DPTR,A
  2463. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
  2464. ; SOURCE LINE # 599
  2465. MOV   A,Temp
  2466. MOV   R7,A
  2467. MOV   R6,#00H
  2468. MOV   DPTR,#D14_Cntrl_Reg+01DH
  2469. MOV   A,R7
  2470. MOVX  @DPTR,A
  2471. ;  for(count = 0 ; count < USB_Device_Request.wLength ; count++)
  2472. ; SOURCE LINE # 600
  2473. MOV   count,#00H
  2474. MOV   count+01H,#00H
  2475. ?C0081:
  2476. MOV   R0,#LOW (USB_Device_Request+06H)
  2477. MOV   A,@R0
  2478. MOV   R6,A
  2479. INC   R0
  2480. MOV   A,@R0
  2481. MOV   R7,A
  2482. CLR   C
  2483. MOV   A,count+01H
  2484. SUBB  A,R7
  2485. MOV   A,count
  2486. SUBB  A,R6
  2487. JNC   ?C0082
  2488. ;  {
  2489. ; SOURCE LINE # 601
  2490. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  2491. ; SOURCE LINE # 602
  2492. MOV   R6,Descriptor_Ptr
  2493. MOV   R7,Descriptor_Ptr+01H
  2494. MOV   DPL,R7
  2495. MOV   DPH,R6
  2496. CLR   A
  2497. MOVC  A,@A+DPTR
  2498. MOV   R7,A
  2499. MOV   DPTR,#D14_Cntrl_Reg+020H
  2500. MOV   A,R7
  2501. MOVX  @DPTR,A
  2502. ;  Descriptor_Ptr++;
  2503. ; SOURCE LINE # 603
  2504. INC   Descriptor_Ptr+01H
  2505. MOV   A,Descriptor_Ptr+01H
  2506. JNZ   ?C0236
  2507. INC   Descriptor_Ptr
  2508. ?C0236:
  2509. ;  }
  2510. ; SOURCE LINE # 604
  2511. INC   count+01H
  2512. MOV   A,count+01H
  2513. JNZ   ?C0237
  2514. INC   count
  2515. ?C0237:
  2516. SJMP  ?C0081
  2517. ?C0082:
  2518. ;  wait_ep0tx();
  2519. ; SOURCE LINE # 605
  2520. LCALL wait_ep0tx
  2521. ;  ep0out_ack();
  2522. ; SOURCE LINE # 606
  2523. LCALL ep0out_ack
  2524. ;  }
  2525. ; SOURCE LINE # 607
  2526. RET  
  2527. ?C0080:
  2528. ;  else
  2529. ;  {
  2530. ; SOURCE LINE # 609
  2531. ;  USB_Device_Request.wLength -= count; //send Endpoint descriptor
  2532. ; SOURCE LINE # 610
  2533. MOV   R0,#LOW (USB_Device_Request+06H)
  2534. MOV   A,@R0
  2535. MOV   R6,A
  2536. INC   R0
  2537. MOV   A,@R0
  2538. MOV   R7,A
  2539. CLR   C
  2540. MOV   A,R7
  2541. SUBB  A,count+01H
  2542. MOV   R7,A
  2543. MOV   A,R6
  2544. SUBB  A,count
  2545. MOV   R6,A
  2546. MOV   R0,#LOW (USB_Device_Request+06H)
  2547. MOV   @R0,AR6
  2548. INC   R0
  2549. MOV   @R0,AR7
  2550. ;  Temp += count;
  2551. ; SOURCE LINE # 611
  2552. MOV   A,count+01H
  2553. ADD   A,Temp+01H
  2554. MOV   Temp+01H,A
  2555. MOV   A,count
  2556. ADDC  A,Temp
  2557. MOV   Temp,A
  2558. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) Temp;
  2559. ; SOURCE LINE # 612
  2560. MOV   R7,Temp+01H
  2561. MOV   DPTR,#D14_Cntrl_Reg+01CH
  2562. MOV   A,R7
  2563. MOVX  @DPTR,A
  2564. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (Temp >> 8);
  2565. ; SOURCE LINE # 613
  2566. MOV   A,Temp
  2567. MOV   R7,A
  2568. MOV   R6,#00H
  2569. MOV   DPTR,#D14_Cntrl_Reg+01DH
  2570. MOV   A,R7
  2571. MOVX  @DPTR,A
  2572. ?C0085:
  2573. ;  while(count != 0)
  2574. ; SOURCE LINE # 614
  2575. MOV   A,count+01H
  2576. ORL   A,count
  2577. JZ    ?C0086
  2578. ;  {
  2579. ; SOURCE LINE # 615
  2580. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  2581. ; SOURCE LINE # 616
  2582. MOV   R6,Descriptor_Ptr
  2583. MOV   R7,Descriptor_Ptr+01H
  2584. MOV   DPL,R7
  2585. MOV   DPH,R6
  2586. CLR   A
  2587. MOVC  A,@A+DPTR
  2588. MOV   R7,A
  2589. MOV   DPTR,#D14_Cntrl_Reg+020H
  2590. MOV   A,R7
  2591. MOVX  @DPTR,A
  2592. ;  count--;
  2593. ; SOURCE LINE # 617
  2594. MOV   A,count+01H
  2595. DEC   count+01H
  2596. JNZ   ?C0238
  2597. DEC   count
  2598. ?C0238:
  2599. ;  Descriptor_Ptr++;
  2600. ; SOURCE LINE # 618
  2601. INC   Descriptor_Ptr+01H
  2602. MOV   A,Descriptor_Ptr+01H
  2603. JNZ   ?C0239
  2604. INC   Descriptor_Ptr
  2605. ?C0239:
  2606. ;  }
  2607. ; SOURCE LINE # 619
  2608. SJMP  ?C0085
  2609. ?C0086:
  2610. ;  wait_ep0tx();
  2611. ; SOURCE LINE # 620
  2612. LCALL wait_ep0tx
  2613. ;  ep0out_ack();
  2614. ; SOURCE LINE # 621
  2615. LCALL ep0out_ack
  2616. ;  }
  2617. ; SOURCE LINE # 622
  2618. ;  }
  2619. ; SOURCE LINE # 623
  2620. ;  }
  2621. ; SOURCE LINE # 624
  2622. ;  break;
  2623. ; SOURCE LINE # 625
  2624. RET  
  2625. ;  case  6:  //获取设备限制描述符
  2626. ; SOURCE LINE # 627
  2627. ?C0087:
  2628. ;  Descriptor_Ptr = &HS_Device_Qualifier[0]; //set pointer to High Speed device descriptor
  2629. ; SOURCE LINE # 628
  2630. MOV   R6,#HIGH (HS_Device_Qualifier)
  2631. MOV   R7,#LOW (HS_Device_Qualifier)
  2632. MOV   Descriptor_Ptr,R6
  2633. MOV   Descriptor_Ptr+01H,R7
  2634. ;  count = *Descriptor_Ptr; //read in descriptor length
  2635. ; SOURCE LINE # 629
  2636. MOV   R6,Descriptor_Ptr
  2637. MOV   R7,Descriptor_Ptr+01H
  2638. MOV   DPL,R7
  2639. MOV   DPH,R6
  2640. CLR   A
  2641. MOVC  A,@A+DPTR
  2642. MOV   R7,A
  2643. MOV   R6,#00H
  2644. MOV   count,R6
  2645. MOV   count+01H,R7
  2646. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  2647. ; SOURCE LINE # 630
  2648. MOV   DPTR,#D14_Cntrl_Reg+02CH
  2649. MOV   A,#01H
  2650. MOVX  @DPTR,A
  2651. ;  if(USB_Device_Request.wLength < count)
  2652. ; SOURCE LINE # 631
  2653. MOV   R0,#LOW (USB_Device_Request+06H)
  2654. MOV   A,@R0
  2655. MOV   R6,A
  2656. INC   R0
  2657. MOV   A,@R0
  2658. MOV   R7,A
  2659. CLR   C
  2660. MOV   A,R7
  2661. SUBB  A,count+01H
  2662. MOV   A,R6
  2663. SUBB  A,count
  2664. JNC   ?C0088
  2665. ;  {
  2666. ; SOURCE LINE # 632
  2667. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
  2668. ; SOURCE LINE # 633
  2669. MOV   R0,#LOW (USB_Device_Request+07H)
  2670. MOV   A,@R0
  2671. MOV   R7,A
  2672. MOV   DPTR,#D14_Cntrl_Reg+01CH
  2673. MOV   A,R7
  2674. MOVX  @DPTR,A
  2675. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  2676. ; SOURCE LINE # 634
  2677. MOV   DPTR,#D14_Cntrl_Reg+01DH
  2678. CLR   A
  2679. MOVX  @DPTR,A
  2680. ;  count = USB_Device_Request.wLength;
  2681. ; SOURCE LINE # 635
  2682. MOV   R0,#LOW (USB_Device_Request+06H)
  2683. MOV   A,@R0
  2684. MOV   count,A
  2685. INC   R0
  2686. MOV   A,@R0
  2687. MOV   count+01H,A
  2688. ;  }
  2689. ; SOURCE LINE # 636
  2690. SJMP  ?C0090
  2691. ?C0088:
  2692. ;  else
  2693. ;  {
  2694. ; SOURCE LINE # 638
  2695. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = count;
  2696. ; SOURCE LINE # 639
  2697. MOV   R7,count+01H
  2698. MOV   DPTR,#D14_Cntrl_Reg+01CH
  2699. MOV   A,R7
  2700. MOVX  @DPTR,A
  2701. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  2702. ; SOURCE LINE # 640
  2703. MOV   DPTR,#D14_Cntrl_Reg+01DH
  2704. CLR   A
  2705. MOVX  @DPTR,A
  2706. ;  }
  2707. ; SOURCE LINE # 641
  2708. ?C0090:
  2709. ;  while(count != 0)
  2710. ; SOURCE LINE # 642
  2711. MOV   A,count+01H
  2712. ORL   A,count
  2713. JZ    ?C0091
  2714. ;  {
  2715. ; SOURCE LINE # 643
  2716. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr; //fill up FIFO
  2717. ; SOURCE LINE # 644
  2718. MOV   R6,Descriptor_Ptr
  2719. MOV   R7,Descriptor_Ptr+01H
  2720. MOV   DPL,R7
  2721. MOV   DPH,R6
  2722. CLR   A
  2723. MOVC  A,@A+DPTR
  2724. MOV   R7,A
  2725. MOV   DPTR,#D14_Cntrl_Reg+020H
  2726. MOV   A,R7
  2727. MOVX  @DPTR,A
  2728. ;  Descriptor_Ptr++;
  2729. ; SOURCE LINE # 645
  2730. INC   Descriptor_Ptr+01H
  2731. MOV   A,Descriptor_Ptr+01H
  2732. JNZ   ?C0240
  2733. INC   Descriptor_Ptr
  2734. ?C0240:
  2735. ;  count--;
  2736. ; SOURCE LINE # 646
  2737. MOV   A,count+01H
  2738. DEC   count+01H
  2739. JNZ   ?C0241
  2740. DEC   count
  2741. ?C0241:
  2742. ;  };
  2743. ; SOURCE LINE # 647
  2744. SJMP  ?C0090
  2745. ?C0091:
  2746. ;  wait_ep0tx();
  2747. ; SOURCE LINE # 648
  2748. LCALL wait_ep0tx
  2749. ;  ep0out_ack();
  2750. ; SOURCE LINE # 649
  2751. LCALL ep0out_ack
  2752. ;  break;
  2753. ; SOURCE LINE # 650
  2754. RET  
  2755. ;  case  7  ://获取速度配置描述符
  2756. ; SOURCE LINE # 652
  2757. ?C0092:
  2758. ;  Temp = 64;
  2759. ; SOURCE LINE # 653
  2760. MOV   Temp,#00H
  2761. MOV   Temp+01H,#040H
  2762. ;  Descriptor_Ptr = &Other_Speed_Config_Descriptor[0]; //set pointer to configuration descriptor
  2763. ; SOURCE LINE # 654
  2764. MOV   R6,#HIGH (Other_Speed_Config_Descriptor)
  2765. MOV   R7,#LOW (Other_Speed_Config_Descriptor)
  2766. MOV   Descriptor_Ptr,R6
  2767. MOV   Descriptor_Ptr+01H,R7
  2768. ;  count = *Descriptor_Ptr; //get configuration Descriptor length
  2769. ; SOURCE LINE # 655
  2770. MOV   R6,Descriptor_Ptr
  2771. MOV   R7,Descriptor_Ptr+01H
  2772. MOV   DPL,R7
  2773. MOV   DPH,R6
  2774. CLR   A
  2775. MOVC  A,@A+DPTR
  2776. MOV   R7,A
  2777. MOV   R6,#00H
  2778. MOV   count,R6
  2779. MOV   count+01H,R7
  2780. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  2781. ; SOURCE LINE # 656
  2782. MOV   DPTR,#D14_Cntrl_Reg+02CH
  2783. MOV   A,#01H
  2784. MOVX  @DPTR,A
  2785. ;  if(count >= USB_Device_Request.wLength) //Send only Configuration descriptor
  2786. ; SOURCE LINE # 657
  2787. MOV   R0,#LOW (USB_Device_Request+06H)
  2788. MOV   A,@R0
  2789. MOV   R6,A
  2790. INC   R0
  2791. MOV   A,@R0
  2792. MOV   R7,A
  2793. CLR   C
  2794. MOV   A,count+01H
  2795. SUBB  A,R7
  2796. MOV   A,count
  2797. SUBB  A,R6
  2798. JC    ?C0093
  2799. ;  {
  2800. ; SOURCE LINE # 658
  2801. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
  2802. ; SOURCE LINE # 659
  2803. MOV   R0,#LOW (USB_Device_Request+07H)
  2804. MOV   A,@R0
  2805. MOV   R7,A
  2806. MOV   DPTR,#D14_Cntrl_Reg+01CH
  2807. MOV   A,R7
  2808. MOVX  @DPTR,A
  2809. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
  2810. ; SOURCE LINE # 660
  2811. MOV   R0,#LOW (USB_Device_Request+06H)
  2812. MOV   A,@R0
  2813. MOV   R6,A
  2814. INC   R0
  2815. MOV   A,@R0
  2816. MOV   R7,A
  2817. MOV   A,R6
  2818. MOV   R7,A
  2819. MOV   R6,#00H
  2820. MOV   DPTR,#D14_Cntrl_Reg+01DH
  2821. MOV   A,R7
  2822. MOVX  @DPTR,A
  2823. ;  for(count = 0 ; count < USB_Device_Request.wLength ; count++)
  2824. ; SOURCE LINE # 661
  2825. MOV   count,#00H
  2826. MOV   count+01H,#00H
  2827. ?C0094:
  2828. MOV   R0,#LOW (USB_Device_Request+06H)
  2829. MOV   A,@R0
  2830. MOV   R6,A
  2831. INC   R0
  2832. MOV   A,@R0
  2833. MOV   R7,A
  2834. CLR   C
  2835. MOV   A,count+01H
  2836. SUBB  A,R7
  2837. MOV   A,count
  2838. SUBB  A,R6
  2839. JNC   ?C0095
  2840. ;  {
  2841. ; SOURCE LINE # 662
  2842. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  2843. ; SOURCE LINE # 663
  2844. MOV   R6,Descriptor_Ptr
  2845. MOV   R7,Descriptor_Ptr+01H
  2846. MOV   DPL,R7
  2847. MOV   DPH,R6
  2848. CLR   A
  2849. MOVC  A,@A+DPTR
  2850. MOV   R7,A
  2851. MOV   DPTR,#D14_Cntrl_Reg+020H
  2852. MOV   A,R7
  2853. MOVX  @DPTR,A
  2854. ;  Descriptor_Ptr++;
  2855. ; SOURCE LINE # 664
  2856. INC   Descriptor_Ptr+01H
  2857. MOV   A,Descriptor_Ptr+01H
  2858. JNZ   ?C0242
  2859. INC   Descriptor_Ptr
  2860. ?C0242:
  2861. ;  }
  2862. ; SOURCE LINE # 665
  2863. INC   count+01H
  2864. MOV   A,count+01H
  2865. JNZ   ?C0243
  2866. INC   count
  2867. ?C0243:
  2868. SJMP  ?C0094
  2869. ?C0095:
  2870. ;  wait_ep0tx();
  2871. ; SOURCE LINE # 666
  2872. LCALL wait_ep0tx
  2873. ;  ep0out_ack();
  2874. ; SOURCE LINE # 667
  2875. LCALL ep0out_ack
  2876. ;  }
  2877. ; SOURCE LINE # 668
  2878. RET  
  2879. ?C0093:
  2880. ;  else //send Configuration,Interface and Endpoint descriptor
  2881. ;  {
  2882. ; SOURCE LINE # 670
  2883. ;  if(USB_Device_Request.wLength >= 32)
  2884. ; SOURCE LINE # 671
  2885. MOV   R0,#LOW (USB_Device_Request+06H)
  2886. MOV   A,@R0
  2887. MOV   R6,A
  2888. INC   R0
  2889. MOV   A,@R0
  2890. MOV   R7,A
  2891. CLR   C
  2892. MOV   A,R7
  2893. SUBB  A,#020H
  2894. MOV   A,R6
  2895. SUBB  A,#00H
  2896. JNC   $ + 5H
  2897. LJMP  ?C0098
  2898. ;  {
  2899. ; SOURCE LINE # 672
  2900. ?C0099:
  2901. ;  while(count != 0)
  2902. ; SOURCE LINE # 673
  2903. MOV   A,count+01H
  2904. ORL   A,count
  2905. JZ    ?C0100
  2906. ;  {
  2907. ; SOURCE LINE # 674
  2908. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  2909. ; SOURCE LINE # 675
  2910. MOV   R6,Descriptor_Ptr
  2911. MOV   R7,Descriptor_Ptr+01H
  2912. MOV   DPL,R7
  2913. MOV   DPH,R6
  2914. CLR   A
  2915. MOVC  A,@A+DPTR
  2916. MOV   R7,A
  2917. MOV   DPTR,#D14_Cntrl_Reg+020H
  2918. MOV   A,R7
  2919. MOVX  @DPTR,A
  2920. ;  count--;
  2921. ; SOURCE LINE # 676
  2922. MOV   A,count+01H
  2923. DEC   count+01H
  2924. JNZ   ?C0244
  2925. DEC   count
  2926. ?C0244:
  2927. ;  Descriptor_Ptr++;
  2928. ; SOURCE LINE # 677
  2929. INC   Descriptor_Ptr+01H
  2930. MOV   A,Descriptor_Ptr+01H
  2931. JNZ   ?C0245
  2932. INC   Descriptor_Ptr
  2933. ?C0245:
  2934. ;  }
  2935. ; SOURCE LINE # 678
  2936. SJMP  ?C0099
  2937. ?C0100:
  2938. ;  Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
  2939. ; SOURCE LINE # 679
  2940. MOV   R6,#HIGH (Bulk_Interface_Descriptor)
  2941. MOV   R7,#LOW (Bulk_Interface_Descriptor)
  2942. MOV   Descriptor_Ptr,R6
  2943. MOV   Descriptor_Ptr+01H,R7
  2944. ;  count = *Descriptor_Ptr; //get the descriptor count
  2945. ; SOURCE LINE # 680
  2946. MOV   R6,Descriptor_Ptr
  2947. MOV   R7,Descriptor_Ptr+01H
  2948. MOV   DPL,R7
  2949. MOV   DPH,R6
  2950. CLR   A
  2951. MOVC  A,@A+DPTR
  2952. MOV   R7,A
  2953. MOV   R6,#00H
  2954. MOV   count,R6
  2955. MOV   count+01H,R7
  2956. ?C0101:
  2957. ;  while(count != 0)
  2958. ; SOURCE LINE # 681
  2959. MOV   A,count+01H
  2960. ORL   A,count
  2961. JZ    ?C0102
  2962. ;  {
  2963. ; SOURCE LINE # 682
  2964. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  2965. ; SOURCE LINE # 683
  2966. MOV   R6,Descriptor_Ptr
  2967. MOV   R7,Descriptor_Ptr+01H
  2968. MOV   DPL,R7
  2969. MOV   DPH,R6
  2970. CLR   A
  2971. MOVC  A,@A+DPTR
  2972. MOV   R7,A
  2973. MOV   DPTR,#D14_Cntrl_Reg+020H
  2974. MOV   A,R7
  2975. MOVX  @DPTR,A
  2976. ;  count--;
  2977. ; SOURCE LINE # 684
  2978. MOV   A,count+01H
  2979. DEC   count+01H
  2980. JNZ   ?C0246
  2981. DEC   count
  2982. ?C0246:
  2983. ;  Descriptor_Ptr++;
  2984. ; SOURCE LINE # 685
  2985. INC   Descriptor_Ptr+01H
  2986. MOV   A,Descriptor_Ptr+01H
  2987. JNZ   ?C0247
  2988. INC   Descriptor_Ptr
  2989. ?C0247:
  2990. ;  }
  2991. ; SOURCE LINE # 686
  2992. SJMP  ?C0101
  2993. ?C0102:
  2994. ;  Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
  2995. ; SOURCE LINE # 687
  2996. MOV   R6,#HIGH (Int_In_Descriptor)
  2997. MOV   R7,#LOW (Int_In_Descriptor)
  2998. MOV   Descriptor_Ptr,R6
  2999. MOV   Descriptor_Ptr+01H,R7
  3000. ;  count = *Descriptor_Ptr; //read in descriptor length
  3001. ; SOURCE LINE # 688
  3002. MOV   R6,Descriptor_Ptr
  3003. MOV   R7,Descriptor_Ptr+01H
  3004. MOV   DPL,R7
  3005. MOV   DPH,R6
  3006. CLR   A
  3007. MOVC  A,@A+DPTR
  3008. MOV   R7,A
  3009. MOV   R6,#00H
  3010. MOV   count,R6
  3011. MOV   count+01H,R7
  3012. ?C0103:
  3013. ;  while(count != 0)
  3014. ; SOURCE LINE # 689
  3015. MOV   A,count+01H
  3016. ORL   A,count
  3017. JZ    ?C0104
  3018. ;  {
  3019. ; SOURCE LINE # 690
  3020. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  3021. ; SOURCE LINE # 691
  3022. MOV   R6,Descriptor_Ptr
  3023. MOV   R7,Descriptor_Ptr+01H
  3024. MOV   DPL,R7
  3025. MOV   DPH,R6
  3026. CLR   A
  3027. MOVC  A,@A+DPTR
  3028. MOV   R7,A
  3029. MOV   DPTR,#D14_Cntrl_Reg+020H
  3030. MOV   A,R7
  3031. MOVX  @DPTR,A
  3032. ;  count--;
  3033. ; SOURCE LINE # 692
  3034. MOV   A,count+01H
  3035. DEC   count+01H
  3036. JNZ   ?C0248
  3037. DEC   count
  3038. ?C0248:
  3039. ;  Descriptor_Ptr++;
  3040. ; SOURCE LINE # 693
  3041. INC   Descriptor_Ptr+01H
  3042. MOV   A,Descriptor_Ptr+01H
  3043. JNZ   ?C0249
  3044. INC   Descriptor_Ptr
  3045. ?C0249:
  3046. ;  }
  3047. ; SOURCE LINE # 694
  3048. SJMP  ?C0103
  3049. ?C0104:
  3050. ;  Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor
  3051. ; SOURCE LINE # 695
  3052. MOV   R6,#HIGH (Int_Out_Descriptor)
  3053. MOV   R7,#LOW (Int_Out_Descriptor)
  3054. MOV   Descriptor_Ptr,R6
  3055. MOV   Descriptor_Ptr+01H,R7
  3056. ;  count = *Descriptor_Ptr; //read in descriptor length
  3057. ; SOURCE LINE # 696
  3058. MOV   R6,Descriptor_Ptr
  3059. MOV   R7,Descriptor_Ptr+01H
  3060. MOV   DPL,R7
  3061. MOV   DPH,R6
  3062. CLR   A
  3063. MOVC  A,@A+DPTR
  3064. MOV   R7,A
  3065. MOV   R6,#00H
  3066. MOV   count,R6
  3067. MOV   count+01H,R7
  3068. ?C0105:
  3069. ;  while(count != 0)
  3070. ; SOURCE LINE # 697
  3071. MOV   A,count+01H
  3072. ORL   A,count
  3073. JZ    ?C0106
  3074. ;  {
  3075. ; SOURCE LINE # 698
  3076. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  3077. ; SOURCE LINE # 699
  3078. MOV   R6,Descriptor_Ptr
  3079. MOV   R7,Descriptor_Ptr+01H
  3080. MOV   DPL,R7
  3081. MOV   DPH,R6
  3082. CLR   A
  3083. MOVC  A,@A+DPTR
  3084. MOV   R7,A
  3085. MOV   DPTR,#D14_Cntrl_Reg+020H
  3086. MOV   A,R7
  3087. MOVX  @DPTR,A
  3088. ;  count--;
  3089. ; SOURCE LINE # 700
  3090. MOV   A,count+01H
  3091. DEC   count+01H
  3092. JNZ   ?C0250
  3093. DEC   count
  3094. ?C0250:
  3095. ;  Descriptor_Ptr++;
  3096. ; SOURCE LINE # 701
  3097. INC   Descriptor_Ptr+01H
  3098. MOV   A,Descriptor_Ptr+01H
  3099. JNZ   ?C0251
  3100. INC   Descriptor_Ptr
  3101. ?C0251:
  3102. ;  }
  3103. ; SOURCE LINE # 702
  3104. SJMP  ?C0105
  3105. ?C0106:
  3106. ;  Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor
  3107. ; SOURCE LINE # 703
  3108. MOV   R6,#HIGH (Bulk_In_Descriptor)
  3109. MOV   R7,#LOW (Bulk_In_Descriptor)
  3110. MOV   Descriptor_Ptr,R6
  3111. MOV   Descriptor_Ptr+01H,R7
  3112. ;  count = *Descriptor_Ptr; //read in descriptor length
  3113. ; SOURCE LINE # 704
  3114. MOV   R6,Descriptor_Ptr
  3115. MOV   R7,Descriptor_Ptr+01H
  3116. MOV   DPL,R7
  3117. MOV   DPH,R6
  3118. CLR   A
  3119. MOVC  A,@A+DPTR
  3120. MOV   R7,A
  3121. MOV   R6,#00H
  3122. MOV   count,R6
  3123. MOV   count+01H,R7
  3124. ?C0107:
  3125. ;  while(count != 0)
  3126. ; SOURCE LINE # 705
  3127. MOV   A,count+01H
  3128. ORL   A,count
  3129. JZ    ?C0108
  3130. ;  {
  3131. ; SOURCE LINE # 706
  3132. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  3133. ; SOURCE LINE # 707
  3134. MOV   R6,Descriptor_Ptr
  3135. MOV   R7,Descriptor_Ptr+01H
  3136. MOV   DPL,R7
  3137. MOV   DPH,R6
  3138. CLR   A
  3139. MOVC  A,@A+DPTR
  3140. MOV   R7,A
  3141. MOV   DPTR,#D14_Cntrl_Reg+020H
  3142. MOV   A,R7
  3143. MOVX  @DPTR,A
  3144. ;  count--;
  3145. ; SOURCE LINE # 708
  3146. MOV   A,count+01H
  3147. DEC   count+01H
  3148. JNZ   ?C0252
  3149. DEC   count
  3150. ?C0252:
  3151. ;  Descriptor_Ptr++;
  3152. ; SOURCE LINE # 709
  3153. INC   Descriptor_Ptr+01H
  3154. MOV   A,Descriptor_Ptr+01H
  3155. JNZ   ?C0253
  3156. INC   Descriptor_Ptr
  3157. ?C0253:
  3158. ;  }
  3159. ; SOURCE LINE # 710
  3160. SJMP  ?C0107
  3161. ?C0108:
  3162. ;  Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to interface descriptor
  3163. ; SOURCE LINE # 711
  3164. MOV   R6,#HIGH (Bulk_Out_Descriptor)
  3165. MOV   R7,#LOW (Bulk_Out_Descriptor)
  3166. MOV   Descriptor_Ptr,R6
  3167. MOV   Descriptor_Ptr+01H,R7
  3168. ;  count = *Descriptor_Ptr; //read in descriptor length
  3169. ; SOURCE LINE # 712
  3170. MOV   R6,Descriptor_Ptr
  3171. MOV   R7,Descriptor_Ptr+01H
  3172. MOV   DPL,R7
  3173. MOV   DPH,R6
  3174. CLR   A
  3175. MOVC  A,@A+DPTR
  3176. MOV   R7,A
  3177. MOV   R6,#00H
  3178. MOV   count,R6
  3179. MOV   count+01H,R7
  3180. ?C0109:
  3181. ;  while(count != 0)
  3182. ; SOURCE LINE # 713
  3183. MOV   A,count+01H
  3184. ORL   A,count
  3185. JZ    ?C0098
  3186. ;  {
  3187. ; SOURCE LINE # 714
  3188. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
  3189. ; SOURCE LINE # 715
  3190. MOV   R6,Descriptor_Ptr
  3191. MOV   R7,Descriptor_Ptr+01H
  3192. MOV   DPL,R7
  3193. MOV   DPH,R6
  3194. CLR   A
  3195. MOVC  A,@A+DPTR
  3196. MOV   R7,A
  3197. MOV   DPTR,#D14_Cntrl_Reg+020H
  3198. MOV   A,R7
  3199. MOVX  @DPTR,A
  3200. ;  count--;
  3201. ; SOURCE LINE # 716
  3202. MOV   A,count+01H
  3203. DEC   count+01H
  3204. JNZ   ?C0254
  3205. DEC   count
  3206. ?C0254:
  3207. ;  Descriptor_Ptr++;
  3208. ; SOURCE LINE # 717
  3209. INC   Descriptor_Ptr+01H
  3210. MOV   A,Descriptor_Ptr+01H
  3211. JNZ   ?C0255
  3212. INC   Descriptor_Ptr
  3213. ?C0255:
  3214. ;  }
  3215. ; SOURCE LINE # 718
  3216. SJMP  ?C0109
  3217. ;  }
  3218. ; SOURCE LINE # 719
  3219. ?C0098:
  3220. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1; //validate FIFO
  3221. ; SOURCE LINE # 720
  3222. MOV   DPTR,#D14_Cntrl_Reg+028H
  3223. MOVX  A,@DPTR
  3224. MOV   R7,A
  3225. MOV   A,R7
  3226. ORL   A,#08H
  3227. MOV   R7,A
  3228. MOV   DPTR,#D14_Cntrl_Reg+028H
  3229. MOV   A,R7
  3230. MOVX  @DPTR,A
  3231. ;  wait_ep0tx();
  3232. ; SOURCE LINE # 721
  3233. LCALL wait_ep0tx
  3234. ;  ep0out_ack();
  3235. ; SOURCE LINE # 722
  3236. LCALL ep0out_ack
  3237. ;  }
  3238. ; SOURCE LINE # 723
  3239. ;  break;
  3240. ; SOURCE LINE # 724
  3241. RET  
  3242. ;  case  8:  
  3243. ; SOURCE LINE # 726
  3244. ;  break;
  3245. ; SOURCE LINE # 727
  3246. ;  default  :
  3247. ; SOURCE LINE # 729
  3248. ?C0112:
  3249. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  3250. ; SOURCE LINE # 730
  3251. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3252. MOV   A,#01H
  3253. MOVX  @DPTR,A
  3254. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
  3255. ; SOURCE LINE # 731
  3256. MOV   DPTR,#D14_Cntrl_Reg+028H
  3257. MOVX  A,@DPTR
  3258. MOV   R7,A
  3259. MOV   A,R7
  3260. ORL   A,#01H
  3261. MOV   R7,A
  3262. MOV   DPTR,#D14_Cntrl_Reg+028H
  3263. MOV   A,R7
  3264. MOVX  @DPTR,A
  3265. ?C0113:
  3266. ;  while(!USB_Int_Flag.BITS.EP0SETUP)
  3267. ; SOURCE LINE # 732
  3268. MOV   R7,USB_Int_Flag+01H
  3269. MOV   A,R7
  3270. JB    ACC.0,?C0114
  3271. ;  {
  3272. ; SOURCE LINE # 733
  3273. ;  //读取ISP1581中断寄存器
  3274. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  3275. ; SOURCE LINE # 735
  3276. MOV   DPTR,#D14_Cntrl_Reg+018H
  3277. MOVX  A,@DPTR
  3278. MOV   R4,A
  3279. INC   DPTR
  3280. MOVX  A,@DPTR
  3281. MOV   R5,A
  3282. INC   DPTR
  3283. MOVX  A,@DPTR
  3284. MOV   R6,A
  3285. INC   DPTR
  3286. MOVX  A,@DPTR
  3287. MOV   R7,A
  3288. MOV   A,USB_Int_Flag+03H
  3289. ORL   A,R7
  3290. MOV   USB_Int_Flag+03H,A
  3291. MOV   A,USB_Int_Flag+02H
  3292. ORL   A,R6
  3293. MOV   USB_Int_Flag+02H,A
  3294. MOV   A,USB_Int_Flag+01H
  3295. ORL   A,R5
  3296. MOV   USB_Int_Flag+01H,A
  3297. MOV   A,USB_Int_Flag
  3298. ORL   A,R4
  3299. MOV   USB_Int_Flag,A
  3300. ;  //回写ISP1581中断寄存器
  3301. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  3302. ; SOURCE LINE # 737
  3303. MOV   R7,USB_Int_Flag+03H
  3304. MOV   R6,USB_Int_Flag+02H
  3305. MOV   R5,USB_Int_Flag+01H
  3306. MOV   R4,USB_Int_Flag
  3307. MOV   DPTR,#D14_Cntrl_Reg+018H
  3308. LCALL ?C?LSTXDATA
  3309. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  3310. ; SOURCE LINE # 738
  3311. MOV   R7,USB_Int_Flag
  3312. MOV   A,R7
  3313. RRC   A
  3314. RRC   A
  3315. RRC   A
  3316. ANL   A,#01FH
  3317. MOV   R7,A
  3318. MOV   A,R7
  3319. JB    ACC.0,?C0071
  3320. MOV   R7,USB_Int_Flag
  3321. MOV   A,R7
  3322. JNB   ACC.0,?C0113
  3323. RET  
  3324. ;  return;
  3325. ;  }
  3326. ; SOURCE LINE # 740
  3327. ?C0114:
  3328. ;  USB_Int_Flag.BITS.EP0TX = 0;
  3329. ; SOURCE LINE # 741
  3330. MOV   R7,USB_Int_Flag+01H
  3331. MOV   A,R7
  3332. ANL   A,#0F7H
  3333. MOV   USB_Int_Flag+01H,A
  3334. ;  break;
  3335. ; SOURCE LINE # 742
  3336. ;  }
  3337. ; SOURCE LINE # 743
  3338. ; }
  3339. ; SOURCE LINE # 744
  3340. ?C0071:
  3341. RET  
  3342. ; END OF get_descriptor
  3343. ; //Set_Address设置地址
  3344. ; void set_address(void)
  3345. RSEG  ?PR?set_address?CHAP_9
  3346. set_address:
  3347. USING 0
  3348. ; SOURCE LINE # 747
  3349. ; {
  3350. ; SOURCE LINE # 748
  3351. ;  USB_Int_Flag.BITS.EP0RX = 0;
  3352. ; SOURCE LINE # 749
  3353. MOV   R7,USB_Int_Flag+01H
  3354. MOV   A,R7
  3355. ANL   A,#0FBH
  3356. MOV   USB_Int_Flag+01H,A
  3357. ;  D14_Cntrl_Reg.D14_ADDRESS.BITS.DEVADDR = (USB_Device_Request.wValue >> 8);//设置地址
  3358. ; SOURCE LINE # 750
  3359. MOV   R0,#LOW (USB_Device_Request+02H)
  3360. MOV   A,@R0
  3361. MOV   R6,A
  3362. INC   R0
  3363. MOV   A,@R0
  3364. MOV   R7,A
  3365. MOV   A,R6
  3366. MOV   R7,A
  3367. MOV   R6,#00H
  3368. MOV   A,R7
  3369. ANL   A,#07FH
  3370. MOV   R7,A
  3371. MOV   DPTR,#D14_Cntrl_Reg
  3372. MOVX  A,@DPTR
  3373. MOV   R6,A
  3374. MOV   A,R6
  3375. ANL   A,#080H
  3376. MOV   R6,A
  3377. MOV   A,R6
  3378. ORL   A,R7
  3379. MOV   R7,A
  3380. MOV   DPTR,#D14_Cntrl_Reg
  3381. MOV   A,R7
  3382. MOVX  @DPTR,A
  3383. ;  //状态响应
  3384. ;  ep0in_ack();
  3385. ; SOURCE LINE # 752
  3386. LCALL ep0in_ack
  3387. ; }
  3388. ; SOURCE LINE # 753
  3389. RET  
  3390. ; END OF set_address
  3391. ; //Set_Config设置配置
  3392. ; void set_config(void)
  3393. RSEG  ?PR?set_config?CHAP_9
  3394. set_config:
  3395. USING 0
  3396. ; SOURCE LINE # 756
  3397. ; {
  3398. ; SOURCE LINE # 757
  3399. ;  USB_Int_Flag.BITS.EP0RX = 0;
  3400. ; SOURCE LINE # 758
  3401. MOV   R7,USB_Int_Flag+01H
  3402. MOV   A,R7
  3403. ANL   A,#0FBH
  3404. MOV   USB_Int_Flag+01H,A
  3405. ;  if(USB_Device_Request.wValue == 0)
  3406. ; SOURCE LINE # 760
  3407. MOV   R0,#LOW (USB_Device_Request+02H)
  3408. MOV   A,@R0
  3409. MOV   R6,A
  3410. INC   R0
  3411. MOV   A,@R0
  3412. MOV   R7,A
  3413. MOV   A,R7
  3414. ORL   A,R6
  3415. JNZ   ?C0118
  3416. ;  {
  3417. ; SOURCE LINE # 761
  3418. ;  Device_Config_Value = 0;
  3419. ; SOURCE LINE # 762
  3420. MOV   Device_Config_Value,#00H
  3421. ;  ep0in_ack();
  3422. ; SOURCE LINE # 763
  3423. LCALL ep0in_ack
  3424. ;  }
  3425. ; SOURCE LINE # 764
  3426. RET  
  3427. ?C0118:
  3428. ;  else if (USB_Device_Request.wValue ==  0x0100)
  3429. ; SOURCE LINE # 765
  3430. MOV   R0,#LOW (USB_Device_Request+02H)
  3431. MOV   A,@R0
  3432. MOV   R6,A
  3433. INC   R0
  3434. MOV   A,@R0
  3435. MOV   R7,A
  3436. MOV   A,R7
  3437. CJNE  A,#00H,?C0120
  3438. MOV   A,R6
  3439. CJNE  A,#01H,?C0120
  3440. ;     {
  3441. ; SOURCE LINE # 766
  3442. ;  //配置设备
  3443. ;  Device_Config_Value = (UC) (USB_Device_Request.wValue >> 8);
  3444. ; SOURCE LINE # 768
  3445. MOV   R0,#LOW (USB_Device_Request+02H)
  3446. MOV   A,@R0
  3447. MOV   R6,A
  3448. INC   R0
  3449. MOV   A,@R0
  3450. MOV   R7,A
  3451. MOV   A,R6
  3452. MOV   R7,A
  3453. MOV   R6,#00H
  3454. MOV   Device_Config_Value,R7
  3455. ; // USB_Device.BITS.State = USB_Configured;
  3456. ;  ep0in_ack();
  3457. ; SOURCE LINE # 770
  3458. LCALL ep0in_ack
  3459. ;  }
  3460. ; SOURCE LINE # 771
  3461. RET  
  3462. ?C0120:
  3463. ;  else
  3464. ;  {
  3465. ; SOURCE LINE # 773
  3466. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  3467. ; SOURCE LINE # 774
  3468. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3469. MOV   A,#01H
  3470. MOVX  @DPTR,A
  3471. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
  3472. ; SOURCE LINE # 775
  3473. MOV   DPTR,#D14_Cntrl_Reg+028H
  3474. MOVX  A,@DPTR
  3475. MOV   R7,A
  3476. MOV   A,R7
  3477. ORL   A,#01H
  3478. MOV   R7,A
  3479. MOV   DPTR,#D14_Cntrl_Reg+028H
  3480. MOV   A,R7
  3481. MOVX  @DPTR,A
  3482. ?C0122:
  3483. ;  while(!USB_Int_Flag.BITS.EP0SETUP)
  3484. ; SOURCE LINE # 776
  3485. MOV   R7,USB_Int_Flag+01H
  3486. MOV   A,R7
  3487. JB    ACC.0,?C0123
  3488. ;  {
  3489. ; SOURCE LINE # 777
  3490. ;  //读取ISP1581中断寄存器
  3491. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  3492. ; SOURCE LINE # 779
  3493. MOV   DPTR,#D14_Cntrl_Reg+018H
  3494. MOVX  A,@DPTR
  3495. MOV   R4,A
  3496. INC   DPTR
  3497. MOVX  A,@DPTR
  3498. MOV   R5,A
  3499. INC   DPTR
  3500. MOVX  A,@DPTR
  3501. MOV   R6,A
  3502. INC   DPTR
  3503. MOVX  A,@DPTR
  3504. MOV   R7,A
  3505. MOV   A,USB_Int_Flag+03H
  3506. ORL   A,R7
  3507. MOV   USB_Int_Flag+03H,A
  3508. MOV   A,USB_Int_Flag+02H
  3509. ORL   A,R6
  3510. MOV   USB_Int_Flag+02H,A
  3511. MOV   A,USB_Int_Flag+01H
  3512. ORL   A,R5
  3513. MOV   USB_Int_Flag+01H,A
  3514. MOV   A,USB_Int_Flag
  3515. ORL   A,R4
  3516. MOV   USB_Int_Flag,A
  3517. ;  //回写ISP1581中断寄存器
  3518. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  3519. ; SOURCE LINE # 781
  3520. MOV   R7,USB_Int_Flag+03H
  3521. MOV   R6,USB_Int_Flag+02H
  3522. MOV   R5,USB_Int_Flag+01H
  3523. MOV   R4,USB_Int_Flag
  3524. MOV   DPTR,#D14_Cntrl_Reg+018H
  3525. LCALL ?C?LSTXDATA
  3526. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  3527. ; SOURCE LINE # 782
  3528. MOV   R7,USB_Int_Flag
  3529. MOV   A,R7
  3530. RRC   A
  3531. RRC   A
  3532. RRC   A
  3533. ANL   A,#01FH
  3534. MOV   R7,A
  3535. MOV   A,R7
  3536. JB    ACC.0,?C0126
  3537. MOV   R7,USB_Int_Flag
  3538. MOV   A,R7
  3539. JNB   ACC.0,?C0122
  3540. RET  
  3541. ;  return;
  3542. ;  }
  3543. ; SOURCE LINE # 784
  3544. ?C0123:
  3545. ;  USB_Int_Flag.BITS.EP0TX = 0;
  3546. ; SOURCE LINE # 785
  3547. MOV   R7,USB_Int_Flag+01H
  3548. MOV   A,R7
  3549. ANL   A,#0F7H
  3550. MOV   USB_Int_Flag+01H,A
  3551. ;  }
  3552. ; SOURCE LINE # 786
  3553. ; }
  3554. ; SOURCE LINE # 787
  3555. ?C0126:
  3556. RET  
  3557. ; END OF set_config
  3558. ; //Get_Config获取配置
  3559. ; void get_config(void)
  3560. RSEG  ?PR?get_config?CHAP_9
  3561. get_config:
  3562. USING 0
  3563. ; SOURCE LINE # 791
  3564. ; {
  3565. ; SOURCE LINE # 792
  3566. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  3567. ; SOURCE LINE # 793
  3568. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3569. MOV   A,#01H
  3570. MOVX  @DPTR,A
  3571. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = Device_Config_Value;
  3572. ; SOURCE LINE # 794
  3573. MOV   DPTR,#D14_Cntrl_Reg+020H
  3574. MOV   A,Device_Config_Value
  3575. MOVX  @DPTR,A
  3576. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.VENDP = 1;
  3577. ; SOURCE LINE # 795
  3578. MOV   DPTR,#D14_Cntrl_Reg+028H
  3579. MOVX  A,@DPTR
  3580. MOV   R7,A
  3581. MOV   A,R7
  3582. ORL   A,#08H
  3583. MOV   R7,A
  3584. MOV   DPTR,#D14_Cntrl_Reg+028H
  3585. MOV   A,R7
  3586. MOVX  @DPTR,A
  3587. ;  wait_ep0tx();
  3588. ; SOURCE LINE # 796
  3589. LCALL wait_ep0tx
  3590. ;  ep0out_ack();
  3591. ; SOURCE LINE # 797
  3592. LCALL ep0out_ack
  3593. ; }
  3594. ; SOURCE LINE # 798
  3595. RET  
  3596. ; END OF get_config
  3597. ; //Clear_Feature特性清除
  3598. ; void clear_feature(void)
  3599. RSEG  ?PR?clear_feature?CHAP_9
  3600. clear_feature:
  3601. USING 0
  3602. ; SOURCE LINE # 801
  3603. ; {
  3604. ; SOURCE LINE # 802
  3605. ;  unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
  3606. ; SOURCE LINE # 803
  3607. MOV   R0,#LOW (USB_Device_Request)
  3608. MOV   A,@R0
  3609. MOV   R7,A
  3610. MOV   A,R7
  3611. ANL   A,#0FH
  3612. MOV   bRecipient?842,A
  3613. ;  //端点
  3614. ;  if(bRecipient == 0x02 &&USB_Device_Request.wValue == 0x0000)
  3615. ; SOURCE LINE # 805
  3616. MOV   A,bRecipient?842
  3617. XRL   A,#02H
  3618. JZ    $ + 5H
  3619. LJMP  ?C0128
  3620. MOV   R0,#LOW (USB_Device_Request+02H)
  3621. MOV   A,@R0
  3622. MOV   R6,A
  3623. INC   R0
  3624. MOV   A,@R0
  3625. MOV   R7,A
  3626. MOV   A,R7
  3627. ORL   A,R6
  3628. JZ    $ + 5H
  3629. LJMP  ?C0128
  3630. ;  {
  3631. ; SOURCE LINE # 806
  3632. ;  switch(USB_Device_Request.wIndex)
  3633. ; SOURCE LINE # 807
  3634. MOV   R0,#LOW (USB_Device_Request+04H)
  3635. MOV   A,@R0
  3636. MOV   R6,A
  3637. INC   R0
  3638. MOV   A,@R0
  3639. MOV   R7,A
  3640. MOV   A,R7
  3641. MOV   B,R6
  3642. LCALL ?C?ICASE
  3643. DW    ?C0131
  3644. DW    00H
  3645. DW    ?C0133
  3646. DW    0100H
  3647. DW    ?C0135
  3648. DW    0200H
  3649. DW    ?C0137
  3650. DW    0300H
  3651. DW    ?C0139
  3652. DW    0400H
  3653. DW    ?C0141
  3654. DW    0500H
  3655. DW    ?C0143
  3656. DW    0600H
  3657. DW    ?C0145
  3658. DW    0700H
  3659. DW    ?C0130
  3660. DW    08000H
  3661. DW    ?C0132
  3662. DW    08100H
  3663. DW    ?C0134
  3664. DW    08200H
  3665. DW    ?C0136
  3666. DW    08300H
  3667. DW    ?C0138
  3668. DW    08400H
  3669. DW    ?C0140
  3670. DW    08500H
  3671. DW    ?C0142
  3672. DW    08600H
  3673. DW    ?C0144
  3674. DW    08700H
  3675. DW    00H
  3676. DW    ?C0129
  3677. ;  {
  3678. ; SOURCE LINE # 808
  3679. ;  case  0x8000   :
  3680. ; SOURCE LINE # 809
  3681. ?C0130:
  3682. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  3683. ; SOURCE LINE # 810
  3684. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3685. MOV   A,#01H
  3686. MOVX  @DPTR,A
  3687. ;  break;
  3688. ; SOURCE LINE # 811
  3689. SJMP  ?C0129
  3690. ;  case  0x0000   :
  3691. ; SOURCE LINE # 812
  3692. ?C0131:
  3693. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
  3694. ; SOURCE LINE # 813
  3695. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3696. CLR   A
  3697. MOVX  @DPTR,A
  3698. ;  break;
  3699. ; SOURCE LINE # 814
  3700. SJMP  ?C0129
  3701. ;  case  0x8100   :
  3702. ; SOURCE LINE # 815
  3703. ?C0132:
  3704. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
  3705. ; SOURCE LINE # 816
  3706. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3707. MOV   A,#03H
  3708. MOVX  @DPTR,A
  3709. ;  break;
  3710. ; SOURCE LINE # 817
  3711. SJMP  ?C0129
  3712. ;  case  0x0100   :
  3713. ; SOURCE LINE # 818
  3714. ?C0133:
  3715. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
  3716. ; SOURCE LINE # 819
  3717. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3718. MOV   A,#02H
  3719. MOVX  @DPTR,A
  3720. ;  break;
  3721. ; SOURCE LINE # 820
  3722. SJMP  ?C0129
  3723. ;  case  0x8200   :
  3724. ; SOURCE LINE # 821
  3725. ?C0134:
  3726. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
  3727. ; SOURCE LINE # 822
  3728. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3729. MOV   A,#05H
  3730. MOVX  @DPTR,A
  3731. ;  break;
  3732. ; SOURCE LINE # 823
  3733. SJMP  ?C0129
  3734. ;  case  0x0200   :
  3735. ; SOURCE LINE # 824
  3736. ?C0135:
  3737. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
  3738. ; SOURCE LINE # 825
  3739. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3740. MOV   A,#04H
  3741. MOVX  @DPTR,A
  3742. ;  break;
  3743. ; SOURCE LINE # 826
  3744. SJMP  ?C0129
  3745. ;  case  0x8300   :
  3746. ; SOURCE LINE # 827
  3747. ?C0136:
  3748. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
  3749. ; SOURCE LINE # 828
  3750. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3751. MOV   A,#07H
  3752. MOVX  @DPTR,A
  3753. ;  break;
  3754. ; SOURCE LINE # 829
  3755. SJMP  ?C0129
  3756. ;  case  0x0300   :
  3757. ; SOURCE LINE # 830
  3758. ?C0137:
  3759. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
  3760. ; SOURCE LINE # 831
  3761. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3762. MOV   A,#06H
  3763. MOVX  @DPTR,A
  3764. ;  break;
  3765. ; SOURCE LINE # 832
  3766. SJMP  ?C0129
  3767. ;  case  0x8400   :
  3768. ; SOURCE LINE # 833
  3769. ?C0138:
  3770. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
  3771. ; SOURCE LINE # 834
  3772. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3773. MOV   A,#09H
  3774. MOVX  @DPTR,A
  3775. ;  break;
  3776. ; SOURCE LINE # 835
  3777. SJMP  ?C0129
  3778. ;  case  0x0400   :
  3779. ; SOURCE LINE # 836
  3780. ?C0139:
  3781. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
  3782. ; SOURCE LINE # 837
  3783. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3784. MOV   A,#08H
  3785. MOVX  @DPTR,A
  3786. ;  break;
  3787. ; SOURCE LINE # 838
  3788. SJMP  ?C0129
  3789. ;  case  0x8500   :
  3790. ; SOURCE LINE # 839
  3791. ?C0140:
  3792. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
  3793. ; SOURCE LINE # 840
  3794. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3795. MOV   A,#0BH
  3796. MOVX  @DPTR,A
  3797. ;  break;
  3798. ; SOURCE LINE # 841
  3799. SJMP  ?C0129
  3800. ;  case  0x0500   :
  3801. ; SOURCE LINE # 842
  3802. ?C0141:
  3803. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
  3804. ; SOURCE LINE # 843
  3805. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3806. MOV   A,#0AH
  3807. MOVX  @DPTR,A
  3808. ;  break;
  3809. ; SOURCE LINE # 844
  3810. SJMP  ?C0129
  3811. ;  case  0x8600   :
  3812. ; SOURCE LINE # 845
  3813. ?C0142:
  3814. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
  3815. ; SOURCE LINE # 846
  3816. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3817. MOV   A,#0DH
  3818. MOVX  @DPTR,A
  3819. ;  break;
  3820. ; SOURCE LINE # 847
  3821. SJMP  ?C0129
  3822. ;  case  0x0600   :
  3823. ; SOURCE LINE # 848
  3824. ?C0143:
  3825. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
  3826. ; SOURCE LINE # 849
  3827. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3828. MOV   A,#0CH
  3829. MOVX  @DPTR,A
  3830. ;  break;
  3831. ; SOURCE LINE # 850
  3832. SJMP  ?C0129
  3833. ;  case  0x8700   :
  3834. ; SOURCE LINE # 851
  3835. ?C0144:
  3836. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
  3837. ; SOURCE LINE # 852
  3838. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3839. MOV   A,#0FH
  3840. MOVX  @DPTR,A
  3841. ;  break;
  3842. ; SOURCE LINE # 853
  3843. SJMP  ?C0129
  3844. ;  case  0x0700   :
  3845. ; SOURCE LINE # 854
  3846. ?C0145:
  3847. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
  3848. ; SOURCE LINE # 855
  3849. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3850. MOV   A,#0EH
  3851. MOVX  @DPTR,A
  3852. ;  break;
  3853. ; SOURCE LINE # 856
  3854. ;  default        :  
  3855. ; SOURCE LINE # 857
  3856. ;  break;
  3857. ; SOURCE LINE # 858
  3858. ;  }                                                                                                      
  3859. ; SOURCE LINE # 859
  3860. ?C0129:
  3861. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 0;
  3862. ; SOURCE LINE # 860
  3863. MOV   DPTR,#D14_Cntrl_Reg+028H
  3864. MOVX  A,@DPTR
  3865. MOV   R7,A
  3866. MOV   A,R7
  3867. ANL   A,#0FEH
  3868. MOV   R7,A
  3869. MOV   DPTR,#D14_Cntrl_Reg+028H
  3870. MOV   A,R7
  3871. MOVX  @DPTR,A
  3872. ;  Kernel_Flag.BITS.Endpt_Stall = 0;
  3873. ; SOURCE LINE # 861
  3874. MOV   R7,Kernel_Flag+02H
  3875. MOV   A,R7
  3876. ANL   A,#07FH
  3877. MOV   Kernel_Flag+02H,A
  3878. ;  D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF; //disable FIFO
  3879. ; SOURCE LINE # 862
  3880. MOV   DPTR,#D14_Cntrl_Reg+08H
  3881. MOVX  A,@DPTR
  3882. MOV   R7,A
  3883. MOV   A,R7
  3884. ANL   A,#0F7H
  3885. MOV   R7,A
  3886. MOV   DPTR,#D14_Cntrl_Reg+08H
  3887. MOV   A,R7
  3888. MOVX  @DPTR,A
  3889. ;  D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON; //disable FIFO
  3890. ; SOURCE LINE # 863
  3891. MOV   DPTR,#D14_Cntrl_Reg+08H
  3892. MOVX  A,@DPTR
  3893. MOV   R7,A
  3894. MOV   A,R7
  3895. ORL   A,#08H
  3896. MOV   R7,A
  3897. MOV   DPTR,#D14_Cntrl_Reg+08H
  3898. MOV   A,R7
  3899. MOVX  @DPTR,A
  3900. ;  ep0in_ack();
  3901. ; SOURCE LINE # 864
  3902. LCALL ep0in_ack
  3903. ;  USB_Device.BITS.Halt = 0;
  3904. ; SOURCE LINE # 865
  3905. MOV   R7,USB_Device
  3906. MOV   A,R7
  3907. ANL   A,#0FDH
  3908. MOV   USB_Device,A
  3909. ;  }   
  3910. ; SOURCE LINE # 866
  3911. RET  
  3912. ?C0128:
  3913. ;  else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
  3914. ; SOURCE LINE # 867
  3915. MOV   A,bRecipient?842
  3916. JNZ   ?C0148
  3917. MOV   R0,#LOW (USB_Device_Request+02H)
  3918. MOV   A,@R0
  3919. MOV   R6,A
  3920. INC   R0
  3921. MOV   A,@R0
  3922. MOV   R7,A
  3923. MOV   A,R7
  3924. CJNE  A,#00H,?C0148
  3925. MOV   A,R6
  3926. CJNE  A,#01H,?C0148
  3927. ;  { //远程唤醒
  3928. ; SOURCE LINE # 868
  3929. ;  USB_Device.BITS.Remote_Wakeup = 0;
  3930. ; SOURCE LINE # 869
  3931. MOV   R7,USB_Device
  3932. MOV   A,R7
  3933. ANL   A,#0FEH
  3934. MOV   USB_Device,A
  3935. ;  ep0in_ack();
  3936. ; SOURCE LINE # 870
  3937. LCALL ep0in_ack
  3938. ;  }
  3939. ; SOURCE LINE # 871
  3940. RET  
  3941. ?C0148:
  3942. ;  else
  3943. ;  {
  3944. ; SOURCE LINE # 873
  3945. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  3946. ; SOURCE LINE # 874
  3947. MOV   DPTR,#D14_Cntrl_Reg+02CH
  3948. MOV   A,#01H
  3949. MOVX  @DPTR,A
  3950. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
  3951. ; SOURCE LINE # 875
  3952. MOV   DPTR,#D14_Cntrl_Reg+028H
  3953. MOVX  A,@DPTR
  3954. MOV   R7,A
  3955. MOV   A,R7
  3956. ORL   A,#01H
  3957. MOV   R7,A
  3958. MOV   DPTR,#D14_Cntrl_Reg+028H
  3959. MOV   A,R7
  3960. MOVX  @DPTR,A
  3961. ?C0150:
  3962. ;  while(!USB_Int_Flag.BITS.EP0SETUP)
  3963. ; SOURCE LINE # 876
  3964. MOV   R7,USB_Int_Flag+01H
  3965. MOV   A,R7
  3966. JB    ACC.0,?C0151
  3967. ;  {
  3968. ; SOURCE LINE # 877
  3969. ;  //读取ISP1581中断寄存器
  3970. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  3971. ; SOURCE LINE # 879
  3972. MOV   DPTR,#D14_Cntrl_Reg+018H
  3973. MOVX  A,@DPTR
  3974. MOV   R4,A
  3975. INC   DPTR
  3976. MOVX  A,@DPTR
  3977. MOV   R5,A
  3978. INC   DPTR
  3979. MOVX  A,@DPTR
  3980. MOV   R6,A
  3981. INC   DPTR
  3982. MOVX  A,@DPTR
  3983. MOV   R7,A
  3984. MOV   A,USB_Int_Flag+03H
  3985. ORL   A,R7
  3986. MOV   USB_Int_Flag+03H,A
  3987. MOV   A,USB_Int_Flag+02H
  3988. ORL   A,R6
  3989. MOV   USB_Int_Flag+02H,A
  3990. MOV   A,USB_Int_Flag+01H
  3991. ORL   A,R5
  3992. MOV   USB_Int_Flag+01H,A
  3993. MOV   A,USB_Int_Flag
  3994. ORL   A,R4
  3995. MOV   USB_Int_Flag,A
  3996. ;  //回写ISP1581中断寄存器
  3997. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  3998. ; SOURCE LINE # 881
  3999. MOV   R7,USB_Int_Flag+03H
  4000. MOV   R6,USB_Int_Flag+02H
  4001. MOV   R5,USB_Int_Flag+01H
  4002. MOV   R4,USB_Int_Flag
  4003. MOV   DPTR,#D14_Cntrl_Reg+018H
  4004. LCALL ?C?LSTXDATA
  4005. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  4006. ; SOURCE LINE # 882
  4007. MOV   R7,USB_Int_Flag
  4008. MOV   A,R7
  4009. RRC   A
  4010. RRC   A
  4011. RRC   A
  4012. ANL   A,#01FH
  4013. MOV   R7,A
  4014. MOV   A,R7
  4015. JB    ACC.0,?C0154
  4016. MOV   R7,USB_Int_Flag
  4017. MOV   A,R7
  4018. JNB   ACC.0,?C0150
  4019. RET  
  4020. ;  return;
  4021. ;  }
  4022. ; SOURCE LINE # 884
  4023. ?C0151:
  4024. ;  USB_Int_Flag.BITS.EP0TX = 0;
  4025. ; SOURCE LINE # 885
  4026. MOV   R7,USB_Int_Flag+01H
  4027. MOV   A,R7
  4028. ANL   A,#0F7H
  4029. MOV   USB_Int_Flag+01H,A
  4030. ;  }
  4031. ; SOURCE LINE # 886
  4032. ; }
  4033. ; SOURCE LINE # 887
  4034. ?C0154:
  4035. RET  
  4036. ; END OF clear_feature
  4037. ; //Get_Status获取设备状态
  4038. ; void get_status(void)
  4039. RSEG  ?PR?get_status?CHAP_9
  4040. get_status:
  4041. USING 0
  4042. ; SOURCE LINE # 890
  4043. ; {
  4044. ; SOURCE LINE # 891
  4045. ;  if(USB_Device_Request.bmRequestType == 0x80)
  4046. ; SOURCE LINE # 892
  4047. MOV   R0,#LOW (USB_Device_Request)
  4048. MOV   A,@R0
  4049. MOV   R7,A
  4050. MOV   A,R7
  4051. CJNE  A,#080H,?C0155
  4052. ;  {
  4053. ; SOURCE LINE # 893
  4054. ;  //端点0IN返回0x01,0x00两字节
  4055. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  4056. ; SOURCE LINE # 895
  4057. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4058. MOV   A,#01H
  4059. MOVX  @DPTR,A
  4060. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
  4061. ; SOURCE LINE # 896
  4062. MOV   DPTR,#D14_Cntrl_Reg+01CH
  4063. MOV   A,#02H
  4064. MOVX  @DPTR,A
  4065. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  4066. ; SOURCE LINE # 897
  4067. MOV   DPTR,#D14_Cntrl_Reg+01DH
  4068. CLR   A
  4069. MOVX  @DPTR,A
  4070. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = 1;
  4071. ; SOURCE LINE # 898
  4072. MOV   DPTR,#D14_Cntrl_Reg+020H
  4073. MOV   A,#01H
  4074. MOVX  @DPTR,A
  4075. ;  D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
  4076. ; SOURCE LINE # 899
  4077. MOV   DPTR,#D14_Cntrl_Reg+021H
  4078. CLR   A
  4079. MOVX  @DPTR,A
  4080. ;  //等待发送完毕
  4081. ;  wait_ep0tx();
  4082. ; SOURCE LINE # 901
  4083. LCALL wait_ep0tx
  4084. ;  ep0out_ack();
  4085. ; SOURCE LINE # 902
  4086. LCALL ep0out_ack
  4087. ;  }
  4088. ; SOURCE LINE # 903
  4089. ?C0155:
  4090. ;  if(USB_Device_Request.bmRequestType == 0x81)
  4091. ; SOURCE LINE # 905
  4092. MOV   R0,#LOW (USB_Device_Request)
  4093. MOV   A,@R0
  4094. MOV   R7,A
  4095. MOV   A,R7
  4096. CJNE  A,#081H,?C0156
  4097. ;  {
  4098. ; SOURCE LINE # 906
  4099. ;  //端点0IN返回0x00,0x00两字节
  4100. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  4101. ; SOURCE LINE # 908
  4102. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4103. MOV   A,#01H
  4104. MOVX  @DPTR,A
  4105. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
  4106. ; SOURCE LINE # 909
  4107. MOV   DPTR,#D14_Cntrl_Reg+01CH
  4108. MOV   A,#02H
  4109. MOVX  @DPTR,A
  4110. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  4111. ; SOURCE LINE # 910
  4112. MOV   DPTR,#D14_Cntrl_Reg+01DH
  4113. CLR   A
  4114. MOVX  @DPTR,A
  4115. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0;
  4116. ; SOURCE LINE # 911
  4117. MOV   DPTR,#D14_Cntrl_Reg+020H
  4118. CLR   A
  4119. MOVX  @DPTR,A
  4120. ;  D14_Cntrl_Reg.D14_DATA_PORT_MSB = 0;
  4121. ; SOURCE LINE # 912
  4122. MOV   DPTR,#D14_Cntrl_Reg+021H
  4123. CLR   A
  4124. MOVX  @DPTR,A
  4125. ;  wait_ep0tx();
  4126. ; SOURCE LINE # 913
  4127. LCALL wait_ep0tx
  4128. ;  ep0out_ack();
  4129. ; SOURCE LINE # 914
  4130. LCALL ep0out_ack
  4131. ;  }
  4132. ; SOURCE LINE # 915
  4133. ?C0156:
  4134. ;  if(USB_Device_Request.bmRequestType == 0x82)
  4135. ; SOURCE LINE # 917
  4136. MOV   R0,#LOW (USB_Device_Request)
  4137. MOV   A,@R0
  4138. MOV   R7,A
  4139. MOV   A,R7
  4140. XRL   A,#082H
  4141. JNZ   ?C0158
  4142. ;  {
  4143. ; SOURCE LINE # 918
  4144. ;  Temp = 0;
  4145. ; SOURCE LINE # 919
  4146. MOV   Temp,#00H
  4147. MOV   Temp+01H,#00H
  4148. ;  Temp = USB_Device.BITS.Halt;
  4149. ; SOURCE LINE # 920
  4150. MOV   R7,USB_Device
  4151. MOV   A,R7
  4152. CLR   C
  4153. RRC   A
  4154. MOV   R7,A
  4155. MOV   A,R7
  4156. ANL   A,#01H
  4157. MOV   R7,A
  4158. MOV   R6,#00H
  4159. MOV   Temp,R6
  4160. MOV   Temp+01H,R7
  4161. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  4162. ; SOURCE LINE # 921
  4163. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4164. MOV   A,#01H
  4165. MOVX  @DPTR,A
  4166. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 2;
  4167. ; SOURCE LINE # 922
  4168. MOV   DPTR,#D14_Cntrl_Reg+01CH
  4169. MOV   A,#02H
  4170. MOVX  @DPTR,A
  4171. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  4172. ; SOURCE LINE # 923
  4173. MOV   DPTR,#D14_Cntrl_Reg+01DH
  4174. CLR   A
  4175. MOVX  @DPTR,A
  4176. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = (UC) Temp;
  4177. ; SOURCE LINE # 924
  4178. MOV   R7,Temp+01H
  4179. MOV   DPTR,#D14_Cntrl_Reg+020H
  4180. MOV   A,R7
  4181. MOVX  @DPTR,A
  4182. ;  D14_Cntrl_Reg.D14_DATA_PORT_MSB = (UC) (Temp >> 8);
  4183. ; SOURCE LINE # 925
  4184. MOV   A,Temp
  4185. MOV   R7,A
  4186. MOV   R6,#00H
  4187. MOV   DPTR,#D14_Cntrl_Reg+021H
  4188. MOV   A,R7
  4189. MOVX  @DPTR,A
  4190. ;  wait_ep0tx();
  4191. ; SOURCE LINE # 926
  4192. LCALL wait_ep0tx
  4193. ;  ep0out_ack();
  4194. ; SOURCE LINE # 927
  4195. LCALL ep0out_ack
  4196. ;  }
  4197. ; SOURCE LINE # 928
  4198. ; }
  4199. ; SOURCE LINE # 929
  4200. ?C0158:
  4201. RET  
  4202. ; END OF get_status
  4203. ; //Set_Feature特性设置
  4204. ; //不支持测试模式
  4205. ; void set_feature(void)
  4206. RSEG  ?PR?set_feature?CHAP_9
  4207. set_feature:
  4208. USING 0
  4209. ; SOURCE LINE # 935
  4210. ; {
  4211. ; SOURCE LINE # 936
  4212. ;  unsigned char bRecipient = USB_Device_Request.bmRequestType & 0x0f;
  4213. ; SOURCE LINE # 937
  4214. MOV   R0,#LOW (USB_Device_Request)
  4215. MOV   A,@R0
  4216. MOV   R7,A
  4217. MOV   A,R7
  4218. ANL   A,#0FH
  4219. MOV   bRecipient?1043,A
  4220. ;  //端点
  4221. ;  if(bRecipient == 0x02 && USB_Device_Request.wValue == 0x0000)
  4222. ; SOURCE LINE # 939
  4223. MOV   A,bRecipient?1043
  4224. XRL   A,#02H
  4225. JZ    $ + 5H
  4226. LJMP  ?C0159
  4227. MOV   R0,#LOW (USB_Device_Request+02H)
  4228. MOV   A,@R0
  4229. MOV   R6,A
  4230. INC   R0
  4231. MOV   A,@R0
  4232. MOV   R7,A
  4233. MOV   A,R7
  4234. ORL   A,R6
  4235. JZ    $ + 5H
  4236. LJMP  ?C0159
  4237. ;  {
  4238. ; SOURCE LINE # 940
  4239. ;  switch(USB_Device_Request.wIndex)
  4240. ; SOURCE LINE # 941
  4241. MOV   R0,#LOW (USB_Device_Request+04H)
  4242. MOV   A,@R0
  4243. MOV   R6,A
  4244. INC   R0
  4245. MOV   A,@R0
  4246. MOV   R7,A
  4247. MOV   A,R7
  4248. MOV   B,R6
  4249. LCALL ?C?ICASE
  4250. DW    ?C0162
  4251. DW    00H
  4252. DW    ?C0164
  4253. DW    0100H
  4254. DW    ?C0166
  4255. DW    0200H
  4256. DW    ?C0168
  4257. DW    0300H
  4258. DW    ?C0170
  4259. DW    0400H
  4260. DW    ?C0172
  4261. DW    0500H
  4262. DW    ?C0174
  4263. DW    0600H
  4264. DW    ?C0176
  4265. DW    0700H
  4266. DW    ?C0161
  4267. DW    08000H
  4268. DW    ?C0163
  4269. DW    08100H
  4270. DW    ?C0165
  4271. DW    08200H
  4272. DW    ?C0167
  4273. DW    08300H
  4274. DW    ?C0169
  4275. DW    08400H
  4276. DW    ?C0171
  4277. DW    08500H
  4278. DW    ?C0173
  4279. DW    08600H
  4280. DW    ?C0175
  4281. DW    08700H
  4282. DW    00H
  4283. DW    ?C0160
  4284. ;  {
  4285. ; SOURCE LINE # 942
  4286. ;  case  0x8000   :
  4287. ; SOURCE LINE # 943
  4288. ?C0161:
  4289. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  4290. ; SOURCE LINE # 944
  4291. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4292. MOV   A,#01H
  4293. MOVX  @DPTR,A
  4294. ;  break;
  4295. ; SOURCE LINE # 945
  4296. SJMP  ?C0160
  4297. ;  case  0x0000   :
  4298. ; SOURCE LINE # 946
  4299. ?C0162:
  4300. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
  4301. ; SOURCE LINE # 947
  4302. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4303. CLR   A
  4304. MOVX  @DPTR,A
  4305. ;  break;
  4306. ; SOURCE LINE # 948
  4307. SJMP  ?C0160
  4308. ;  case  0x8100   :
  4309. ; SOURCE LINE # 949
  4310. ?C0163:
  4311. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;
  4312. ; SOURCE LINE # 950
  4313. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4314. MOV   A,#03H
  4315. MOVX  @DPTR,A
  4316. ;  break;
  4317. ; SOURCE LINE # 951
  4318. SJMP  ?C0160
  4319. ;  case  0x0100   :
  4320. ; SOURCE LINE # 952
  4321. ?C0164:
  4322. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;
  4323. ; SOURCE LINE # 953
  4324. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4325. MOV   A,#02H
  4326. MOVX  @DPTR,A
  4327. ;  break;
  4328. ; SOURCE LINE # 954
  4329. SJMP  ?C0160
  4330. ;  case  0x8200   :
  4331. ; SOURCE LINE # 955
  4332. ?C0165:
  4333. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
  4334. ; SOURCE LINE # 956
  4335. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4336. MOV   A,#05H
  4337. MOVX  @DPTR,A
  4338. ;  break;
  4339. ; SOURCE LINE # 957
  4340. SJMP  ?C0160
  4341. ;  case  0x0200   :
  4342. ; SOURCE LINE # 958
  4343. ?C0166:
  4344. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
  4345. ; SOURCE LINE # 959
  4346. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4347. MOV   A,#04H
  4348. MOVX  @DPTR,A
  4349. ;  break;
  4350. ; SOURCE LINE # 960
  4351. SJMP  ?C0160
  4352. ;  case  0x8300   :
  4353. ; SOURCE LINE # 961
  4354. ?C0167:
  4355. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
  4356. ; SOURCE LINE # 962
  4357. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4358. MOV   A,#07H
  4359. MOVX  @DPTR,A
  4360. ;  break;
  4361. ; SOURCE LINE # 963
  4362. SJMP  ?C0160
  4363. ;  case  0x0300   :
  4364. ; SOURCE LINE # 964
  4365. ?C0168:
  4366. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;
  4367. ; SOURCE LINE # 965
  4368. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4369. MOV   A,#06H
  4370. MOVX  @DPTR,A
  4371. ;  break;
  4372. ; SOURCE LINE # 966
  4373. SJMP  ?C0160
  4374. ;  case  0x8400   :
  4375. ; SOURCE LINE # 967
  4376. ?C0169:
  4377. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 9;
  4378. ; SOURCE LINE # 968
  4379. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4380. MOV   A,#09H
  4381. MOVX  @DPTR,A
  4382. ;  break;
  4383. ; SOURCE LINE # 969
  4384. SJMP  ?C0160
  4385. ;  case  0x0400   :
  4386. ; SOURCE LINE # 970
  4387. ?C0170:
  4388. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 8;
  4389. ; SOURCE LINE # 971
  4390. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4391. MOV   A,#08H
  4392. MOVX  @DPTR,A
  4393. ;  break;
  4394. ; SOURCE LINE # 972
  4395. SJMP  ?C0160
  4396. ;  case  0x8500   :
  4397. ; SOURCE LINE # 973
  4398. ?C0171:
  4399. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 11;
  4400. ; SOURCE LINE # 974
  4401. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4402. MOV   A,#0BH
  4403. MOVX  @DPTR,A
  4404. ;  break;
  4405. ; SOURCE LINE # 975
  4406. SJMP  ?C0160
  4407. ;  case  0x0500   :
  4408. ; SOURCE LINE # 976
  4409. ?C0172:
  4410. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 10;
  4411. ; SOURCE LINE # 977
  4412. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4413. MOV   A,#0AH
  4414. MOVX  @DPTR,A
  4415. ;  break;
  4416. ; SOURCE LINE # 978
  4417. SJMP  ?C0160
  4418. ;  case  0x8600   :
  4419. ; SOURCE LINE # 979
  4420. ?C0173:
  4421. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 13;
  4422. ; SOURCE LINE # 980
  4423. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4424. MOV   A,#0DH
  4425. MOVX  @DPTR,A
  4426. ;  break;
  4427. ; SOURCE LINE # 981
  4428. SJMP  ?C0160
  4429. ;  case  0x0600   :
  4430. ; SOURCE LINE # 982
  4431. ?C0174:
  4432. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 12;
  4433. ; SOURCE LINE # 983
  4434. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4435. MOV   A,#0CH
  4436. MOVX  @DPTR,A
  4437. ;  break;
  4438. ; SOURCE LINE # 984
  4439. SJMP  ?C0160
  4440. ;  case  0x8700   :
  4441. ; SOURCE LINE # 985
  4442. ?C0175:
  4443. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 15;
  4444. ; SOURCE LINE # 986
  4445. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4446. MOV   A,#0FH
  4447. MOVX  @DPTR,A
  4448. ;  break;
  4449. ; SOURCE LINE # 987
  4450. SJMP  ?C0160
  4451. ;  case  0x0700   :
  4452. ; SOURCE LINE # 988
  4453. ?C0176:
  4454. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 14;
  4455. ; SOURCE LINE # 989
  4456. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4457. MOV   A,#0EH
  4458. MOVX  @DPTR,A
  4459. ;  break;
  4460. ; SOURCE LINE # 990
  4461. ;  default        :  
  4462. ; SOURCE LINE # 991
  4463. ;  break;
  4464. ; SOURCE LINE # 992
  4465. ;  }                                                                                                      
  4466. ; SOURCE LINE # 993
  4467. ?C0160:
  4468. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
  4469. ; SOURCE LINE # 994
  4470. MOV   DPTR,#D14_Cntrl_Reg+028H
  4471. MOVX  A,@DPTR
  4472. MOV   R7,A
  4473. MOV   A,R7
  4474. ORL   A,#01H
  4475. MOV   R7,A
  4476. MOV   DPTR,#D14_Cntrl_Reg+028H
  4477. MOV   A,R7
  4478. MOVX  @DPTR,A
  4479. ;  Kernel_Flag.BITS.Endpt_Stall = 1;
  4480. ; SOURCE LINE # 995
  4481. MOV   R7,Kernel_Flag+02H
  4482. MOV   A,R7
  4483. ORL   A,#080H
  4484. MOV   Kernel_Flag+02H,A
  4485. ;  D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = OFF; //disable FIFO
  4486. ; SOURCE LINE # 996
  4487. MOV   DPTR,#D14_Cntrl_Reg+08H
  4488. MOVX  A,@DPTR
  4489. MOV   R7,A
  4490. MOV   A,R7
  4491. ANL   A,#0F7H
  4492. MOV   R7,A
  4493. MOV   DPTR,#D14_Cntrl_Reg+08H
  4494. MOV   A,R7
  4495. MOVX  @DPTR,A
  4496. ;  //D14_Cntrl_Reg.D14_ENDPT_TYPE.BITS.ENABLE = ON; //disable FIFO
  4497. ;  ep0in_ack();
  4498. ; SOURCE LINE # 998
  4499. LCALL ep0in_ack
  4500. ;  USB_Device.BITS.Halt = 0;
  4501. ; SOURCE LINE # 999
  4502. MOV   R7,USB_Device
  4503. MOV   A,R7
  4504. ANL   A,#0FDH
  4505. MOV   USB_Device,A
  4506. ;  }   
  4507. ; SOURCE LINE # 1000
  4508. RET  
  4509. ?C0159:
  4510. ;  else if(bRecipient == 0x00 && USB_Device_Request.wValue == 0x0100)
  4511. ; SOURCE LINE # 1001
  4512. MOV   A,bRecipient?1043
  4513. JNZ   ?C0179
  4514. MOV   R0,#LOW (USB_Device_Request+02H)
  4515. MOV   A,@R0
  4516. MOV   R6,A
  4517. INC   R0
  4518. MOV   A,@R0
  4519. MOV   R7,A
  4520. MOV   A,R7
  4521. CJNE  A,#00H,?C0179
  4522. MOV   A,R6
  4523. CJNE  A,#01H,?C0179
  4524. ;  { //远程唤醒
  4525. ; SOURCE LINE # 1002
  4526. ;  USB_Device.BITS.Remote_Wakeup = 1;
  4527. ; SOURCE LINE # 1003
  4528. MOV   R7,USB_Device
  4529. MOV   A,R7
  4530. ORL   A,#01H
  4531. MOV   USB_Device,A
  4532. ;  ep0in_ack();
  4533. ; SOURCE LINE # 1004
  4534. LCALL ep0in_ack
  4535. ;  }
  4536. ; SOURCE LINE # 1005
  4537. RET  
  4538. ?C0179:
  4539. ;  else
  4540. ;  {
  4541. ; SOURCE LINE # 1007
  4542. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  4543. ; SOURCE LINE # 1008
  4544. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4545. MOV   A,#01H
  4546. MOVX  @DPTR,A
  4547. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
  4548. ; SOURCE LINE # 1009
  4549. MOV   DPTR,#D14_Cntrl_Reg+028H
  4550. MOVX  A,@DPTR
  4551. MOV   R7,A
  4552. MOV   A,R7
  4553. ORL   A,#01H
  4554. MOV   R7,A
  4555. MOV   DPTR,#D14_Cntrl_Reg+028H
  4556. MOV   A,R7
  4557. MOVX  @DPTR,A
  4558. ?C0181:
  4559. ;  while(!USB_Int_Flag.BITS.EP0SETUP)
  4560. ; SOURCE LINE # 1010
  4561. MOV   R7,USB_Int_Flag+01H
  4562. MOV   A,R7
  4563. JB    ACC.0,?C0182
  4564. ;  {
  4565. ; SOURCE LINE # 1011
  4566. ;  //读取ISP1581中断寄存器
  4567. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  4568. ; SOURCE LINE # 1013
  4569. MOV   DPTR,#D14_Cntrl_Reg+018H
  4570. MOVX  A,@DPTR
  4571. MOV   R4,A
  4572. INC   DPTR
  4573. MOVX  A,@DPTR
  4574. MOV   R5,A
  4575. INC   DPTR
  4576. MOVX  A,@DPTR
  4577. MOV   R6,A
  4578. INC   DPTR
  4579. MOVX  A,@DPTR
  4580. MOV   R7,A
  4581. MOV   A,USB_Int_Flag+03H
  4582. ORL   A,R7
  4583. MOV   USB_Int_Flag+03H,A
  4584. MOV   A,USB_Int_Flag+02H
  4585. ORL   A,R6
  4586. MOV   USB_Int_Flag+02H,A
  4587. MOV   A,USB_Int_Flag+01H
  4588. ORL   A,R5
  4589. MOV   USB_Int_Flag+01H,A
  4590. MOV   A,USB_Int_Flag
  4591. ORL   A,R4
  4592. MOV   USB_Int_Flag,A
  4593. ;  //回写ISP1581中断寄存器
  4594. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  4595. ; SOURCE LINE # 1015
  4596. MOV   R7,USB_Int_Flag+03H
  4597. MOV   R6,USB_Int_Flag+02H
  4598. MOV   R5,USB_Int_Flag+01H
  4599. MOV   R4,USB_Int_Flag
  4600. MOV   DPTR,#D14_Cntrl_Reg+018H
  4601. LCALL ?C?LSTXDATA
  4602. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  4603. ; SOURCE LINE # 1016
  4604. MOV   R7,USB_Int_Flag
  4605. MOV   A,R7
  4606. RRC   A
  4607. RRC   A
  4608. RRC   A
  4609. ANL   A,#01FH
  4610. MOV   R7,A
  4611. MOV   A,R7
  4612. JB    ACC.0,?C0185
  4613. MOV   R7,USB_Int_Flag
  4614. MOV   A,R7
  4615. JNB   ACC.0,?C0181
  4616. RET  
  4617. ;  return;
  4618. ;  }
  4619. ; SOURCE LINE # 1018
  4620. ?C0182:
  4621. ;  USB_Int_Flag.BITS.EP0TX = 0;
  4622. ; SOURCE LINE # 1019
  4623. MOV   R7,USB_Int_Flag+01H
  4624. MOV   A,R7
  4625. ANL   A,#0F7H
  4626. MOV   USB_Int_Flag+01H,A
  4627. ;  }
  4628. ; SOURCE LINE # 1020
  4629. ; }
  4630. ; SOURCE LINE # 1021
  4631. ?C0185:
  4632. RET  
  4633. ; END OF set_feature
  4634. ; //Get_Interface 获取接口状态
  4635. ; void get_interface(void)
  4636. RSEG  ?PR?get_interface?CHAP_9
  4637. get_interface:
  4638. USING 0
  4639. ; SOURCE LINE # 1025
  4640. ; {
  4641. ; SOURCE LINE # 1026
  4642. ;  if(USB_Device_Request.wValue != 0)
  4643. ; SOURCE LINE # 1027
  4644. MOV   R0,#LOW (USB_Device_Request+02H)
  4645. MOV   A,@R0
  4646. MOV   R6,A
  4647. INC   R0
  4648. MOV   A,@R0
  4649. MOV   R7,A
  4650. MOV   A,R7
  4651. ORL   A,R6
  4652. JZ    ?C0186
  4653. ;  {
  4654. ; SOURCE LINE # 1028
  4655. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STALL = 1;
  4656. ; SOURCE LINE # 1029
  4657. MOV   DPTR,#D14_Cntrl_Reg+028H
  4658. MOVX  A,@DPTR
  4659. MOV   R7,A
  4660. MOV   A,R7
  4661. ORL   A,#01H
  4662. MOV   R7,A
  4663. MOV   DPTR,#D14_Cntrl_Reg+028H
  4664. MOV   A,R7
  4665. MOVX  @DPTR,A
  4666. ?C0187:
  4667. ;  while(!USB_Int_Flag.BITS.EP0SETUP)
  4668. ; SOURCE LINE # 1030
  4669. MOV   R7,USB_Int_Flag+01H
  4670. MOV   A,R7
  4671. JB    ACC.0,?C0188
  4672. ;  {
  4673. ; SOURCE LINE # 1031
  4674. ;  //读取ISP1581中断寄存器
  4675. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  4676. ; SOURCE LINE # 1033
  4677. MOV   DPTR,#D14_Cntrl_Reg+018H
  4678. MOVX  A,@DPTR
  4679. MOV   R4,A
  4680. INC   DPTR
  4681. MOVX  A,@DPTR
  4682. MOV   R5,A
  4683. INC   DPTR
  4684. MOVX  A,@DPTR
  4685. MOV   R6,A
  4686. INC   DPTR
  4687. MOVX  A,@DPTR
  4688. MOV   R7,A
  4689. MOV   A,USB_Int_Flag+03H
  4690. ORL   A,R7
  4691. MOV   USB_Int_Flag+03H,A
  4692. MOV   A,USB_Int_Flag+02H
  4693. ORL   A,R6
  4694. MOV   USB_Int_Flag+02H,A
  4695. MOV   A,USB_Int_Flag+01H
  4696. ORL   A,R5
  4697. MOV   USB_Int_Flag+01H,A
  4698. MOV   A,USB_Int_Flag
  4699. ORL   A,R4
  4700. MOV   USB_Int_Flag,A
  4701. ;  //回写ISP1581中断寄存器
  4702. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  4703. ; SOURCE LINE # 1035
  4704. MOV   R7,USB_Int_Flag+03H
  4705. MOV   R6,USB_Int_Flag+02H
  4706. MOV   R5,USB_Int_Flag+01H
  4707. MOV   R4,USB_Int_Flag
  4708. MOV   DPTR,#D14_Cntrl_Reg+018H
  4709. LCALL ?C?LSTXDATA
  4710. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  4711. ; SOURCE LINE # 1036
  4712. MOV   R7,USB_Int_Flag
  4713. MOV   A,R7
  4714. RRC   A
  4715. RRC   A
  4716. RRC   A
  4717. ANL   A,#01FH
  4718. MOV   R7,A
  4719. MOV   A,R7
  4720. JB    ACC.0,?C0191
  4721. MOV   R7,USB_Int_Flag
  4722. MOV   A,R7
  4723. JNB   ACC.0,?C0187
  4724. RET  
  4725. ;  return;
  4726. ;  }
  4727. ; SOURCE LINE # 1038
  4728. ?C0188:
  4729. ;  USB_Int_Flag.BITS.EP0TX = 0;
  4730. ; SOURCE LINE # 1039
  4731. MOV   R7,USB_Int_Flag+01H
  4732. MOV   A,R7
  4733. ANL   A,#0F7H
  4734. MOV   USB_Int_Flag+01H,A
  4735. ;  }
  4736. ; SOURCE LINE # 1040
  4737. RET  
  4738. ?C0186:
  4739. ;  else
  4740. ;  {
  4741. ; SOURCE LINE # 1042
  4742. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  4743. ; SOURCE LINE # 1043
  4744. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4745. MOV   A,#01H
  4746. MOVX  @DPTR,A
  4747. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 1;
  4748. ; SOURCE LINE # 1044
  4749. MOV   DPTR,#D14_Cntrl_Reg+01CH
  4750. MOV   A,#01H
  4751. MOVX  @DPTR,A
  4752. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
  4753. ; SOURCE LINE # 1045
  4754. MOV   DPTR,#D14_Cntrl_Reg+01DH
  4755. CLR   A
  4756. MOVX  @DPTR,A
  4757. ;  if(!USB_Device.BITS.Alter_Interface)
  4758. ; SOURCE LINE # 1046
  4759. MOV   R7,USB_Device+03H
  4760. MOV   A,R7
  4761. JB    ACC.0,?C0193
  4762. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = 0;
  4763. ; SOURCE LINE # 1047
  4764. MOV   DPTR,#D14_Cntrl_Reg+020H
  4765. CLR   A
  4766. MOVX  @DPTR,A
  4767. SJMP  ?C0194
  4768. ?C0193:
  4769. ;  else
  4770. ;  D14_Cntrl_Reg.D14_DATA_PORT_LSB = 1;
  4771. ; SOURCE LINE # 1049
  4772. MOV   DPTR,#D14_Cntrl_Reg+020H
  4773. MOV   A,#01H
  4774. MOVX  @DPTR,A
  4775. ?C0194:
  4776. ;  wait_ep0tx();
  4777. ; SOURCE LINE # 1050
  4778. LCALL wait_ep0tx
  4779. ;  ep0in_ack();
  4780. ; SOURCE LINE # 1051
  4781. LCALL ep0in_ack
  4782. ;  }
  4783. ; SOURCE LINE # 1052
  4784. ; }
  4785. ; SOURCE LINE # 1053
  4786. ?C0191:
  4787. RET  
  4788. ; END OF get_interface
  4789. ; //Set_Interface 设置接口状态
  4790. ; void set_interface(void)
  4791. RSEG  ?PR?set_interface?CHAP_9
  4792. set_interface:
  4793. USING 0
  4794. ; SOURCE LINE # 1057
  4795. ; {
  4796. ; SOURCE LINE # 1058
  4797. ;  if(USB_Device_Request.wIndex == 0 && USB_Device_Request.wValue == 0x0100)
  4798. ; SOURCE LINE # 1059
  4799. MOV   R0,#LOW (USB_Device_Request+04H)
  4800. MOV   A,@R0
  4801. MOV   R6,A
  4802. INC   R0
  4803. MOV   A,@R0
  4804. MOV   R7,A
  4805. MOV   A,R7
  4806. ORL   A,R6
  4807. JNZ   ?C0195
  4808. MOV   R0,#LOW (USB_Device_Request+02H)
  4809. MOV   A,@R0
  4810. MOV   R6,A
  4811. INC   R0
  4812. MOV   A,@R0
  4813. MOV   R7,A
  4814. MOV   A,R7
  4815. CJNE  A,#00H,?C0195
  4816. MOV   A,R6
  4817. CJNE  A,#01H,?C0195
  4818. ;  USB_Device.BITS.Alter_Interface = 1;
  4819. ; SOURCE LINE # 1060
  4820. MOV   R7,USB_Device+03H
  4821. MOV   A,R7
  4822. ORL   A,#01H
  4823. MOV   USB_Device+03H,A
  4824. ?C0195:
  4825. ;  if(USB_Device_Request.wIndex == 0x0100 && USB_Device_Request.wValue == 0)
  4826. ; SOURCE LINE # 1062
  4827. MOV   R0,#LOW (USB_Device_Request+04H)
  4828. MOV   A,@R0
  4829. MOV   R6,A
  4830. INC   R0
  4831. MOV   A,@R0
  4832. MOV   R7,A
  4833. MOV   A,R7
  4834. CJNE  A,#00H,?C0196
  4835. MOV   A,R6
  4836. CJNE  A,#01H,?C0196
  4837. MOV   R0,#LOW (USB_Device_Request+02H)
  4838. MOV   A,@R0
  4839. MOV   R6,A
  4840. INC   R0
  4841. MOV   A,@R0
  4842. MOV   R7,A
  4843. MOV   A,R7
  4844. ORL   A,R6
  4845. JNZ   ?C0196
  4846. ;  USB_Device.BITS.Alter_Interface = 0;
  4847. ; SOURCE LINE # 1063
  4848. MOV   R7,USB_Device+03H
  4849. MOV   A,R7
  4850. ANL   A,#0FEH
  4851. MOV   USB_Device+03H,A
  4852. ?C0196:
  4853. ;  if(USB_Device_Request.wIndex == 0 && USB_Device_Request.wValue == 0)
  4854. ; SOURCE LINE # 1065
  4855. MOV   R0,#LOW (USB_Device_Request+04H)
  4856. MOV   A,@R0
  4857. MOV   R6,A
  4858. INC   R0
  4859. MOV   A,@R0
  4860. MOV   R7,A
  4861. MOV   A,R7
  4862. ORL   A,R6
  4863. JNZ   ?C0197
  4864. MOV   R0,#LOW (USB_Device_Request+02H)
  4865. MOV   A,@R0
  4866. MOV   R6,A
  4867. INC   R0
  4868. MOV   A,@R0
  4869. MOV   R7,A
  4870. MOV   A,R7
  4871. ORL   A,R6
  4872. JNZ   ?C0197
  4873. ;  USB_Device.BITS.Alter_Interface = 0;
  4874. ; SOURCE LINE # 1066
  4875. MOV   R7,USB_Device+03H
  4876. MOV   A,R7
  4877. ANL   A,#0FEH
  4878. MOV   USB_Device+03H,A
  4879. ?C0197:
  4880. ;  ep0in_ack();
  4881. ; SOURCE LINE # 1068
  4882. LCALL ep0in_ack
  4883. ; }
  4884. ; SOURCE LINE # 1069
  4885. RET  
  4886. ; END OF set_interface
  4887. ; //端点0IN状态响应
  4888. ; void ep0in_ack(void)
  4889. RSEG  ?PR?ep0in_ack?CHAP_9
  4890. ep0in_ack:
  4891. USING 0
  4892. ; SOURCE LINE # 1074
  4893. ; {
  4894. ; SOURCE LINE # 1075
  4895. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;
  4896. ; SOURCE LINE # 1076
  4897. MOV   DPTR,#D14_Cntrl_Reg+02CH
  4898. MOV   A,#01H
  4899. MOVX  @DPTR,A
  4900. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
  4901. ; SOURCE LINE # 1077
  4902. MOV   DPTR,#D14_Cntrl_Reg+028H
  4903. MOVX  A,@DPTR
  4904. MOV   R7,A
  4905. MOV   A,R7
  4906. ORL   A,#02H
  4907. MOV   R7,A
  4908. MOV   DPTR,#D14_Cntrl_Reg+028H
  4909. MOV   A,R7
  4910. MOVX  @DPTR,A
  4911. ;  wait_ep0tx();
  4912. ; SOURCE LINE # 1078
  4913. LCALL wait_ep0tx
  4914. ; }
  4915. ; SOURCE LINE # 1079
  4916. RET  
  4917. ; END OF ep0in_ack
  4918. ; //端点0IN状态响应
  4919. ; void wait_ep0tx(void)
  4920. RSEG  ?PR?wait_ep0tx?CHAP_9
  4921. wait_ep0tx:
  4922. USING 0
  4923. ; SOURCE LINE # 1082
  4924. ; {
  4925. ; SOURCE LINE # 1083
  4926. ?C0200:
  4927. ;  //end of status stage
  4928. ;  while(!USB_Int_Flag.BITS.EP0TX)
  4929. ; SOURCE LINE # 1085
  4930. MOV   R7,USB_Int_Flag+01H
  4931. MOV   A,R7
  4932. RRC   A
  4933. RRC   A
  4934. RRC   A
  4935. ANL   A,#01FH
  4936. MOV   R7,A
  4937. MOV   A,R7
  4938. JB    ACC.0,?C0201
  4939. ;  {
  4940. ; SOURCE LINE # 1086
  4941. ;  //读取ISP1581中断寄存器
  4942. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  4943. ; SOURCE LINE # 1088
  4944. MOV   DPTR,#D14_Cntrl_Reg+018H
  4945. MOVX  A,@DPTR
  4946. MOV   R4,A
  4947. INC   DPTR
  4948. MOVX  A,@DPTR
  4949. MOV   R5,A
  4950. INC   DPTR
  4951. MOVX  A,@DPTR
  4952. MOV   R6,A
  4953. INC   DPTR
  4954. MOVX  A,@DPTR
  4955. MOV   R7,A
  4956. MOV   A,USB_Int_Flag+03H
  4957. ORL   A,R7
  4958. MOV   USB_Int_Flag+03H,A
  4959. MOV   A,USB_Int_Flag+02H
  4960. ORL   A,R6
  4961. MOV   USB_Int_Flag+02H,A
  4962. MOV   A,USB_Int_Flag+01H
  4963. ORL   A,R5
  4964. MOV   USB_Int_Flag+01H,A
  4965. MOV   A,USB_Int_Flag
  4966. ORL   A,R4
  4967. MOV   USB_Int_Flag,A
  4968. ;  //回写ISP1581中断寄存器
  4969. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  4970. ; SOURCE LINE # 1090
  4971. MOV   R7,USB_Int_Flag+03H
  4972. MOV   R6,USB_Int_Flag+02H
  4973. MOV   R5,USB_Int_Flag+01H
  4974. MOV   R4,USB_Int_Flag
  4975. MOV   DPTR,#D14_Cntrl_Reg+018H
  4976. LCALL ?C?LSTXDATA
  4977. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  4978. ; SOURCE LINE # 1091
  4979. MOV   R7,USB_Int_Flag
  4980. MOV   A,R7
  4981. RRC   A
  4982. RRC   A
  4983. RRC   A
  4984. ANL   A,#01FH
  4985. MOV   R7,A
  4986. MOV   A,R7
  4987. JB    ACC.0,?C0204
  4988. MOV   R7,USB_Int_Flag
  4989. MOV   A,R7
  4990. JNB   ACC.0,?C0200
  4991. RET  
  4992. ;  return;
  4993. ;  }
  4994. ; SOURCE LINE # 1093
  4995. ?C0201:
  4996. ;  USB_Int_Flag.BITS.EP0TX = 0;
  4997. ; SOURCE LINE # 1094
  4998. MOV   R7,USB_Int_Flag+01H
  4999. MOV   A,R7
  5000. ANL   A,#0F7H
  5001. MOV   USB_Int_Flag+01H,A
  5002. ; }
  5003. ; SOURCE LINE # 1095
  5004. ?C0204:
  5005. RET  
  5006. ; END OF wait_ep0tx
  5007. ; //端点0OUT状态响应
  5008. ; void ep0out_ack(void)
  5009. RSEG  ?PR?ep0out_ack?CHAP_9
  5010. ep0out_ack:
  5011. USING 0
  5012. ; SOURCE LINE # 1098
  5013. ; {
  5014. ; SOURCE LINE # 1099
  5015. ;  //设置状态响应
  5016. ;  //acknowledge status stage
  5017. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
  5018. ; SOURCE LINE # 1102
  5019. MOV   DPTR,#D14_Cntrl_Reg+02CH
  5020. CLR   A
  5021. MOVX  @DPTR,A
  5022. ;  D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;
  5023. ; SOURCE LINE # 1103
  5024. MOV   DPTR,#D14_Cntrl_Reg+028H
  5025. MOVX  A,@DPTR
  5026. MOV   R7,A
  5027. MOV   A,R7
  5028. ORL   A,#02H
  5029. MOV   R7,A
  5030. MOV   DPTR,#D14_Cntrl_Reg+028H
  5031. MOV   A,R7
  5032. MOVX  @DPTR,A
  5033. ; // D14_Cntrl_Reg.D14_CONTROL_FUNCTION.VALUE = 2;
  5034. ;  wait_ep0rx();
  5035. ; SOURCE LINE # 1105
  5036. LCALL wait_ep0rx
  5037. ; }
  5038. ; SOURCE LINE # 1106
  5039. RET  
  5040. ; END OF ep0out_ack
  5041. ; //端点0OUT状态响应
  5042. ; void wait_ep0rx(void)
  5043. RSEG  ?PR?wait_ep0rx?CHAP_9
  5044. wait_ep0rx:
  5045. USING 0
  5046. ; SOURCE LINE # 1109
  5047. ; {
  5048. ; SOURCE LINE # 1110
  5049. ?C0206:
  5050. ;  while(!USB_Int_Flag.BITS.EP0RX)
  5051. ; SOURCE LINE # 1111
  5052. MOV   R7,USB_Int_Flag+01H
  5053. MOV   A,R7
  5054. RRC   A
  5055. RRC   A
  5056. ANL   A,#03FH
  5057. MOV   R7,A
  5058. MOV   A,R7
  5059. JB    ACC.0,?C0207
  5060. ;  {
  5061. ; SOURCE LINE # 1112
  5062. ;  //读取ISP1581中断寄存器
  5063. ;  USB_Int_Flag.VALUE |= D14_Cntrl_Reg.D14_INT.VALUE;
  5064. ; SOURCE LINE # 1114
  5065. MOV   DPTR,#D14_Cntrl_Reg+018H
  5066. MOVX  A,@DPTR
  5067. MOV   R4,A
  5068. INC   DPTR
  5069. MOVX  A,@DPTR
  5070. MOV   R5,A
  5071. INC   DPTR
  5072. MOVX  A,@DPTR
  5073. MOV   R6,A
  5074. INC   DPTR
  5075. MOVX  A,@DPTR
  5076. MOV   R7,A
  5077. MOV   A,USB_Int_Flag+03H
  5078. ORL   A,R7
  5079. MOV   USB_Int_Flag+03H,A
  5080. MOV   A,USB_Int_Flag+02H
  5081. ORL   A,R6
  5082. MOV   USB_Int_Flag+02H,A
  5083. MOV   A,USB_Int_Flag+01H
  5084. ORL   A,R5
  5085. MOV   USB_Int_Flag+01H,A
  5086. MOV   A,USB_Int_Flag
  5087. ORL   A,R4
  5088. MOV   USB_Int_Flag,A
  5089. ;  //回写ISP1581中断寄存器
  5090. ;  D14_Cntrl_Reg.D14_INT.VALUE = USB_Int_Flag.VALUE;
  5091. ; SOURCE LINE # 1116
  5092. MOV   R7,USB_Int_Flag+03H
  5093. MOV   R6,USB_Int_Flag+02H
  5094. MOV   R5,USB_Int_Flag+01H
  5095. MOV   R4,USB_Int_Flag
  5096. MOV   DPTR,#D14_Cntrl_Reg+018H
  5097. LCALL ?C?LSTXDATA
  5098. ;  if(USB_Int_Flag.BITS.SUSP || USB_Int_Flag.BITS.RESET)
  5099. ; SOURCE LINE # 1117
  5100. MOV   R7,USB_Int_Flag
  5101. MOV   A,R7
  5102. RRC   A
  5103. RRC   A
  5104. RRC   A
  5105. ANL   A,#01FH
  5106. MOV   R7,A
  5107. MOV   A,R7
  5108. JB    ACC.0,?C0210
  5109. MOV   R7,USB_Int_Flag
  5110. MOV   A,R7
  5111. JNB   ACC.0,?C0206
  5112. RET  
  5113. ;  return;
  5114. ;  }
  5115. ; SOURCE LINE # 1119
  5116. ?C0207:
  5117. ;  USB_Int_Flag.BITS.EP0RX = 0;
  5118. ; SOURCE LINE # 1120
  5119. MOV   R7,USB_Int_Flag+01H
  5120. MOV   A,R7
  5121. ANL   A,#0FBH
  5122. MOV   USB_Int_Flag+01H,A
  5123. ; }
  5124. ; SOURCE LINE # 1121
  5125. ?C0210:
  5126. RET  
  5127. ; END OF wait_ep0rx
  5128. ; unsigned char read_endpoint(unsigned char endp,unsigned int len,unsigned char *buf)
  5129. RSEG  ?PR?_read_endpoint?CHAP_9
  5130. _read_endpoint:
  5131. USING 0
  5132. ; SOURCE LINE # 1124
  5133. MOV   endp?1744,R7
  5134. MOV   len?1745,R4
  5135. MOV   len?1745+01H,R5
  5136. MOV   buf?1746,R3
  5137. MOV   buf?1746+01H,R2
  5138. MOV   buf?1746+02H,R1
  5139. ; {
  5140. ; SOURCE LINE # 1125
  5141. ;  D14_Cntrl_Reg.D14_ENDPT_INDEX = endp;
  5142. ; SOURCE LINE # 1126
  5143. MOV   DPTR,#D14_Cntrl_Reg+02CH
  5144. MOV   A,endp?1744
  5145. MOVX  @DPTR,A
  5146. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB =( unsigned char ) len;
  5147. ; SOURCE LINE # 1127
  5148. MOV   R7,len?1745+01H
  5149. MOV   DPTR,#D14_Cntrl_Reg+01CH
  5150. MOV   A,R7
  5151. MOVX  @DPTR,A
  5152. ;  D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = ( unsigned char ) (len>>8);
  5153. ; SOURCE LINE # 1128
  5154. MOV   A,len?1745
  5155. MOV   R7,A
  5156. MOV   R6,#00H
  5157. MOV   DPTR,#D14_Cntrl_Reg+01DH
  5158. MOV   A,R7
  5159. MOVX  @DPTR,A
  5160. ?C0211:
  5161. ;  while(len-- != 0)
  5162. ; SOURCE LINE # 1129
  5163. MOV   A,len?1745+01H
  5164. DEC   len?1745+01H
  5165. MOV   R6,len?1745
  5166. JNZ   ?C0261
  5167. DEC   len?1745
  5168. ?C0261:
  5169. MOV   R7,A
  5170. MOV   A,R7
  5171. ORL   A,R6
  5172. JZ    ?C0212
  5173. ;  {
  5174. ; SOURCE LINE # 1130
  5175. ;  *buf = D14_Cntrl_Reg.D14_DATA_PORT_LSB; //fill up FIFO
  5176. ; SOURCE LINE # 1131
  5177. MOV   DPTR,#D14_Cntrl_Reg+020H
  5178. MOVX  A,@DPTR
  5179. MOV   R7,A
  5180. MOV   R3,buf?1746
  5181. MOV   R2,buf?1746+01H
  5182. MOV   R1,buf?1746+02H
  5183. MOV   A,R7
  5184. LCALL ?C?CSTPTR
  5185. ;  buf++;
  5186. ; SOURCE LINE # 1132
  5187. MOV   A,#01H
  5188. ADD   A,buf?1746+02H
  5189. MOV   buf?1746+02H,A
  5190. CLR   A
  5191. ADDC  A,buf?1746+01H
  5192. MOV   buf?1746+01H,A
  5193. ;  }
  5194. ; SOURCE LINE # 1133
  5195. SJMP  ?C0211
  5196. ?C0212:
  5197. ;  return len;
  5198. ; SOURCE LINE # 1134
  5199. MOV   R7,len?1745+01H
  5200. ; }
  5201. ; SOURCE LINE # 1135
  5202. ?C0213:
  5203. RET  
  5204. ; END OF _read_endpoint
  5205. END