📄 usb.lst
字号:
C51 COMPILER V7.50 USB 11/27/2005 23:13:40 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE USB
OBJECT MODULE PLACED IN USB.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE USB.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /* USB.C File
2 Created by Computer-lov. Date: 2004.9.27
3 Last edited date: 2005.5.31
4 Copyright (c) 2005 Computer-lov
5 version 1.1
6 */
7
8 #include "AT89C51SND1C.H"
9 #include "USB.H"
10 #include "MASS_STORAGE.H"
11 #include "IDE.h"
12 #include "LCD.H"
13 #include "hardware.h"
14 #include "keyboard.h"
15 #include "mp3.h"
16
17
18 CONTROL_DATA_BUFF xdata Control_Data;
19
20 CBW xdata cbw;
21 CSW xdata csw;
22
23 unsigned char bdata SCSI_Register;
24 sbit SCSI_Command = SCSI_Register^0;
25 sbit SCSI_Data = SCSI_Register^1;
26
27
28 unsigned char *pData;
29
30 unsigned char code DISK_INF[36]
31 = //磁盘信息
32 {
33 0x00,
34 0x00,
35 0x02,
36 0x02,
37 0x1F,
38 0x00,0x00,0x00,
39 0x49,0x44,0x45,0xA1,0xFA,0x55,0x53,0x42,
40 0xC1,0xF5,0xC8,0xD9,0xD7,0xD4,0xBC,0xBA,0xD7,0xF6,0xB5,0xC4,0x4D,0x50,0x33,0x20,
41 0x31,0x2E,0x30,0x31
42 };
43
44
45 code unsigned char SENSE[0x12]= //模式探测返回数据
46 {
47 0x70, 0x00, 0x05, 0x00, 0x00, 0x00,
48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00
49 };
50
51 unsigned int SWAP(unsigned int temp) //高低字节交换
52 {
53 1 unsigned char i;
54 1 i=((unsigned char *)&temp)[0];
55 1 ((unsigned char *)&temp)[0]=((unsigned char *)&temp)[1];
C51 COMPILER V7.50 USB 11/27/2005 23:13:40 PAGE 2
56 1 ((unsigned char *)&temp)[1]=i;
57 1 return temp;
58 1 }
59
60 unsigned char LSB(unsigned int temp) //取一个整数的低字节
61 {
62 1 return (unsigned char)temp;
63 1 }
64
65 unsigned char MSB(unsigned int temp) //取一个整数的高字节
66 {
67 1 return (unsigned char)(temp>>8);
68 1 }
69
70 code unsigned char LANGUAGE_ID[4]={0x04,0x03,0x09,0x04}; //字符串描述符所用的语言种类
71
72 code unsigned char device_serial_number[18]= //设备序列号
73 {0x12,0x03,0x32,0x00,0x30,0x00,0x37,0x00,0x31,0x00,0x30,0x00,0x39,0x00,0x38,0x00,0x32,0x00};
74
75 code DEVICE_DESCRIPTOR_STRUCT device_descriptor= //设备描述符
76 {
77 sizeof(DEVICE_DESCRIPTOR_STRUCT), //设备描述符的字节数大小
78 DEVICE_DESCRIPTOR, //设备描述符类型编号
79 0x1001, //USB版本号
80 0x00, //USB分配的设备类代码
81 0x00, //USB分配的子类代码
82 0x00, //USB分配的设备协议代码
83 MAX_CONTROL_DATA_SIZE, //端点0的最大包大小
84 0x7111, //厂商编号
85 0xf0ff, //产品编号
86 0x0100, //设备出厂编号
87 0x00, //设备厂商字符串的索引
88 0x00, //描述产品字符串的索引
89 0x02, //描述设备序列号字符串的索引
90 0x01 //可能的配置数量
91 };
92
93 typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
94 {
95 CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
96 INTERFACE_DESCRIPTOR_STRUCT interface_descritor;
97 ENDPOINT_DESCRIPTOR_STRUCT endpoint_descriptor[ENDPOINT_NUMBER];
98 }CON_INT_ENDP_DESCRIPTOR_STRUCT;
99
100 code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=
101 {
102 //configuration_descriptor //配置描述符
103 {
104 sizeof(CONFIGURATION_DESCRIPTOR_STRUCT), //配置描述符的字节数大小
105 CONFIGURATION_DESCRIPTOR, //配置描述符类型编号
106 (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_ST
-RUCT)*ENDPOINT_NUMBER)*256+
107 (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_ST
-RUCT)*ENDPOINT_NUMBER)/256,
108 0x01, //只包含一个接口
109 0x01, //该配置的编号
110 0x00, //iConfiguration字段
111 0x80, //采用总线供电,不支持远程唤醒
112 0xC8 //从总线获取最大电流400mA
113 },
114 //interface_descritor //接口描述符
115 {
C51 COMPILER V7.50 USB 11/27/2005 23:13:40 PAGE 3
116 sizeof(INTERFACE_DESCRIPTOR_STRUCT), //接口描述符的字节数大小
117 INTERFACE_DESCRIPTOR, //接口描述符类型编号
118 0x00, //接口编号为0
119 0x00, //该接口描述符的编号
120 ENDPOINT_NUMBER, //非0端点数量为2,只使用端点主端点输入和
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -