📄 usbcore.lst
字号:
247 0x00,
248
249 //bInterval字段。端点查询的时间,这里对批量端点无效。
250 0x00,
251
252 /*************** 批量输出端点2描述符 ******************/
253 //bLength字段。端点描述符长度为7字节。
254 0x07,
255
256 //bDescriptorType字段。端点描述符编号为0x05。
257 0x05,
258
259 //bEndpointAddress字段。端点的地址。我们使用D12的输出端点2。
260 //D7位表示数据方向,输出端点D7为0。所以输出端点2的地址为0x02。
261 0x02,
262
263 //bmAttributes字段。D1~D0为端点传输类型选择。
264 //该端点为批量端点,批量端点的编号为0x02。其它位保留为0。
265 0x02,
266
267 //wMaxPacketSize字段。该端点的最大包长。端点2的最大包长为64字节。
268 //注意低字节在先。
269 0x40,
270 0x00,
271
272 //bInterval字段。端点查询的时间,这里对批量端点无效。
273 0x00
274 };
275 ////////////////////////配置描述符集合完毕//////////////////////////
276
277 /************************语言ID的定义********************/
278 code uint8 LanguageId[4]=
279 {
280 0x04, //本描述符的长度
281 0x03, //字符串描述符
282 //0x0409为美式英语的ID
283 0x09,
284 0x04
285 };
286 ////////////////////////语言ID完毕//////////////////////////////////
287
288 /**************************************************/
289 /********* 本转换结果来自 **********/
290 /********* Http://computer00.21ic.org **********/
291 /********* 作者: 电脑圈圈 **********/
292 /********* 欢迎大家使用 **********/
293 /********* 版权所有,盗版请写明出处 **********/
294 /**************************************************/
295
296 //http://computer00.21ic.org/user1/2198/archives/2007/42769.html
297 //字符串“电脑圈圈的USB专区 Http://group.ednchina.com/93/”的Unicode编码
298 //8位小端格式
299 code uint8 ManufacturerStringDescriptor[82]={
300 82, //该描述符的长度为82字节
301 0x03, //字符串描述符的类型编码为0x03
302 0x35, 0x75, //电
303 0x11, 0x81, //脑
C51 COMPILER V8.05a USBCORE 04/21/2009 19:44:21 PAGE 6
304 0x08, 0x57, //圈
305 0x08, 0x57, //圈
306 0x84, 0x76, //的
307 0x55, 0x00, //U
308 0x53, 0x00, //S
309 0x42, 0x00, //B
310 0x13, 0x4e, //专
311 0x3a, 0x53, //区
312 0x20, 0x00, //
313 0x48, 0x00, //H
314 0x74, 0x00, //t
315 0x74, 0x00, //t
316 0x70, 0x00, //p
317 0x3a, 0x00, //:
318 0x2f, 0x00, ///
319 0x2f, 0x00, ///
320 0x67, 0x00, //g
321 0x72, 0x00, //r
322 0x6f, 0x00, //o
323 0x75, 0x00, //u
324 0x70, 0x00, //p
325 0x2e, 0x00, //.
326 0x65, 0x00, //e
327 0x64, 0x00, //d
328 0x6e, 0x00, //n
329 0x63, 0x00, //c
330 0x68, 0x00, //h
331 0x69, 0x00, //i
332 0x6e, 0x00, //n
333 0x61, 0x00, //a
334 0x2e, 0x00, //.
335 0x63, 0x00, //c
336 0x6f, 0x00, //o
337 0x6d, 0x00, //m
338 0x2f, 0x00, ///
339 0x39, 0x00, //9
340 0x33, 0x00, //3
341 0x2f, 0x00 ///
342 };
343 /////////////////////////厂商字符串结束/////////////////////////////
344
345 //字符串“《圈圈教你玩USB》之用户自定义的USB设备”的Unicode编码
346 //8位小端格式
347 code uint8 ProductStringDescriptor[46]={
348 46, //该描述符的长度为46字节
349 0x03, //字符串描述符的类型编码为0x03
350 0x0a, 0x30, //《
351 0x08, 0x57, //圈
352 0x08, 0x57, //圈
353 0x59, 0x65, //教
354 0x60, 0x4f, //你
355 0xa9, 0x73, //玩
356 0x55, 0x00, //U
357 0x53, 0x00, //S
358 0x42, 0x00, //B
359 0x0b, 0x30, //》
360 0x4b, 0x4e, //之
361 0x28, 0x75, //用
362 0x37, 0x62, //户
363 0xea, 0x81, //自
364 0x9a, 0x5b, //定
365 0x49, 0x4e, //义
C51 COMPILER V8.05a USBCORE 04/21/2009 19:44:21 PAGE 7
366 0x84, 0x76, //的
367 0x55, 0x00, //U
368 0x53, 0x00, //S
369 0x42, 0x00, //B
370 0xbe, 0x8b, //设
371 0x07, 0x59, //备
372
373 };
374 ////////////////////////产品字符串结束////////////////////////////
375
376 //字符串“2008-08-22”的Unicode编码
377 //8位小端格式
378 code uint8 SerialNumberStringDescriptor[22]={
379 22, //该描述符的长度为22字节
380 0x03, //字符串描述符的类型编码为0x03
381 0x32, 0x00, //2
382 0x30, 0x00, //0
383 0x30, 0x00, //0
384 0x38, 0x00, //8
385 0x2d, 0x00, //-
386 0x30, 0x00, //0
387 0x38, 0x00, //8
388 0x2d, 0x00, //-
389 0x32, 0x00, //2
390 0x32, 0x00 //2
391 };
392 //////////////////////产品序列号字符串结束/////////////////////////
393
394 /********************************************************************
395 函数功能:延时x毫秒函数。
396 入口参数:x:延时的毫秒数。
397 返 回:无。
398 备 注:无。
399 ********************************************************************/
400 void DelayXms(uint16 x)
401 {
402 1 uint16 i;
403 1 uint16 j;
404 1 for(i=0;i<x;i++)
405 1 for(j=0;j<227;j++); //循环语句延时
406 1 }
407 ////////////////////////End of function//////////////////////////////
408
409 /********************************************************************
410 函数功能:USB断开连接函数。
411 入口参数:无。
412 返 回:无。
413 备 注:无。
414 ********************************************************************/
415 void UsbDisconnect(void)
416 {
417 1 #ifdef DEBUG0
418 1 Prints("断开USB连接。\r\n");
419 1 #endif
420 1 D12WriteCommand(D12_SET_MODE); //写设置模式命令
421 1 D12WriteByte(0x06); //设置模式的第一字节
422 1 D12WriteByte(0x47); //设置模式的第二字节
423 1 DelayXms(1000); //延迟1秒
424 1 }
425 ////////////////////////End of function//////////////////////////////
426
427 /********************************************************************
C51 COMPILER V8.05a USBCORE 04/21/2009 19:44:21 PAGE 8
428 函数功能:USB连接函数。
429 入口参数:无。
430 返 回:无。
431 备 注:无。
432 ********************************************************************/
433 void UsbConnect(void)
434 {
435 1 #ifdef DEBUG0
436 1 Prints("连接USB。\r\n");
437 1 #endif
438 1 D12WriteCommand(D12_SET_MODE); //写设置模式命令
439 1 D12WriteByte(0x16); //设置模式的第一字节
440 1 D12WriteByte(0x47); //设置模式的第二字节
441 1 }
442 ////////////////////////End of function//////////////////////////////
443
444 /********************************************************************
445 函数功能:总线挂起中断处理函数。
446 入口参数:无。
447 返 回:无。
448 备 注:无。
449 ********************************************************************/
450 void UsbBusSuspend(void)
451 {
452 1 #ifdef DEBUG0
453 1 Prints("USB总线挂起。\r\n");
454 1 #endif
455 1 }
456 ////////////////////////End of function//////////////////////////////
457
458 /********************************************************************
459 函数功能:总线复位中断处理函数。
460 入口参数:无。
461 返 回:无。
462 备 注:无。
463 ********************************************************************/
464 void UsbBusReset(void)
465 {
466 1 #ifdef DEBUG0
467 1 Prints("USB总线复位。\r\n");
468 1 #endif
469 1 Ep1InIsBusy=0; //复位后端点1输入缓冲区空闲。
470 1 Ep2InIsBusy=0; //复位后端点2输入缓冲区空闲。
471 1 UartBufferOutputPoint=0;
472 1 UartBufferInputPoint=0;
473 1 UartByteCount=0;
474 1 UsbEp2ByteCount=0;
475 1 UsbEp2BufferOutputPoint=0;
476 1 }
477 ////////////////////////End of function//////////////////////////////
478
479 /********************************************************************
480 函数功能:根据pData和SendLength将数据发送到端点0的函数。
481 入口参数:无。
482 返 回:无。
483 备 注:无。
484 ********************************************************************/
485 void UsbEp0SendData(void)
486 {
487 1 //将数据写到端点中去准备发送
488 1 //写之前要先判断一下需要发送的数据是否比端点0
489 1 //最大长度大,如果超过端点大小,则一次只能发送
C51 COMPILER V8.05a USBCORE 04/21/2009 19:44:21 PAGE 9
490 1 //最大包长的数据。端点0的最大包长在DeviceDescriptor[7]
491 1 if(SendLength>DeviceDescriptor[7])
492 1 {
493 2 //按最大包长度发送
494 2 D12WriteEndpointBuffer(1,DeviceDescriptor[7],pSendData);
495 2 //发送后剩余字节数减少最大包长
496 2 SendLength-=DeviceDescriptor[7];
497 2 //发送一次后指针位置要调整
498 2 pSendData+= DeviceDescriptor[7];
499 2 }
500 1 else
501 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -