📄 wdf_cypress_lib.lst
字号:
C51 COMPILER V7.06 WDF_CYPRESS_LIB 02/13/2008 21:37:10 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE WDF_CYPRESS_LIB
OBJECT MODULE PLACED IN wdf_cypress_lib.OBJ
COMPILER INVOKED BY: C:\Keil\c51\bin\c51.exe wdf_cypress_lib.c DB OE CODE MODDP2 NOIV DF(FX2LP) DF(FX2LP_NEW)
stmt level source
1 /******************************************************************************
2 * File: wdf_cypress_lib.c *
3 * *
4 * Contents: Implementation of firmware library functions for the *
5 * Cypress FX2 CY7C68013 and FX2LP CY7C68013A development boards *
6 * *
7 * Code was generated by DriverWizard v8.02 - http://www.jungo.com *
8 * Copyright (c) 2008 Jungo Ltd. http://www.jungo.com *
9 *******************************************************************************/
10
11 #include "wdf_cypress_lib.h"
12
13 #define READ TRUE
14 #define WRITE FALSE
15
16 static void DataToggleReset(int ep, EP_DIR dir)
17 {
18 1 // TOGCTL.3..0 - Ep number (1, 2, 4, 6 or 8)
19 1 // TOGCTL.4 - Ep direction
20 1 // TOGCTL.5 - Clear bit
21 1 TOGCTL = (ep | (dir << 4));
22 1 TOGCTL = (ep | (dir << 4) | bmBIT5);
23 1 }
24
25 void WDF_EP1INConfig(EP_TYPE type)
26 {
27 1 EP1INCFG = bmBIT7; // Enable EP1 In: EP1INCFG.7
28 1 EP1INCFG |= (type << 4); // EP1IN type: EP1INCFG.5..4
29 1 DataToggleReset(0x1, DIR_IN);
30 1 }
31
32 void WDF_EP1OUTConfig(EP_TYPE type)
33 {
34 1 EP1OUTCFG = bmBIT7; // Enable EP1 Out: EP1OUTCFG.7
35 1 EP1OUTCFG |= (type << 4); // EP1OUT type: EP1OUTCFG.5..4
36 1 DataToggleReset(0x1, DIR_OUT);
37 1 }
38
39 void WDF_EP2Config(EP_DIR dir, EP_TYPE type, EP_BUFFERING buffering, int size,
40 int nPacketPerMF)
41 {
42 1 EP2CFG = bmBIT7; // Enable EP2: EP2CFG.7
43 1 DELAY;
44 1 EP2CFG |= (dir << 6); // EP2 direction: EP2CFG.6
45 1 DELAY;
46 1 EP2CFG |= (type << 4); // EP2 type: EP2CFG.5..4
47 1 DELAY;
48 1 EP2CFG |= (size == 1024 ? bmBIT3 : 0); // EP2 size: EP2CFG.3
49 1 DELAY;
50 1 EP2CFG |= buffering; // EP2 buffering method:EP2CFG.1..0
51 1 DELAY;
52 1
53 1 if (type == ISOCHRONOUS && dir == DIR_IN)
54 1 {
55 2 EP2ISOINPKTS = bmBIT7; // Automatically send zero length packet when there is
C51 COMPILER V7.06 WDF_CYPRESS_LIB 02/13/2008 21:37:10 PAGE 2
56 2 // no data in EP FIFO
57 2 EP2ISOINPKTS |= nPacketPerMF; // Packet Per Microframe: EP2ISOINPKTS.1..0
58 2 DELAY;
59 2 }
60 1 DataToggleReset(0x2, dir);
61 1 }
62
63 void WDF_EP4Config(EP_DIR dir, EP_TYPE type)
64 {
65 1 EP4CFG = bmBIT7; // Enable EP4: EP4CFG.7
66 1 EP4CFG |= (dir << 6); // EP4 direction: EP4CFG.6
67 1 EP4CFG |= (type << 4); // EP4 type: EP4CFG.5..4
68 1
69 1 if (type == ISOCHRONOUS && dir == DIR_IN)
70 1 {
71 2 EP4ISOINPKTS = bmBIT7; // Automatically send zero length packet when there is
72 2 // no data in EP FIFO
73 2 DELAY;
74 2 }
75 1 DataToggleReset(0x4, dir);
76 1 }
77
78 void WDF_EP6Config(EP_DIR dir, EP_TYPE type, EP_BUFFERING buffering, int size,
79 int nPacketPerMF)
80 {
81 1 EP6CFG = bmBIT7; // Enable EP6: EP6CFG.7
82 1 DELAY;
83 1 EP6CFG |= (dir << 6); // EP6 direction: EP6CFG.6
84 1 DELAY;
85 1 EP6CFG |= (type << 4); // EP6 type: EP6CFG.5..4
86 1 DELAY;
87 1 EP6CFG |= (size == 1024 ? bmBIT3 : 0); // EP6 size: EP6CFG.3
88 1 DELAY;
89 1 EP6CFG |= buffering; // EP6 buffering method:EP6CFG.1..0
90 1 DELAY;
91 1
92 1 if (type == ISOCHRONOUS && dir == DIR_IN)
93 1 {
94 2 DELAY;
95 2 EP6ISOINPKTS = bmBIT7; // Automatically send zero length packet when there is
96 2 // no data in EP FIFO
97 2 EP6ISOINPKTS |= nPacketPerMF; // Packet Per Microframe: EP6ISOINPKTS.1..0
98 2 DELAY;
99 2 }
100 1 DataToggleReset(0x6, dir);
101 1 }
102
103 void WDF_EP8Config(EP_DIR dir, EP_TYPE type)
104 {
105 1 EP8CFG = bmBIT7; // Enable EP8: EP8CFG.7
106 1 EP8CFG |= (dir << 6); // EP8 direction: EP8CFG.6
107 1 EP8CFG |= (type << 4); // EP8 type: EP8CFG.5..4
108 1
109 1 if (type == ISOCHRONOUS && dir == DIR_IN)
110 1 {
111 2 EP8ISOINPKTS = bmBIT7; // Automatically send zero length packet when there is
112 2 // no data in EP FIFO
113 2 DELAY;
114 2 }
115 1 DataToggleReset(0x8, dir);
116 1 }
117
C51 COMPILER V7.06 WDF_CYPRESS_LIB 02/13/2008 21:37:10 PAGE 3
118 void WDF_FIFOReset (int ep)
119 {
120 1 FIFORESET = 0x80; // NAK all transfers from the host
121 1 DELAY;
122 1 FIFORESET = ep; // Reset EP FIFO
123 1 DELAY;
124 1 FIFORESET = 0x00; // Restore normal operation
125 1 DELAY;
126 1 }
127
128 void WDF_SkipOutPacket(int ep)
129 {
130 1 switch (ep)
131 1 {
132 2 case 0x1:
133 2 DELAY;
134 2 EP1OUTBC = 0x0;
135 2 break;
136 2 case 0x2:
137 2 DELAY;
138 2 EP2BCL = 0x80; // arm EP2OUT by writing byte count w/skip.
139 2 break;
140 2 case 0x4:
141 2 DELAY;
142 2 EP4BCL = 0x80; // arm EP4OUT by writing byte count w/skip.
143 2 break;
144 2 case 0x6:
145 2 DELAY;
146 2 EP6BCL = 0x80; // arm EP6OUT by writing byte count w/skip.
147 2 break;
148 2 case 0x8:
149 2 DELAY;
150 2 EP8BCL = 0x80; // arm EP8OUT by writing byte count w/skip.
151 2 break;
152 2 }
153 1 }
154
155 static void WDF_FIFOAccess(int ep, BYTE buf[], int size, BOOL fIsRead)
156 {
157 1 int i;
158 1 BYTE *epFifo;
159 1
160 1 switch (ep)
161 1 {
162 2 case 0x1:
163 2 epFifo = EP1OUTBUF;
164 2 break;
165 2 case 0x81:
166 2 epFifo = EP1INBUF;
167 2 break;
168 2 case 0x2:
169 2 case 0x82:
170 2 epFifo = EP2FIFOBUF;
171 2 break;
172 2 case 0x4:
173 2 case 0x84:
174 2 epFifo = EP4FIFOBUF;
175 2 break;
176 2 case 0x6:
177 2 case 0x86:
178 2 epFifo = EP6FIFOBUF;
179 2 break;
C51 COMPILER V7.06 WDF_CYPRESS_LIB 02/13/2008 21:37:10 PAGE 4
180 2 case 0x8:
181 2 case 0x88:
182 2 epFifo = EP8FIFOBUF;
183 2 break;
184 2 }
185 1
186 1 APTR1H = MSB(buf);
187 1 APTR1L = LSB(buf);
188 1
189 1 AUTOPTRH2 = MSB(epFifo);
190 1 AUTOPTRL2 = LSB(epFifo);
191 1
192 1 for(i=0; i<size; i++)
193 1 {
194 2 if (fIsRead)
195 2 EXTAUTODAT1 = EXTAUTODAT2;
196 2 else
197 2 EXTAUTODAT2 = EXTAUTODAT1;
198 2 }
199 1 }
200
201 void WDF_FIFOWrite(int ep, BYTE buf[], int size)
202 {
203 1 WDF_FIFOAccess(ep, buf, size, WRITE);
204 1 }
205
206 void WDF_FIFORead(int ep, BYTE buf[], int size)
207 {
208 1 WDF_FIFOAccess(ep, buf, size, READ);
209 1 }
210
211 BOOL WDF_FIFOEmpty(int ep)
212 {
213 1 BOOL ret;
214 1
215 1 switch (ep)
216 1 {
217 2 case 0x1:
218 2 ret = (EP1OUTCS & bmEPBUSY);
219 2 break;
220 2 case 0x81:
221 2 ret = !(EP1INCS & bmEPBUSY);
222 2 break;
223 2 case 0x2:
224 2 case 0x82:
225 2 ret = (EP2468STAT & bmEP2EMPTY);
226 2 break;
227 2 case 0x4:
228 2 case 0x84:
229 2 ret = (EP2468STAT & bmEP4EMPTY);
230 2 break;
231 2 case 0x6:
232 2 case 0x86:
233 2 ret = (EP2468STAT & bmEP6EMPTY);
234 2 break;
235 2 case 0x8:
236 2 case 0x88:
237 2 ret = (EP2468STAT & bmEP8EMPTY);
238 2 break;
239 2 }
240 1 return ret;
241 1 }
C51 COMPILER V7.06 WDF_CYPRESS_LIB 02/13/2008 21:37:10 PAGE 5
242
243 BOOL WDF_FIFOFull(int ep)
244 {
245 1 BOOL ret;
246 1
247 1 switch (ep)
248 1 {
249 2 case 0x1:
250 2 ret = !(EP1OUTCS & bmEPBUSY);
251 2 break;
252 2 case 0x81:
253 2 ret = (EP1INCS & bmEPBUSY);
254 2 break;
255 2 case 0x2:
256 2 case 0x82:
257 2 ret = (EP2468STAT & bmEP2FULL);
258 2 break;
259 2 case 0x4:
260 2 case 0x84:
261 2 ret = (EP2468STAT & bmEP4FULL);
262 2 break;
263 2 case 0x6:
264 2 case 0x86:
265 2 ret = (EP2468STAT & bmEP6FULL);
266 2 break;
267 2 case 0x8:
268 2 case 0x88:
269 2 ret = (EP2468STAT & bmEP8FULL);
270 2 break;
271 2 }
272 1 return ret;
273 1 }
274
275 void WDF_SetEPByteCount(int ep, WORD bytes_count)
276 {
277 1 BYTE *epBytesCntLow, *epBytesCntHigh;
278 1
279 1 switch (ep)
280 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -