📄 d12ci.lst
字号:
110 1 c = inportb(D12_DATA);
111 1
112 1 if(bEPPflags.bits.in_isr == 0)
113 1 ENABLE;
114 1
115 1 return c;
116 1 }
117
118 unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
119 {
120 1 outportb(D12_COMMAND, 0x40 + bEndp);
121 1 return inportb(D12_DATA);
122 1 }
123
124 unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
125 {
126 1 unsigned char c;
127 1
128 1 if(bEPPflags.bits.in_isr == 0)
129 1 DISABLE;
130 1
131 1 outportb(D12_COMMAND, 0x80 + bEndp);
132 1 c = inportb(D12_DATA);
133 1
134 1 if(bEPPflags.bits.in_isr == 0)
135 1 ENABLE;
C51 COMPILER V8.02 D12CI 07/27/2007 11:10:49 PAGE 11
136 1
137 1 return c;
138 1 }
139
140 void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
141 {
142 1 if(bEPPflags.bits.in_isr == 0)
143 1 DISABLE;
144 1
145 1 outportb(D12_COMMAND, 0x40 + bEndp);
146 1 outportb(D12_DATA, bStalled);
147 1
148 1 if(bEPPflags.bits.in_isr == 0)
149 1 ENABLE;
150 1 }
151
152 void D12_SendResume(void)
153 {
154 1 outportb(D12_COMMAND, 0xF6);
155 1 }
156
157 unsigned short D12_ReadCurrentFrameNumber(void)
158 {
159 1 unsigned short i,j;
160 1
161 1 if(bEPPflags.bits.in_isr == 0)
162 1 DISABLE;
163 1
164 1 outportb(D12_COMMAND, 0xF5);
165 1 i= inportb(D12_DATA);
166 1 j = inportb(D12_DATA);
167 1
168 1 i += (j<<8);
169 1
170 1 if(bEPPflags.bits.in_isr == 0)
171 1 ENABLE;
172 1
173 1 return i;
174 1 }
175
176 unsigned short D12_ReadChipID(void)
177 {
178 1 unsigned short i,j;
179 1
180 1 if(bEPPflags.bits.in_isr == 0)
181 1 DISABLE;
182 1
183 1 outportb(portbase+D12_COMMAND, 0xFD);
184 1 i=inportb(portbase+D12_DATA);
185 1 j=inportb(portbase+D12_DATA);
186 1 i += (j<<8);
187 1
188 1 if(bEPPflags.bits.in_isr == 0)
189 1 ENABLE;
190 1
191 1 return i;
192 1 }
193
194 unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char * buf, unsigned char len)
195 {
196 1 unsigned char i, j;
197 1
C51 COMPILER V8.02 D12CI 07/27/2007 11:10:49 PAGE 12
198 1 if(bEPPflags.bits.in_isr == 0)
199 1 DISABLE;
200 1
201 1 outportb(D12_COMMAND, endp);
202 1 if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {
203 2 if(bEPPflags.bits.in_isr == 0)
204 2 ENABLE;
205 2 return 0;
206 2 }
207 1
208 1 outportb(D12_COMMAND, 0xF0);
209 1 j = inportb(D12_DATA);
210 1 j = inportb(D12_DATA);
211 1
212 1 if(j > len)
213 1 j = len;
214 1
215 1 for(i=0; i<j; i++)
216 1 *(buf+i) = inportb(D12_DATA);
217 1
218 1 outportb(D12_COMMAND, 0xF2);
219 1
220 1 if(bEPPflags.bits.in_isr == 0)
221 1 ENABLE;
222 1
223 1 return j;
224 1 }
225
226 // D12_ReadMainEndpoint() added by V2.2 to support double-buffering.
227 // Caller should assume maxium 128 bytes of returned data.
228 unsigned char D12_ReadMainEndpoint(unsigned char * buf)
229 {
230 1 unsigned char i, j, k = 0, bDblBuf = 1;
231 1
232 1 if(bEPPflags.bits.in_isr == 0)
233 1 DISABLE;
234 1
235 1 outportb(D12_COMMAND, 0x84);
236 1 if( (inportb(D12_DATA) & 0x60) == 0x60)
237 1 bDblBuf = 2;
238 1
239 1 while(bDblBuf) {
240 2 outportb(D12_COMMAND, 4);
241 2 if((inportb(D12_DATA) & D12_FULLEMPTY) == 0)
242 2 break;
243 2
244 2 outportb(D12_COMMAND, 0xF0);
245 2 j = inportb(D12_DATA);
246 2 j = inportb(D12_DATA);
247 2
248 2 for(i=0; i<j; i++)
249 2 *(buf+i+k) = inportb(D12_DATA);
250 2
251 2 k += j;
252 2
253 2 outportb(D12_COMMAND, 0xF2);
254 2
255 2 bDblBuf --;
256 2 }
257 1
258 1 if(bEPPflags.bits.in_isr == 0)
259 1 ENABLE;
C51 COMPILER V8.02 D12CI 07/27/2007 11:10:49 PAGE 13
260 1
261 1 return k;
262 1 }
263
264 unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char * buf, unsigned char len)
265 {
266 1 unsigned char i;
267 1
268 1 if(bEPPflags.bits.in_isr == 0)
269 1 DISABLE;
270 1
271 1 outportb(D12_COMMAND, endp);
272 1 inportb(D12_DATA);
273 1
274 1 outportb(D12_COMMAND, 0xF0);
275 1 outportb(D12_DATA, 0);
276 1 outportb(D12_DATA, len);
277 1
278 1 for(i=0; i<len; i++)
279 1 outportb(D12_DATA, *(buf+i));
280 1
281 1 outportb(D12_COMMAND, 0xFA);
282 1
283 1 if(bEPPflags.bits.in_isr == 0)
284 1 ENABLE;
285 1
286 1 return len;
287 1 }
288
289 void D12_AcknowledgeEndpoint(unsigned char endp)
290 {
291 1 outportb(D12_COMMAND, endp);
292 1 outportb(D12_COMMAND, 0xF1);
293 1 if(endp == 0)
294 1 outportb(D12_COMMAND, 0xF2);
295 1 }
296
297 #ifndef __C51__
unsigned char D12Eval_inportb(void)
{
return inportb(D12_EVAL_PORT_I);
}
void D12Eval_outportb(unsigned char val, unsigned char mask)
{
static unsigned char last_val = 0;
val = (val & mask) | (last_val & (~mask));
outportb(D12_EVAL_PORT_O, val);
last_val = val;
}
#endif
C51 COMPILER V8.02 D12CI 07/27/2007 11:10:49 PAGE 14
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _D12_SetAddressEnable (BEGIN)
; SOURCE LINE # 33
0000 900000 R MOV DPTR,#bAddress
0003 EF MOV A,R7
0004 F0 MOVX @DPTR,A
0005 A3 INC DPTR
0006 ED MOV A,R5
0007 F0 MOVX @DPTR,A
; SOURCE LINE # 34
; SOURCE LINE # 35
0008 900000 E MOV DPTR,#bEPPflags
000B E0 MOVX A,@DPTR
000C C4 SWAP A
000D 13 RRC A
000E 5407 ANL A,#07H
0010 20E002 JB ACC.0,?C0001
; SOURCE LINE # 36
0013 C2AF CLR EA
0015 ?C0001:
; SOURCE LINE # 38
0015 7DD0 MOV R5,#0D0H
0017 7F03 MOV R7,#03H
0019 120000 E LCALL _outportb
; SOURCE LINE # 39
001C 900000 R MOV DPTR,#bEnable
001F E0 MOVX A,@DPTR
0020 6007 JZ ?C0002
; SOURCE LINE # 40
0022 900000 R MOV DPTR,#bAddress
0025 E0 MOVX A,@DPTR
0026 4480 ORL A,#080H
0028 F0 MOVX @DPTR,A
0029 ?C0002:
; SOURCE LINE # 41
0029 900000 R MOV DPTR,#bAddress
002C E0 MOVX A,@DPTR
002D FD MOV R5,A
002E 7F02 MOV R7,#02H
0030 120000 E LCALL _outportb
; SOURCE LINE # 43
0033 900000 E MOV DPTR,#bEPPflags
0036 E0 MOVX A,@DPTR
0037 C4 SWAP A
0038 13 RRC A
0039 5407 ANL A,#07H
003B 20E002 JB ACC.0,?C0004
; SOURCE LINE # 44
003E D2AF SETB EA
; SOURCE LINE # 45
0040 ?C0004:
0040 22 RET
; FUNCTION _D12_SetAddressEnable (END)
; FUNCTION _D12_SetEndpointEnable (BEGIN)
; SOURCE LINE # 47
0000 900000 R MOV DPTR,#bEnable
0003 EF MOV A,R7
0004 F0 MOVX @DPTR,A
; SOURCE LINE # 48
C51 COMPILER V8.02 D12CI 07/27/2007 11:10:49 PAGE 15
; SOURCE LINE # 49
0005 900000 E MOV DPTR,#bEPPflags
0008 E0 MOVX A,@DPTR
0009 C4 SWAP A
000A 13 RRC A
000B 5407 ANL A,#07H
000D 20E002 JB ACC.0,?C0005
; SOURCE LINE # 50
0010 C2AF CLR EA
0012 ?C0005:
; SOURCE LINE # 52
0012 7DD8 MOV R5,#0D8H
0014 7F03 MOV R7,#03H
0016 120000 E LCALL _outportb
; SOURCE LINE # 53
0019 900000 R MOV DPTR,#bEnable
001C E0 MOVX A,@DPTR
001D 6004 JZ ?C0006
; SOURCE LINE # 54
001F 7D01 MOV R5,#01H
0021 8002 SJMP ?C0061
0023 ?C0006:
; SOURCE LINE # 56
0023 E4 CLR A
0024 FD MOV R5,A
0025 ?C0061:
0025 7F02 MOV R7,#02H
0027 120000 E LCALL _outportb
002A ?C0007:
; SOURCE LINE # 58
002A 900000 E MOV DPTR,#bEPPflags
002D E0 MOVX A,@DPTR
002E C4 SWAP A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -