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