📄 chap_9.lst
字号:
C51 COMPILER V7.50 CHAP_9 10/30/2007 16:17:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CHAP_9
OBJECT MODULE PLACED IN chap_9.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE chap_9.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************Copyright (c)**************************************************
2
3 ** 文 件 名: Chap_9.c
4 ** 最后修改日期: 2006年10月19日
5 ** 描 述: USB驱动程序软件包: D14 设备端驱动程序 协议层
6 ** 版 本: V1.0
7 **********************************************************************************************************
-/
8
9
10 #include "standard.h"
11 #include "Kernel.h"
12 #include "D14.h"
13 #include "usb.h"
14
15 //外部函数
16
17 extern volatile D14_CNTRL_REG xdata D14_Cntrl_Reg;
18 extern void Init_D14(void);
19 extern UC code Standard_Device_Descriptor[];
20 extern UC code Bulk_Interface_Descriptor[];
21 extern UC code Iso_Interface_Descriptor[];
22 extern UC code Standard_Config_Descriptor[];
23 extern UC code Standard_Manufacturer_String[];
24 extern UC code Standard_Product_String[];
25 extern UC code Standard_String_ID[];
26 extern UC code Bulk_In_Descriptor[];
27 extern UC code Bulk_Out_Descriptor[];
28 extern UC code Int_In_Descriptor[];
29 extern UC code Int_Out_Descriptor[];
30 extern UC code Iso_In_Descriptor[];
31 extern UC code Iso_Out_Descriptor[];
32 extern UC code Iso_In_Zero_Descriptor[];
33 extern UC code Iso_Out_Zero_Descriptor[];
34 extern UC code HS_Device_Descriptor[];
35 extern UC code HS_Device_Qualifier[];
36 extern UC code HS_Bulk_Interface_Descriptor[];
37 extern UC code HS_Bulk_In_Descriptor[];
38 extern UC code HS_Bulk_Out_Descriptor[];
39 extern UC code HS_Int_In_Descriptor[];
40 extern UC code HS_Int_Out_Descriptor[];
41 extern UC code Other_Speed_Config_Descriptor[];
42 extern UI count;
43 extern void Start_mSEC_Timer(Data);
44 extern void Start_SEC_Timer(Data);
45 extern void Check_Busy(void);
46 extern void TaskFile_Update(void);
47 extern UI Temp;
48 extern UC Device_Config_Value;
49 extern KERNEL Kernel_Flag;
50 extern DMA_INT_FLAG DMA_Int_Flag;
51 extern USB_INT_FLAG USB_Int_Flag;
52 extern USBCBW USB_CBW;
53 extern void Init_Device(void);
54 extern UC code Test_Packet[];
C51 COMPILER V7.50 CHAP_9 10/30/2007 16:17:28 PAGE 2
55 extern void Init_Endpoint(void);
56 extern void Init_Device(void);
57 extern void Set_USB(void);
58
59
60 //内部函数
61
62 void USB_Setup(void);
63 void reserved(void);
64 void Send_Device_Status(void);
65 void Send_Interface_Status(void);
66 void Send_Endpoint_Status(void);
67
68 void Vendor_Specific_Command(void);
69 void Send_Status(unsigned char tran_status);
70
71 void Set_Interface_Value(void);
72 void Get_Interface_Value(void);
73 void Process_Synch_Frame(void);
74
75 void get_status(void);
76 void clear_feature(void);
77 void set_feature(void);
78 void set_address(void);
79 void get_descriptor(void);
80 void get_config(void);
81 void set_config(void);
82 void get_interface(void);
83 void set_interface(void);
84
85 void Set_Descriptor(void);
86 void reserved(void);
87
88 void ep0in_ack(void);
89 void ep0out_ack(void);
90 void wait_ep0tx(void);
91 void wait_ep0rx(void);
92 unsigned int read_endpoint(unsigned char endp,unsigned int len,unsigned char *buf);
93 unsigned int write_endpoint(unsigned char endp,unsigned int len,unsigned char *buf);
94
95
96 //变量定义
97
98 USB_INT_FLAG USB_Int_Flag;
99 USB_DEVICE_REQ idata USB_Device_Request;
100 USB_DEVICE USB_Device;
101
102 UC code *Descriptor_Ptr;
103
104
105 UI FIFO_Count;
106 UC VID[2],PID[2];
107 FILESIZE FileSize;
108 UI PIO_Count;
109 UC File_Number;
110 UC Current_File;
111 ULI bytecount;
112
113 //USB标准请求
114 code void (*StandardDeviceRequest[])(void) =
115 {
116 get_status,
C51 COMPILER V7.50 CHAP_9 10/30/2007 16:17:28 PAGE 3
117 clear_feature,
118 reserved,
119 set_feature,
120 reserved,
121 set_address,
122 get_descriptor,
123 reserved,
124 get_config,
125 set_config,
126 get_interface,
127 set_interface,
128 reserved,
129 reserved,
130 reserved,
131 reserved
132 };
133
134 /////////////////////
135
136
137
138 //USB事件处理函数
139 void USBserve(void)
140 {
141 1 //端点0接收到setup包处理
142 1 if(USB_Int_Flag.BITS.EP0SETUP)
143 1 {
144 2 EA_DISABLE;
145 2 USB_Setup();
146 2 EA_ENABLE;
147 2 }
148 1
149 1 //挂起处理
150 1 if(USB_Int_Flag.BITS.SUSP)
151 1 {
152 2 //清除挂起标志
153 2 EA_DISABLE;
154 2 USB_Int_Flag.BITS.SUSP = 0;
155 2 EA_ENABLE;
156 2 //ISP1581进入挂起状态
157 2 D14_Cntrl_Reg.D14_MODE.BITS.GOSUSP = 1;
158 2 D14_Cntrl_Reg.D14_MODE.BITS.GOSUSP = 0;
159 2 }
160 1
161 1 //挂起恢复处理
162 1 if(USB_Int_Flag.BITS.RESUME)
163 1 {
164 2 //清除恢复标志
165 2 EA_DISABLE;
166 2 USB_Int_Flag.BITS.RESUME = 0;
167 2 EA_ENABLE;
168 2 //产生一个恢复信号
169 2 D14_Cntrl_Reg.D14_MODE.BITS.SNDRSU = 1;
170 2 D14_Cntrl_Reg.D14_MODE.BITS.SNDRSU = 0;
171 2 }
172 1
173 1 //高速状态
174 1 if(USB_Int_Flag.BITS.HS_STAT)
175 1 {
176 2 //清除高速状态标志
177 2 EA_DISABLE;
178 2 USB_Int_Flag.BITS.HS_STAT = 0;
C51 COMPILER V7.50 CHAP_9 10/30/2007 16:17:28 PAGE 4
179 2 EA_ENABLE;
180 2 if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
181 2 {
182 3 //切换高速指示
183 3 HS_FS_LED = HIGH_SPEED_LED;
184 3 //设置高速模式状态
185 3 Kernel_Flag.BITS.HS_FS_State = HIGH_SPEED;
186 3 //重新配置高速端点
187 3 Init_Endpoint();
188 3
189 3 PIO_Count = 512;
190 3 }
191 2 }
192 1 }
193
194
195
196 //建立包处理
197 void USB_Setup(void)
198 {
199 1 unsigned char type, req;
200 1
201 1 //清除EP0SETUP中断标志
202 1 USB_Int_Flag.BITS.EP0SETUP = 0;
203 1 //清除总线复位标志
204 1 Kernel_Flag.BITS.Bus_Reset = 0;
205 1 //选择端点0SETUP缓冲区
206 1 D14_Cntrl_Reg.D14_ENDPT_INDEX = 0x20;
207 1
208 1 //读取USB请求
209 1 //读取请求类型
210 1 USB_Device_Request.bmRequestType = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -