?? d12ci.lst
字號(hào):
ENABLE();
return c;
}
#endif
197
198 /************************************************************
199 ** 函數(shù)名稱(chēng): D12_ReadLastTransactionStatus()
200 ** 功能描述: 讀取最后處理狀態(tài)寄存器
201 ** 輸 入: INT8U bEndp: 端點(diǎn)索引號(hào),取值0 ~ 5
202 ** 輸 出: 端點(diǎn)最后處理的狀態(tài)
203 ************************************************************/
204 INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
205 {
206 1 outportb(D12_COMMAND, 0x40 + bEndp); //輸出讀取最后處理狀態(tài)寄存器命令
207 1 return inportb(D12_DATA); //讀取狀態(tài)
208 1 }
209
210 /************************************************************
211 ** 函數(shù)名稱(chēng): D12_SetEndpointStatus()
212 ** 功能描述: 設(shè)置端點(diǎn)狀態(tài)
213 ** 輸 入: INT8U bEndp: 端點(diǎn)索引號(hào),取值0 ~ 5
214 INT8U bStalled: 狀態(tài)值
215 ** 輸 出: 端點(diǎn)狀態(tài)
216 ************************************************************/
217 void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled)
218 {
219 1 if(bEPPflags.bits.in_isr == 0)
220 1 DISABLE();
221 1
222 1 outportb(D12_COMMAND, 0x40 + bEndp); //發(fā)送設(shè)置端點(diǎn)狀態(tài)命令
223 1 outportb(D12_DATA, bStalled); //設(shè)置端點(diǎn)狀態(tài)
224 1
225 1 if(bEPPflags.bits.in_isr == 0)
226 1 ENABLE();
227 1 }
228
229 /************************************************************
230 ** 函數(shù)名稱(chēng): D12_SendResume()
231 ** 功能描述: 傳輸恢復(fù)
232 ** 輸 入: 無(wú)
233 ** 輸 出: 無(wú)
234 ************************************************************/
235 #if D12_SendResume_EN
void D12_SendResume(void)
{
outportb(D12_COMMAND, 0xF6); //設(shè)置發(fā)送恢復(fù)
}
#endif
C51 COMPILER V7.50 D12CI 02/29/2008 14:36:28 PAGE 5
241
242
243 /************************************************************
244 ** 函數(shù)名稱(chēng): D12_ReadCurrentFrameNumber()
245 ** 功能描述: 讀取當(dāng)前幀號(hào)
246 ** 輸 入: 無(wú)
247 ** 輸 出: 當(dāng)前幀號(hào)
248 ************************************************************/
249 #if D12_ReadCurrentFrameNumber_EN
INT16U D12_ReadCurrentFrameNumber(void)
{
INT16U i,j;
if(bEPPflags.bits.in_isr == 0)
DISABLE();
outportb(D12_COMMAND, 0xF5); //發(fā)送讀取當(dāng)前幀數(shù)目命令
i= inportb(D12_DATA); //讀取幀數(shù)目的低8位
j = inportb(D12_DATA); //讀取幀數(shù)目的高8位
i += (j<<8);
if(bEPPflags.bits.in_isr == 0)
ENABLE();
return i; //返目當(dāng)前幀數(shù)目
}
#endif
269
270
271 /************************************************************
272 ** 函數(shù)名稱(chēng): D12_ReadEndpoint()
273 ** 功能描述: 讀取端點(diǎn)數(shù)據(jù)
274 ** 輸 入: INT8U endp: 端點(diǎn)索引號(hào),取值 0 ~ 5
275 INT8U len: 要讀取的數(shù)據(jù)長(zhǎng)度
276 INT8U * buf: 接收數(shù)據(jù)指針
277 ** 輸 出: 實(shí)際讀得的字節(jié)數(shù)
278 ************************************************************/
279 INT8U D12_ReadEndpoint(INT8U endp,INT8U len,INT8U * buf)
280 {
281 1 INT8U i, j;
282 1
283 1 if(bEPPflags.bits.in_isr == 0)
284 1 DISABLE();
285 1
286 1 outportb(D12_COMMAND, endp); //發(fā)送選擇端點(diǎn)命令
287 1 if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) { //如果緩沖區(qū)為空
288 2 if(bEPPflags.bits.in_isr == 0)
289 2 ENABLE();
290 2 return 0; //則返回讀到0字節(jié)
291 2 }
292 1 len=len;
293 1 outportb(D12_COMMAND, 0xF0); //發(fā)送讀緩沖區(qū)命令
294 1 j = inportb(D12_DATA); //讀取保留字節(jié)
295 1 j = inportb(D12_DATA); //讀取數(shù)據(jù)字節(jié)的數(shù)目/長(zhǎng)度
296 1
297 1 if(j > len) //如果大于要求讀的字節(jié)數(shù)目
298 1 j = len; //則只讀取要求的字節(jié)長(zhǎng)度
299 1
300 1
301 1 for(i=0; i<j; i++)
302 1 *(buf+i) = inportb(D12_DATA); //讀取要求的字節(jié)數(shù)目/長(zhǎng)度
C51 COMPILER V7.50 D12CI 02/29/2008 14:36:28 PAGE 6
303 1
304 1 outportb(D12_COMMAND, 0xF2); //清緩沖區(qū),新的信息包才可以重新被接受
305 1
306 1 if(bEPPflags.bits.in_isr == 0)
307 1 ENABLE();
308 1
309 1 return j; //返回讀到的字節(jié)數(shù)
310 1 }
311
312 /************************************************************
313 ** 函數(shù)名稱(chēng): D12_WriteEndpoint()
314 ** 功能描述: 把數(shù)據(jù)寫(xiě)入端點(diǎn)
315 ** 輸 入: INT8U endp: 端點(diǎn)索引號(hào),取值 0 ~ 5
316 INT8U len: 要寫(xiě)入的數(shù)據(jù)長(zhǎng)度
317 INT8U * buf: 發(fā)送數(shù)據(jù)指針
318 ** 輸 出: 實(shí)際寫(xiě)入的字節(jié)數(shù)
319 ************************************************************/
320 INT8U D12_WriteEndpoint(INT8U endp, INT8U len,INT8U * buf)
321 {
322 1 INT8U i;
323 1
324 1 if(bEPPflags.bits.in_isr == 0)
325 1 DISABLE();
326 1
327 1 outportb(D12_COMMAND, endp); //發(fā)送選擇端點(diǎn)命令
328 1 i = inportb(D12_DATA); //可選地讀取一個(gè)字節(jié)
329 1
330 1 outportb(D12_COMMAND, 0xF0); //發(fā)送寫(xiě)緩沖區(qū)命令
331 1 outportb(D12_DATA, 0); //寫(xiě)入一個(gè)保留字節(jié)
332 1 outportb(D12_DATA, len); //寫(xiě)入即將寫(xiě)入的字節(jié)數(shù)目
333 1
334 1 for(i=0; i<len; i++)
335 1 outportb(D12_DATA, *(buf+i)); //寫(xiě)入指定的字節(jié)
336 1
337 1 outportb(D12_COMMAND, 0xFA); //使緩沖區(qū)有效
338 1
339 1 if(bEPPflags.bits.in_isr == 0)
340 1 ENABLE();
341 1
342 1 return len; //返回寫(xiě)入的字節(jié)數(shù)
343 1 }
344
345 /************************************************************
346 ** 函數(shù)名稱(chēng): D12_AcknowledgeEndpoint()
347 ** 功能描述: 應(yīng)答Setup
348 ** 輸 入: INT8U endp: 端點(diǎn)索引號(hào),取值 0 ~ 5
349 ** 輸 出: 無(wú)
350 ************************************************************/
351 void D12_AcknowledgeEndpoint(INT8U endp)
352 {
353 1 outportb(D12_COMMAND, endp); //選擇端點(diǎn)
354 1 outportb(D12_COMMAND, 0xF1); //應(yīng)答Setup指令
355 1 if(endp == 0)
356 1 outportb(D12_COMMAND, 0xF2); //清空該端點(diǎn)緩沖區(qū)
357 1 }
358
359 /************************************************************
360 ** 函數(shù)名稱(chēng): void D12_ClearBuff()
361 ** 功能描述: 清指定端點(diǎn)的緩沖區(qū)(包括雙緩沖區(qū))
362 ** 輸 入: INT8U endp: 端點(diǎn)索引號(hào),取值 0 ~ 5
363 ** 輸 出: 無(wú)
364 ************************************************************/
C51 COMPILER V7.50 D12CI 02/29/2008 14:36:28 PAGE 7
365 #if D12_ClearBuff_EN
void D12_ClearBuff(INT8U endp)
{
outportb(D12_COMMAND, endp); //選擇端點(diǎn)
outportb(D12_COMMAND, 0xF2); //清空第1個(gè)緩沖區(qū)
if (endp >= 4){
outportb(D12_COMMAND, endp); //選擇端點(diǎn)
outportb(D12_COMMAND, 0xF2); //清空第2個(gè)緩沖區(qū)
}
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 718 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -