📄 usb_task.lst
字号:
C51 COMPILER V7.50 USB_TASK 02/16/2009 09:59:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE USB_TASK
OBJECT MODULE PLACED IN usb_task.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE modules\mass\usb_task.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\usb_task.ls
-t) OBJECT(usb_task.obj)
line level source
1
2 #include "config.h" /* system configuration */
3 #include "lib_mcu\usb\usb_drv.h" /* usb driver definition */
4 #include "lib_mcu\clock\clock.h" /* clock definition */
5 #include "lib_storage\sbc.h" /* SBC commands definition */
6 #include "usb_task.h" /* usb task definition */
7 #include "lib_mcu\lcd\lcd_drv.h"
8 #include "lib_mcu\serial\ser_drv.h"
9
10
11 ////////////////////////////////////////////////////////////////////////////////////////
12
13 extern bdata bit gl_sbc_wr_protect; /* mass storage write protected */
14 extern bdata bit disconnected;
15 static idata Byte dCBWTag[4];
16 static bdata bit no_data_phase;
17 static bdata bit ms_multiple_drive; /* TRUE: multiple drive support */
18 static idata Byte usb_resume_counter;
19
20 bdata bit bmCBWFlag7; /* Data OUT (0) or Data In (1) */
21 bdata bit status_ready;
22 data Byte status;
23 data Uint32 dCBWDataTransferLength; /* usb data message length */
24 bdata bit rx_bank;
25
26
27
28 extern void Sbc_chip_init (void); /* chip memory SCSI driver init */
29 extern void Sbc_command_chip (void); /* chip memory SCSI command browser */
30
31
32 static void usb_mass_storage_cbw (void);
33 static void usb_mass_storage_csw (void);
34
35
36 /*F**************************************************************************
37 * NAME: usb_task_init
38 *----------------------------------------------------------------------------
39 * PARAMS:
40 *
41 * return:
42 *----------------------------------------------------------------------------
43 * PURPOSE:
44 * USB task initialization
45 *----------------------------------------------------------------------------
46 * EXAMPLE:
47 *----------------------------------------------------------------------------
48 * NOTE:
49 *----------------------------------------------------------------------------
50 * REQUIREMENTS:
51 *****************************************************************************/
52 void usb_task_init (void)
53 {
54 1 disconnected = 0;
C51 COMPILER V7.50 USB_TASK 02/16/2009 09:59:55 PAGE 2
55 1 clock_usb_init(); /* for suspend detection */
56 1 usb_init();
57 1 }
58
59
60 /*F**************************************************************************
61 * NAME: usb_task
62 *----------------------------------------------------------------------------
63 * PARAMS:
64 *
65 * return:
66 *----------------------------------------------------------------------------
67 * PURPOSE:
68 * USB task
69 *----------------------------------------------------------------------------
70 * EXAMPLE:
71 *----------------------------------------------------------------------------
72 * NOTE:
73 * In order to avoid spurious connection, resume is done after the resume
74 * event has been detected at least #USB_WAIT_NB_RESUME times.
75 *----------------------------------------------------------------------------
76 * REQUIREMENTS:
77 *****************************************************************************/
78 void usb_task (void)
79 {
80 1 if (Usb_suspend()) /* -- if suspend flag -- */
81 1 {
82 2 if (disconnected == 0)
83 2 {
84 3 disconnected = 1;
85 3 clock_disable();
86 3 // mode_exit_download();
87 3 usb_resume_counter = USB_WAIT_NB_RESUME;
88 3
89 3 }
90 2
91 2 if (Usb_resume()) /* check if resume */
92 2 {
93 3 if (usb_resume_counter == 0)
94 3 {
95 4 //mode_set_download();
96 4 clock_usb_init();
97 4 // print_mode_mass(); /* display mass storage icon */
98 4 // print_screen(MASS_SCREEN); /* display storage screen */
99 4 disconnected = 0;
100 4 Usb_clear_SPINT();
101 4 Usb_clear_WUPCPU();
102 4 Usb_clear_SOFINT();
103 4 }
104 3 else
105 3 {
106 4 Usb_clear_WUPCPU();
107 4 Usb_clear_SOFINT();
108 4 usb_resume_counter--;
109 4 }
110 3 }
111 2 }
112 1
113 1 else
114 1 {
115 2 if (Usb_reset()) /* if end of reset */
116 2 {
C51 COMPILER V7.50 USB_TASK 02/16/2009 09:59:55 PAGE 3
117 3 Usb_enable_SPINT(); /* Suspend interrupt enable */
118 3 disconnected = 0;
119 3 Usb_clear_rx_bank();
120 3 Usb_clear_WUPCPU();
121 3 Usb_clear_SPINT();
122 3 Usb_clear_EORINT();
123 3 //gl_sbc_wr_protect = Kbd_key_locked(); /* set write protect flag */
124 3 Sbc_chip_init(); /* on-board memory SCSI driver init */
125 3 }
126 2
127 2 if (UEPINT != 0) /* new command */
128 2 {
129 3 Usb_select_ep(EP_CONTROL);
130 3 if (Usb_setup_received())
131 3 {
132 4 usb_enumeration_process();
133 4 }
134 3 Usb_select_ep(EP_OUT);
135 3 if (Usb_rx_complete())
136 3 {
137 4 //gl_sbc_wr_protect = Kbd_key_locked(); /* set write protect flag */
138 4 Usb_enable_int();
139 4 usb_mass_storage_cbw();
140 4 usb_mass_storage_csw();
141 4 Usb_disable_int();
142 4 }
143 3 }
144 2 }
145 1 }
146
147
148 /*F**************************************************************************
149 * NAME: usb_mass_storage_cbw
150 *----------------------------------------------------------------------------
151 * PARAMS:
152 *
153 * return:
154 *----------------------------------------------------------------------------
155 * PURPOSE:
156 * Command Block Wrapper management
157 *----------------------------------------------------------------------------
158 * EXAMPLE:
159 *----------------------------------------------------------------------------
160 * NOTE:
161 *----------------------------------------------------------------------------
162 * REQUIREMENTS:
163 *****************************************************************************/
164 void usb_mass_storage_cbw (void)
165 {
166 1 bit cbw_error;
167 1
168 1 cbw_error = FALSE;
169 1 Usb_select_ep(EP_OUT);
170 1 if (0x55 != Usb_read_byte())
171 1 {
172 2 cbw_error = TRUE;
173 2 }
174 1 if (0x53 != Usb_read_byte())
175 1 {
176 2 cbw_error = TRUE;
177 2 }
178 1 if (0x42 != Usb_read_byte())
C51 COMPILER V7.50 USB_TASK 02/16/2009 09:59:55 PAGE 4
179 1 {
180 2 cbw_error = TRUE;
181 2 }
182 1 if (0x43 != Usb_read_byte()) /* check if dCBWSignature is correct */
183 1 {
184 2 cbw_error = TRUE;
185 2 }
186 1
187 1 dCBWTag[0] = Usb_read_byte(); /* Store Tag to be repeated in CSW */
188 1 dCBWTag[1] = Usb_read_byte();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -