?? usb_task.lst
字號:
C51 COMPILER V7.00 USB_TASK 04/28/2004 09:31:57 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE USB_TASK
OBJECT MODULE PLACED IN C:\Documents and Settings\lvxc\桌面\AA\usb_task.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE modules\mass\usb_task.c OPTIMIZE(7,SPEED) BROWSE INCDIR(.\modules\system;.\
-;.\;.\lib_refd) DEFINE(KEIL) DEBUG OBJECTEXTEND PRINT(.\usb_task.lst) OBJECT(C:\Documents and Settings\lvxc\桌面\AA\usb_
-task.obj)
stmt level source
1 /*C**************************************************************************
2 * NAME: usb_task.c
3 *----------------------------------------------------------------------------
4 * Copyright (c) 2003 Atmel.
5 *----------------------------------------------------------------------------
6 * RELEASE: snd1c-refd-nf-4_0_3
7 * REVISION: 1.16
8 *----------------------------------------------------------------------------
9 * PURPOSE:
10 * This file contains the USB task and attached routines
11 *
12 * NOTES:
13 * Global Variables:
14 * - gl_sbc_wr_protect: write protect flag for SCSI disk
15 *****************************************************************************/
16
17 /*_____ I N C L U D E S ____________________________________________________*/
18
19 #include "config.h" /* system configuration */
20 #include "lib_mcu\usb\usb_drv.h" /* usb driver definition */
21 #include "lib_mcu\kbd\kbd_drv.h" /* Keyboard driver definition */
22 #include "lib_mcu\clock\clock.h" /* clock definition */
23 #include "lib_mcu\wdt\wdt_drv.h"
24 #include "modules\display\disp.h" /* display definition */
25 #include "modules\mode\mode_task.h" /* mode task definition */
26 #include "modules\mem\hard.h" /* low level function definition */
27 #include "lib_storage\sbc.h" /* SBC commands definition */
28 #include "usb_task.h" /* usb task definition */
29
30
31 /*_____ M A C R O S ________________________________________________________*/
32
33
34 /*_____ D E F I N I T I O N ________________________________________________*/
35
36 extern bdata bit gl_sbc_wr_protect; /* mass storage write protected */
37
38 static bdata bit disconnected;
39 static idata Byte dCBWTag[4];
40
41 static bdata bit no_data_phase;
42
43 static bdata bit ms_multiple_drive; /* TRUE: multiple drive support */
44
45 static idata Byte usb_resume_counter;
46
47 bdata bit bmCBWFlag7; /* Data OUT (0) or Data In (1) */
48 bdata bit status_ready;
49 data Byte status;
50 data Uint32 dCBWDataTransferLength; /* usb data message length */
51 bdata bit rx_bank;
52
53
C51 COMPILER V7.00 USB_TASK 04/28/2004 09:31:57 PAGE 2
54 /*_____ D E C L A R A T I O N ______________________________________________*/
55
56 #if MEM_CHIP_TYPE != CHIP_NONE
57 extern void Sbc_chip_init (void); /* chip memory SCSI driver init */
58 extern void Sbc_command_chip (void); /* chip memory SCSI command browser */
59 #endif
60 #if MEM_CARD_TYPE != CARD_NONE
extern void Sbc_card_init (void); /* card memory SCSI driver init */
extern void Sbc_command_card (void); /* card memory SCSI command browser */
#endif
64
65 static void usb_mass_storage_cbw (void);
66 static void usb_mass_storage_csw (void);
67
68
69 /*F**************************************************************************
70 * NAME: usb_task_init
71 *----------------------------------------------------------------------------
72 * PARAMS:
73 *
74 * return:
75 *----------------------------------------------------------------------------
76 * PURPOSE:
77 * USB task initialization
78 *----------------------------------------------------------------------------
79 * EXAMPLE:
80 *----------------------------------------------------------------------------
81 * NOTE:
82 *----------------------------------------------------------------------------
83 * REQUIREMENTS:
84 *****************************************************************************/
85 void usb_task_init (void)
86 {
87 1 disconnected = 0;
88 1 clock_usb_init(); /* for suspend detection */
89 1 usb_init();
90 1 }
91
92
93 /*F**************************************************************************
94 * NAME: usb_task
95 *----------------------------------------------------------------------------
96 * PARAMS:
97 *
98 * return:
99 *----------------------------------------------------------------------------
100 * PURPOSE:
101 * USB task
102 *----------------------------------------------------------------------------
103 * EXAMPLE:
104 *----------------------------------------------------------------------------
105 * NOTE:
106 * In order to avoid spurious connection, resume is done after the resume
107 * event has been detected at least #USB_WAIT_NB_RESUME times.
108 *----------------------------------------------------------------------------
109 * REQUIREMENTS:
110 *****************************************************************************/
111 void usb_task (void)
112 {
113 1 if (Usb_suspend()) /* -- if suspend flag -- */
114 1 {
115 2 if (disconnected == 0)
C51 COMPILER V7.00 USB_TASK 04/28/2004 09:31:57 PAGE 3
116 2 {
117 3 disconnected = 1;
118 3 clock_disable();
119 3 mode_exit_download();
120 3 usb_resume_counter = USB_WAIT_NB_RESUME;
121 3 }
122 2
123 2 if (Usb_resume()) /* check if resume */
124 2 {
125 3 if (usb_resume_counter == 0)
126 3 {
127 4 mode_set_download();
128 4 clock_usb_init();
129 4 print_mode_mass(); /* display mass storage icon */
130 4 print_screen(MASS_SCREEN); /* display storage screen */
131 4 disconnected = 0;
132 4 Usb_clear_SPINT();
133 4 Usb_clear_WUPCPU();
134 4 Usb_clear_SOFINT();
135 4 }
136 3 else
137 3 {
138 4 Usb_clear_WUPCPU();
139 4 Usb_clear_SOFINT();
140 4 usb_resume_counter--;
141 4 }
142 3 }
143 2 }
144 1 else
145 1 {
146 2 if (Usb_reset()) /* if end of reset */
147 2 {
148 3 Usb_enable_SPINT(); /* Suspend interrupt enable */
149 3 disconnected = 0;
150 3 Usb_clear_rx_bank();
151 3 Usb_clear_WUPCPU();
152 3 Usb_clear_SPINT();
153 3 Usb_clear_EORINT();
154 3 ms_multiple_drive = FALSE; /* multiple disk support init */
155 3 gl_sbc_wr_protect = Kbd_key_locked(); /* set write protect flag */
156 3 Sbc_chip_init(); /* on-board memory SCSI driver init */
157 3 Sbc_card_init(); /* card memory SCSI driver init */
158 3
159 3
160 3 }
161 2
162 2 if (UEPINT != 0) /* new command */
163 2 {
164 3 Usb_select_ep(EP_CONTROL);
165 3 if (Usb_setup_received())
166 3 {
167 4 usb_enumeration_process();
168 4 }
169 3 Usb_select_ep(EP_OUT);
170 3 if (Usb_rx_complete())
171 3 {
172 4 gl_sbc_wr_protect = Kbd_key_locked(); /* set write protect flag */
173 4 Usb_enable_int();
174 4 usb_mass_storage_cbw();
175 4 usb_mass_storage_csw();
176 4 Usb_disable_int();
177 4 }
C51 COMPILER V7.00 USB_TASK 04/28/2004 09:31:57 PAGE 4
178 3 }
179 2 }
180 1 }
181
182
183 /*F**************************************************************************
184 * NAME: usb_mass_storage_cbw
185 *----------------------------------------------------------------------------
186 * PARAMS:
187 *
188 * return:
189 *----------------------------------------------------------------------------
190 * PURPOSE:
191 * Command Block Wrapper management
192 *----------------------------------------------------------------------------
193 * EXAMPLE:
194 *----------------------------------------------------------------------------
195 * NOTE:
196 *----------------------------------------------------------------------------
197 * REQUIREMENTS:
198 *****************************************************************************/
199 void usb_mass_storage_cbw (void)
200 {
201 1 bit cbw_error;
202 1
203 1 cbw_error = FALSE;
204 1 Usb_select_ep(EP_OUT);
205 1 if (0x55 != Usb_read_byte())
206 1 {
207 2 cbw_error = TRUE;
208 2 }
209 1 if (0x53 != Usb_read_byte())
210 1 {
211 2 cbw_error = TRUE;
212 2 }
213 1 if (0x42 != Usb_read_byte())
214 1 {
215 2 cbw_error = TRUE;
216 2 }
217 1 if (0x43 != Usb_read_byte()) /* check if dCBWSignature is correct */
218 1 {
219 2 cbw_error = TRUE;
220 2 }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -