📄 epsetup.lst
字号:
C51 COMPILER V7.20 EPSETUP 09/11/2008 22:15:07 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE EPSETUP
OBJECT MODULE PLACED IN epsetup.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE epsetup.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"mytype.h"
2 #include "d12_command.h"
3 #include"d12_value.h"
4 #include"port.h"
5 #include"epmain.h"
6 #include"uar.h"
7 extern USB_FLAGS usb_flags;
8 extern INT_REG Interrupt_Register;
9 extern LAST_STATUS Last_Status;
10 extern CONTROL_DATA_BUFF Control_Data;
11 /************************终端点0输出中断处理************************************/
12 void endp0_out(void)
13 {uint16 i;
14 1 Prints("ep0_out\r\0");
15 1 Last_Status.value=read_last_status(0);
16 1
17 1 if(Last_Status.Status.setup_packet)
18 1 {
19 2 Control_Data.wLength=0;
20 2 Control_Data.wCount=0;
21 2 if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))
-!=sizeof(REQUESTCMD))
22 2 {
23 3 set_endpoint_status(0,0);
24 3 set_endpoint_status(1,0);
25 3 usb_flags.Status.control_state = USB_IDLE;
26 3 return;
27 3 }
28 2 Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
29 2 Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
30 2 Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
31 2
32 2 ack_setup(0);
33 2 ack_setup(1);
34 2 select_endpoint(0);
35 2 clear_buffer();
36 2 usb_flags.Status.setup_packet=1;
37 2 Control_Data.wLength=Control_Data.DeviceRequest.wLength;
38 2 if(Control_Data.DeviceRequest.bmRequestType&0x80)
39 2 {
40 3 usb_flags.Status.control_state=USB_TRANSMIT;
41 3 }
42 2 else
43 2 {
44 3 usb_flags.Status.control_state=USB_RECEIVE;
45 3 }// set command with data
46 2 // else set command
47 2 }// if setup packet
48 1 // 接收内容
49 1
50 1 else if(usb_flags.Status.control_state==USB_RECEIVE) //正常的0端点写数据
51 1 {
52 2 i = read_endpoint_buff(0, EP0_PACKET_SIZE,Control_Data.dataBuffer + Control_Data.wCount);
-//从端点0接收数据
53 2 Control_Data.wCount +=i ; //统计已接收的字节数
C51 COMPILER V7.20 EPSETUP 09/11/2008 22:15:07 PAGE 2
54 2 if( i != EP0_PACKET_SIZE || Control_Data.wCount >= Control_Data.wLength)
55 2 { //数据接收完毕
56 3 //通知control_handler()处理Setup包
57 3 usb_flags.Status.control_state = USB_IDLE; //设置为等待状态
58 3 }
59 2 }
60 1 else
61 1 usb_flags.Status.control_state = USB_IDLE;
62 1 }
63 /******************************************************************************/
64
65 /****************************终端点0输入处理**************************************/
66 void endp0_in( void)
67 {
68 1 uint16 i = Control_Data.wLength - Control_Data.wCount; //计算未发送的字节数
69 1 read_last_status(1); //清除中断寄存器标志位
70 1 Prints("ep0_in\r \0");
71 1 if (usb_flags.Status.control_state != USB_TRANSMIT)
72 1 { //非发送状态
73 2 write_endpoint_buff(1,0,0);
74 2 Prints(" ep0_in错误返回\r\0");
75 2 return; //返回
76 2 }
77 1 if (Control_Data.wLength==0)
78 1 { //非发送状态
79 2 write_endpoint_buff(1,0,0);
80 2 Prints(" ep0_in0长度写返回\r\0");
81 2 return; //返回
82 2 }
83 1 if( i >= EP0_PACKET_SIZE)
84 1 { //未发送字节数大于16,发送16个字节
85 2 write_endpoint_buff(1, EP0_PACKET_SIZE, Control_Data.pData + Control_Data.wCount);
86 2 Control_Data.wCount += EP0_PACKET_SIZE;
87 2 usb_flags.Status.not_end=1;
88 2 usb_flags.Status.control_state = USB_TRANSMIT;
89 2 Prints(" 没有写完 \r\0");
90 2 }
91 1 else if( i != 0) { //发送所有未发送的字节
92 2 write_endpoint_buff(1, i, Control_Data.pData + Control_Data.wCount);
93 2 Control_Data.wCount += i;
94 2 usb_flags.Status.control_state = USB_IDLE; //置状态为等待状态
95 2 usb_flags.Status.not_end=0;
96 2 Prints(" 写完 \r\0");
97 2 }
98 1 else if (i == 0){
99 2 write_endpoint_buff(1, 0, 0); //发送完毕,发0个字节
100 2 usb_flags.Status.control_state = USB_IDLE;
101 2 usb_flags.Status.not_end=0;
102 2 Prints(" 写空白字 \r\0");
103 2 }
104 1 }
105 /******************************************************************************/
106 void call_c9(void)
107 {Prints("进入第九章\r\0");
108 1 //如果是输入请求包
109 1 if(usb_flags.Status.control_state==USB_TRANSMIT)
110 1 {Prints(" 输入包\r\0");
111 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
112 2 {
113 3 case 0x00: //标准请求
114 3 Prints(" 输入标准请求\r\0");
115 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
C51 COMPILER V7.20 EPSETUP 09/11/2008 22:15:07 PAGE 3
116 3 {
117 4 case 0: //到设备
118 4 switch (Control_Data.DeviceRequest.bRequest)
119 4 {
120 5 case 0: get_status(0);break;
121 5 case 6: get_descriptor();break;
122 5 case 8: get_configuration();break;
123 5 default:break;
124 5 }
125 4 break;
126 4
127 4 case 1: //到接口
128 4 switch (Control_Data.DeviceRequest.bRequest)
129 4 {
130 5 case 0: get_status(1);break;
131 5 case 6: get_descriptor_interface();break;
132 5 case 10: get_interface();break;
133 5 default: break;
134 5 }
135 4 break;
136 4
137 4 case 2: //到端点
138 4 {
139 5 if(Control_Data.DeviceRequest.bRequest==0)get_status(2);
140 5 }
141 4 default: break;
142 4 }
143 3 break;
144 3
145 3 case 0x20: //类请求
146 3
147 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
148 3 {
149 4 case 0: //到设备
150 4 switch (Control_Data.DeviceRequest.bRequest)
151 4 {
152 5 default:break;
153 5 }
154 4 break;
155 4
156 4 case 1: //到接口
157 4 switch (Control_Data.DeviceRequest.bRequest)
158 4 {
159 5
160 5 case 01: get_report(); break; //获取报告
161 5 case 02: get_idle(); break; //获取空闲状态
162 5 case 03: get_protocol(); break; //获取协议
163 5 default: break;
164 5 }
165 4 break;
166 4
167 4 case 2: //到端点
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -