📄 bulkloop.lst
字号:
C51 COMPILER V6.12 BULKLOOP 08/03/2007 15:03:55 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE BULKLOOP
OBJECT MODULE PLACED IN .\bulkloop.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\bulkloop.c DEBUG OBJECTEXTEND
stmt level source
1 #pragma NOIV // Do not generate interrupt vectors
2 //-----------------------------------------------------------------------------
3 // File: bulkloop.c
4 // Contents: Hooks required to implement USB peripheral function.
5 //
6 // Copyright (c) 2000 Cypress Semiconductor All rights reserved
7 //-----------------------------------------------------------------------------
8 #include "fx2.h"
9 #include "fx2regs.h"
10 #include "fx2sdly.h" // SYNCDELAY macro
11
12 extern BOOL GotSUD; // Received setup data flag
13 extern BOOL Sleep;
14 extern BOOL Rwuen;
15 extern BOOL Selfpwr;
16
17 BYTE Configuration; // Current configuration
18 BYTE AlternateSetting; // Alternate settings
19
20 #define VR_NAKALL_ON 0xD0
21 #define VR_NAKALL_OFF 0xD1
22 //sbit PD_0 = IOD^0;
23 //sbit PD_1 = 0xB0^1;
24 //sbit PD_2 = 0xB0^2;
25 //sbit OED_0 = 0xB5 + 0;
26
27 //-----------------------------------------------------------------------------
28 // Task Dispatcher hooks
29 // The following hooks are called by the task dispatcher.
30 //-----------------------------------------------------------------------------
31
32 void TD_Init(void) // Called once at startup
33 {
34 1 // set the CPU clock to 48MHz
35 1 CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ;
36 1
37 1 // set the slave FIFO interface to 48MHz
38 1 IFCONFIG |= 0x40;
39 1 IFCONFIG &= 0xfc;
40 1
41 1 // Registers which require a synchronization delay, see section 15.14
42 1 // FIFORESET FIFOPINPOLAR
43 1 // INPKTEND OUTPKTEND
44 1 // EPxBCH:L REVCTL
45 1 // GPIFTCB3 GPIFTCB2
46 1 // GPIFTCB1 GPIFTCB0
47 1 // EPxFIFOPFH:L EPxAUTOINLENH:L
48 1 // EPxFIFOCFG EPxGPIFFLGSEL
49 1 // PINFLAGSxx EPxFIFOIRQ
50 1 // EPxFIFOIE GPIFIRQ
51 1 // GPIFIE GPIFADRH:L
52 1 // UDMACRCH:L EPxGPIFTRIG
53 1 // GPIFTRIG
54 1
55 1 // Note: The pre-REVE EPxGPIFTCH/L register are affected, as well...
C51 COMPILER V6.12 BULKLOOP 08/03/2007 15:03:55 PAGE 2
56 1 // ...these have been replaced by GPIFTC[B3:B0] registers
57 1
58 1 // default: all endpoints have their VALID bit set
59 1 // default: TYPE1 = 1 and TYPE0 = 0 --> BULK
60 1 // default: EP2 and EP4 DIR bits are 0 (OUT direction)
61 1 // default: EP6 and EP8 DIR bits are 1 (IN direction)
62 1 // default: EP2, EP4, EP6, and EP8 are double buffered
63 1
64 1 // we are just using the default values, yes this is not necessary...
65 1 EP1OUTCFG = 0xA0;
66 1 EP1INCFG = 0xA0;
67 1 SYNCDELAY; // see TRM section 15.14
68 1 EP2CFG = 0x22; //0xA2;
69 1 SYNCDELAY;
70 1 EP4CFG = 0xA0;
71 1 SYNCDELAY;
72 1 EP6CFG = 0x22; //0xE2;
73 1 SYNCDELAY;
74 1 EP8CFG = 0xE0;
75 1
76 1 // out endpoints do not come up armed
77 1
78 1 // since the defaults are double buffered we must write dummy byte counts twice
79 1 //SYNCDELAY;
80 1 //EP2BCL = 0x80; // arm EP2OUT by writing byte count w/skip.
81 1 //SYNCDELAY;
82 1 //EP2BCL = 0x80;
83 1 SYNCDELAY;
84 1 EP4BCL = 0x80; // arm EP4OUT by writing byte count w/skip.
85 1 SYNCDELAY;
86 1 EP4BCL = 0x80;
87 1
88 1 // enable dual autopointer feature
89 1 AUTOPTRSETUP |= 0x01;
90 1
91 1 Rwuen = TRUE; // Enable remote-wakeup
92 1
93 1 //EZUSB_InitI2C(); // Initialize EZ-USB I2C controller
94 1
95 1 //PA0~7 and PB7 used as Input GPIO , while PD0~7 and PB0~6 are used as Output GPIO
96 1 OED = 0xff;
97 1 OEB = 0x7f;
98 1 OEA = 0x00;
99 1
100 1 }
101
102
103 void TD_Poll(void) // Called repeatedly while the device is idle
104 {
105 1 BYTE GPIOPinSet = 0x00;
106 1 int i;
107 1 /*
108 1 if(!(EP2468STAT & bmEP2EMPTY))
109 1 { // check EP2 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
110 1 if(!(EP2468STAT & bmEP6FULL))
111 1 { // check EP6 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full
112 1 APTR1H = MSB( &EP2FIFOBUF );
113 1 APTR1L = LSB( &EP2FIFOBUF );
114 1
115 1 AUTOPTRH2 = MSB( &EP6FIFOBUF );
116 1 AUTOPTRL2 = LSB( &EP6FIFOBUF );
117 1
C51 COMPILER V6.12 BULKLOOP 08/03/2007 15:03:55 PAGE 3
118 1 count = (EP2BCH << 8) + EP2BCL;
119 1
120 1 // loop EP2OUT buffer data to EP6IN
121 1 for( i = 0x0000; i < count; i++ )
122 1 {
123 1 // setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s)
124 1 EXTAUTODAT2 = EXTAUTODAT1;
125 1 }
126 1 EP6BCH = EP2BCH;
127 1 SYNCDELAY;
128 1 EP6BCL = EP2BCL; // arm EP6IN
129 1 SYNCDELAY;
130 1 EP2BCL = 0x80; // re(arm) EP2OUT
131 1 }
132 1 }
133 1 */
134 1 if(!(EP2468STAT & bmEP4EMPTY))
135 1 { // check EP4 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
136 2
137 2 //if(!(EP2468STAT & bmEP8FULL))
138 2 { // check EP8 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full
139 3 if (EP4FIFOBUF[0x10] < 0x80) //output pins setting
140 3 {
141 4 GPIOPinSet = EP4FIFOBUF[0x10];
142 4 switch (GPIOPinSet)
143 4 {
144 5 case 0x00: //all clear 0
145 5 IOD = 0x00;
146 5 IOB = IOB & 0x80;
147 5 break;
148 5 case 0x01: //begin setting 1
149 5 IOD = IOD | 0x01;
150 5 break;
151 5 case 0x02:
152 5 IOD = IOD | 0x02;
153 5 break;
154 5 case 0x03:
155 5 IOD = IOD | 0x04;
156 5 break;
157 5 case 0x04:
158 5 IOD = IOD | 0x08;
159 5 break;
160 5 case 0x05:
161 5 IOD = IOD | 0x10;
162 5 break;
163 5 case 0x06:
164 5 IOD = IOD | 0x20;
165 5 break;
166 5 case 0x07:
167 5 IOD = IOD | 0x40;
168 5 break;
169 5 case 0x08:
170 5 IOD = IOD | 0x80;
171 5 break;
172 5 case 0x09:
173 5 IOB = IOB | 0x01;
174 5 break;
175 5 case 0x0a:
176 5 IOB = IOB | 0x02;
177 5 break;
178 5 case 0x0b:
179 5 IOB = IOB | 0x04;
C51 COMPILER V6.12 BULKLOOP 08/03/2007 15:03:55 PAGE 4
180 5 break;
181 5 case 0x0c:
182 5 IOB = IOB | 0x08;
183 5 break;
184 5 case 0x0d:
185 5 IOB = IOB | 0x10;
186 5 break;
187 5 case 0x0e:
188 5 IOB = IOB | 0x20;
189 5 break;
190 5 case 0x0f: //set 1 end;
191 5 IOB = IOB | 0x40;
192 5 break;
193 5 case 0x40: //all set 1, means all output
194 5 IOB = IOB | 0x7f;
195 5 IOD = 0xff;
196 5 break;
197 5 case 0x41: //begin clear 0;
198 5 IOD = IOD & 0xfe;
199 5 break;
200 5 case 0x42:
201 5 IOD = IOD & 0xfd;
202 5 break;
203 5 case 0x43:
204 5 IOD = IOD & 0xfb;
205 5 break;
206 5 case 0x44:
207 5 IOD = IOD & 0xf7;
208 5 break;
209 5 case 0x45:
210 5 IOD = IOD & 0xef;
211 5 break;
212 5 case 0x46:
213 5 IOD = IOD & 0xdf;
214 5 break;
215 5 case 0x47:
216 5 IOD = IOD & 0xbf;
217 5 break;
218 5 case 0x48:
219 5 IOD = IOD & 0x7f;
220 5 break;
221 5 case 0x49:
222 5 IOB = IOB & 0x7e;
223 5 break;
224 5 case 0x4a:
225 5 IOB = IOB & 0x7d;
226 5 break;
227 5 case 0x4b:
228 5 IOB = IOB & 0x7b;
229 5 break;
230 5 case 0x4c:
231 5 IOB = IOB & 0x77;
232 5 break;
233 5 case 0x4d:
234 5 IOB = IOB & 0x6f;
235 5 break;
236 5 case 0x4e:
237 5 IOB = IOB & 0x5f;
238 5 break;
239 5 case 0x4f:
240 5 IOB = IOB & 0x3f;
241 5 break;
C51 COMPILER V6.12 BULKLOOP 08/03/2007 15:03:55 PAGE 5
242 5 default:
243 5 break;
244 5 }
245 4 for (i=0;i<64;i+=2)
246 4 {
247 5 EP8FIFOBUF[i] = IOD;
248 5 EP8FIFOBUF[i+1] = IOB;
249 5 }
250 4 EP8BCH = 0x0;
251 4 SYNCDELAY;
252 4 EP8BCL = 64; // arm EP8IN
253 4 SYNCDELAY;
254 4 }
255 3 else //input pins setting
256 3 {
257 4 GPIOPinSet = EP4FIFOBUF[0x10];
258 4 switch (GPIOPinSet)
259 4 {
260 5 case 0x80: //all clear 0
261 5 IOA = 0x00;
262 5 IOB = IOB & 0x7f;
263 5 break;
264 5 case 0x81: //begin to set 1 (input pins)
265 5 IOA = IOA | 0x01;
266 5 break;
267 5 case 0x82:
268 5 IOA = IOA | 0x02;
269 5 break;
270 5 case 0x83:
271 5 IOA = IOA | 0x04;
272 5 break;
273 5 case 0x84:
274 5 IOA = IOA | 0x08;
275 5 break;
276 5 case 0x85:
277 5 IOA = IOA | 0x10;
278 5 break;
279 5 case 0x86:
280 5 IOA = IOA | 0x20;
281 5 break;
282 5 case 0x87:
283 5 IOA = IOA | 0x40;
284 5 break;
285 5 case 0x88:
286 5 IOA = IOA | 0x80;
287 5 break;
288 5 case 0x89: //set 1 end;
289 5 IOB = IOB | 0x80;
290 5 break;
291 5 case 0xc0: //all set 1
292 5 IOA = 0xff;
293 5 IOB = IOB | 0x80;
294 5 break;
295 5 case 0xc1: //begin clear 0
296 5 IOA = IOA & 0xfe;
297 5 break;
298 5 case 0xc2:
299 5 IOA = IOA & 0xfd;
300 5 break;
301 5 case 0xc3:
302 5 IOA = IOA & 0xfb;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -