📄 usbcore.lst
字号:
246 0x32,
247
248 /*******************接口描述符*********************/
249 //bLength字段。接口描述符的长度为9字节。
250 0x09,
251
252 //bDescriptorType字段。接口描述符的编号为0x04。
253 0x04,
254
255 //bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
256 0x00,
257
258 //bAlternateSetting字段。该接口的备用编号,为0。
259 0x00,
260
261 //bNumEndpoints字段。非0端点的数目。由于USB鼠标只需要一个
262 //中断输入端点,因此该值为1。
263 0x01,
264
265 //bInterfaceClass字段。该接口所使用的类。USB鼠标是HID类,
266 //HID类的编码为0x03。
267 0x03,
268
269 //bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,
270 //只规定了一种子类:支持BIOS引导启动的子类。
271 //USB键盘、鼠标属于该子类,子类代码为0x01。
272 0x01,
273
274 //bInterfaceProtocol字段。如果子类为支持引导启动的子类,
275 //则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。
276 0x02,
277
278 //iConfiguration字段。该接口的字符串索引值。这里没有,为0。
279 0x00,
280
281 /******************HID描述符************************/
282 //bLength字段。本HID描述符下只有一个下级描述符。所以长度为9字节。
283 0x09,
284
285 //bDescriptorType字段。HID描述符的编号为0x21。
286 0x21,
287
288 //bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。
289 0x10,
290 0x01,
291
292 //bCountyCode字段。设备适用的国家代码,这里选择为美国,代码0x21。
293 0x21,
294
295 //bNumDescriptors字段。下级描述符的数目。我们只有一个报告描述符。
296 0x01,
297
298 //bDescritporType字段。下级描述符的类型,为报告描述符,编号为0x22。
299 0x22,
300
301 //bDescriptorLength字段。下级描述符的长度。下级描述符为报告描述符。
302 sizeof(ReportDescriptor)&0xFF,
303 (sizeof(ReportDescriptor)>>8)&0xFF,
C51 COMPILER V8.02 USBCORE 06/17/2010 09:52:34 PAGE 6
304
305 /**********************端点描述符***********************/
306 //bLength字段。端点描述符长度为7字节。
307 0x07,
308
309 //bDescriptorType字段。端点描述符编号为0x05。
310 0x05,
311
312 //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
313 //D7位表示数据方向,输入端点D7为1。所以输入端点1的地址为0x81。
314 0x81,
315
316 //bmAttributes字段。D1~D0为端点传输类型选择。
317 //该端点为中断端点。中断端点的编号为3。其它位保留为0。
318 0x03,
319
320 //wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
321 //注意低字节在先。
322 0x10,
323 0x00,
324
325 //bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
326 0x0A
327 };
328 ////////////////////////配置描述符集合完毕//////////////////////////
329
330 /************************语言ID的定义********************/
331 code uint8 LanguageId[4]=
332 {
333 0x04, //本描述符的长度
334 0x03, //字符串描述符
335 //0x0409为美式英语的ID
336 0x09,
337 0x04
338 };
339 ////////////////////////语言ID完毕//////////////////////////////////
340
341
342 //http://computer00.21ic.org/user1/2198/archives/2007/42769.html
343 //字符串“天祥电子” Http:www.txmcu.cn”的Unicode编码
344 //8位小端格式
345 code uint8 ManufacturerStringDescriptor[52]={
346 52, //该描述符的长度为82字节
347 0x03, //字符串描述符的类型编码为0x03
348 0x1c, 0x20, //“
349 0x29, 0x59, //天
350 0x65, 0x79, //祥
351 0x35, 0x75, //电
352 0x50, 0x5b, //子
353 0x1d, 0x20, //”
354 0x20, 0x00, //
355 0x48, 0x00, //H
356 0x74, 0x00, //t
357 0x74, 0x00, //t
358 0x70, 0x00, //p
359 0x3a, 0x00, //:
360 0x77, 0x00, //w
361 0x77, 0x00, //w
362 0x77, 0x00, //w
363 0x2e, 0x00, //.
364 0x74, 0x00, //t
365 0x78, 0x00, //x
C51 COMPILER V8.02 USBCORE 06/17/2010 09:52:34 PAGE 7
366 0x6d, 0x00, //m
367 0x63, 0x00, //c
368 0x75, 0x00, //u
369 0x2e, 0x00, //.
370 0x63, 0x00, //c
371 0x6f, 0x00, //o
372 0x6d, 0x00 //m
373 };
374 /////////////////////////厂商字符串结束/////////////////////////////
375
376 //字符串“天祥电子”之USB鼠标”的Unicode编码
377 //8位小端格式
378 code uint8 ProductStringDescriptor[26]={
379 26, //该描述符的长度为34字节
380 0x03, //字符串描述符的类型编码为0x03
381 0x1c, 0x20, //“
382 0x29, 0x59, //天
383 0x65, 0x79, //祥
384 0x35, 0x75, //电
385 0x50, 0x5b, //子
386 0x1d, 0x20, //”
387 0x4b, 0x4e, //之
388 0x55, 0x00, //U
389 0x53, 0x00, //S
390 0x42, 0x00, //B
391 0x20, 0x9f, //鼠
392 0x07, 0x68 //标
393 };
394 ////////////////////////产品字符串结束////////////////////////////
395
396 //字符串“2008-07-07”的Unicode编码
397 //8位小端格式
398 code uint8 SerialNumberStringDescriptor[22]={
399 22, //该描述符的长度为22字节
400 0x03, //字符串描述符的类型编码为0x03
401 0x32, 0x00, //2
402 0x30, 0x00, //0
403 0x31, 0x00, //1
404 0x30, 0x00, //0
405 0x2d, 0x00, //-
406 0x30, 0x00, //0
407 0x36, 0x00, //6
408 0x2d, 0x00, //-
409 0x30, 0x00, //0
410 0x37, 0x00 //7
411 };
412 //////////////////////产品序列号字符串结束/////////////////////////
413
414 /********************************************************************
415 函数功能:延时x毫秒函数。
416 入口参数:x:延时的毫秒数。
417 返 回:无。
418 备 注:无。
419 ********************************************************************/
420 void DelayXms(uint16 x)
421 {
422 1 uint16 i;
423 1 uint16 j;
424 1 for(i=0;i<x;i++)
425 1 for(j=0;j<227;j++); //循环语句延时
426 1 }
427 ////////////////////////End of function//////////////////////////////
C51 COMPILER V8.02 USBCORE 06/17/2010 09:52:34 PAGE 8
428
429 /********************************************************************
430 函数功能:USB断开连接函数。
431 入口参数:无。
432 返 回:无。
433 备 注:无。
434 ********************************************************************/
435 void UsbDisconnect(void)
436 {
437 1 #ifdef DEBUG0
438 1 Prints("断开USB连接。\r\n");
439 1 #endif
440 1 outportb(D12COMMAND, 0xF3); //写设置模式命令
441 1 outportb(D12DATA, 0x06); //设置模式的第二字节
442 1 outportb(D12DATA, 0x47); //设置模式的第二字节
443 1 DelayXms(1000); //延迟1秒
444 1 }
445 ////////////////////////End of function//////////////////////////////
446
447 /********************************************************************
448 函数功能:USB连接函数。
449 入口参数:无。
450 返 回:无。
451 备 注:无。
452 ********************************************************************/
453 void UsbConnect(void)
454 {
455 1 #ifdef DEBUG0
456 1 Prints("连接USB。\r\n");
457 1 #endif
458 1 outportb(D12COMMAND, 0xF3);
459 1 //写设置模式命令
460 1 outportb(D12DATA, 0x16);
461 1 outportb(D12DATA, 0x47);
462 1 }
463 ////////////////////////End of function//////////////////////////////
464
465 /********************************************************************
466 函数功能:总线挂起中断处理函数。
467 入口参数:无。
468 返 回:无。
469 备 注:无。
470 ********************************************************************/
471 void UsbBusSuspend(void)
472 {
473 1 #ifdef DEBUG0
474 1 Prints("USB总线挂起。\r\n");
475 1 #endif
476 1 }
477 ////////////////////////End of function//////////////////////////////
478
479 /********************************************************************
480 函数功能:总线复位中断处理函数。
481 入口参数:无。
482 返 回:无。
483 备 注:无。
484 ********************************************************************/
485 void UsbBusReset(void)
486 {
487 1 #ifdef DEBUG0
488 1 Prints("USB总线复位。\r\n");
489 1 #endif
C51 COMPILER V8.02 USBCORE 06/17/2010 09:52:34 PAGE 9
490 1 Ep1InIsBusy=0; //复位后端点1输入缓冲区空闲。
491 1 }
492 ////////////////////////End of function//////////////////////////////
493
494 /********************************************************************
495 函数功能:根据pData和SendLength将数据发送到端点0的函数。
496 入口参数:无。
497 返 回:无。
498 备 注:无。
499 ********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -