📄 d12ci.lst
字号:
C51 COMPILER V8.02 D12CI 03/04/2008 13:50:50 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE D12CI
OBJECT MODULE PLACED IN D12CI.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D12CI.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "EPPHAL.H"
2 #define D12_COMMAND 1
3 #define D12_DATA 0
4 #define D12_FULLEMPTY 0x01
5
6 #include "d12.h"
7 #include "uart.h"
8 sbit USB_A0 = 0xB5;
9 sbit USB_WR = 0xB6;
10 sbit USB_RD = 0xB7;
11
12
13 extern EPPFLAGS bEPPflags;
14
15
16
17
18 //使地址使能
19 void D12_SetAddress_Enable(uint8 bAddress,uint8 bEnable)
20 {
21 1 outportb(D12_COMMAND,0XD0);
22 1 if(bEnable)
23 1 bAddress|=0x80;
24 1 outportb(D12_DATA,bAddress);
25 1 }
26 //设置端点使能 何处使用?
27 void D12_SetEndpointEnable(uint8 bEnable)
28 {
29 1 outportb(D12_COMMAND,0xd8);
30 1 if(bEnable)
31 1 outportb(D12_DATA,1);
32 1 else
33 1 outportb(D12_DATA,0);
34 1 }
35 //设置模式命令
36 void D12_SetMode(uint8 bConfig,uint8 bClkDiv)
37 {
38 1 outportb(D12_COMMAND,0xf3);
39 1 outportb(D12_DATA,bConfig);
40 1 outportb(D12_DATA,bClkDiv);
41 1 }
42 //设置DMA
43 void D12_SetDMA(uint8 bMode)
44 {
45 1 outportb(D12_COMMAND,0xfb);
46 1 outportb(D12_DATA,bMode);
47 1 }
48 //读取中断寄存器
49 uint16 D12_ReadInterruptRegister(void)
50 {
51 1 uint8 b1;
52 1 uint16 j;
53 1 outportb(D12_COMMAND,0xf4);
54 1 b1=inportb(D12_DATA);
55 1 j=inportb(D12_DATA);
C51 COMPILER V8.02 D12CI 03/04/2008 13:50:50 PAGE 2
56 1 j<<=8;
57 1 j+=b1;
58 1 return j;
59 1 }
60 //端点选择命令
61 uint8 D12_SelectEndpoint(uint8 bEndp)
62 {
63 1 uint8 c;
64 1 outportb(D12_COMMAND,bEndp);
65 1 c=inportb(D12_DATA);
66 1 return c;
67 1 }
68 //读取最后处理状态
69 uint8 D12_ReadLastTransactionStatus(uint8 bEndp)
70 {
71 1 outportb(D12_COMMAND,0x40+bEndp);
72 1 return inportb(D12_DATA);
73 1 }
74 //设置端点状态
75 void D12_SetEndpointStatus(uint8 bEndp,uint8 bStalled)
76 {
77 1 outportb(D12_COMMAND,0x40+bEndp);
78 1 outportb(D12_DATA,bStalled);
79 1 }
80 //发送恢复命令
81 void D12_SendResume(void)
82 {
83 1 outportb(D12_COMMAND,0xf6);
84 1 }
85 //读取当前帧状态
86 uint16 D12_ReadCurrentFrameNumber(void)
87 {
88 1 uint16 i,j;
89 1 outportb(D12_COMMAND,0xf5);
90 1 i=inportb(D12_DATA);
91 1 j=inportb(D12_DATA);
92 1 i+=(j<<8);
93 1 return i;
94 1 }
95 //读取端点数据
96 uint8 D12_ReadEndpoint(uint8 endp,uint8 len,uint8 *buf)
97 {
98 1 uint8 i,j;
99 1 Prints("\r\nReadEndpoint\r\n");
100 1 outportb(D12_COMMAND,endp);
101 1 if((inportb(D12_DATA)&D12_FULLEMPTY)==0) //当前端点缓存为空,返回
102 1 return 0;
103 1 outportb(D12_COMMAND,0x80+endp);
104 1 i=inportb(D12_DATA);
105 1 i=i&0x60;
106 1 Prints("buff=="); //缓存满否
107 1 PrintShortIntHex(i);
108 1
109 1 if(endp==2)
110 1 {
111 2 if(i==0x60)
112 2 bEPPflags.bits.ep1buf_full=1; //端点1缓存满
113 2 else
114 2 bEPPflags.bits.ep1buf_full=0;
115 2 }
116 1 if(endp==4)
117 1 {
C51 COMPILER V8.02 D12CI 03/04/2008 13:50:50 PAGE 3
118 2 if(i==0x60)
119 2 bEPPflags.bits.ep2buf_full=1;
120 2 else
121 2 bEPPflags.bits.ep2buf_full=0;
122 2 }
123 1 outportb(D12_COMMAND,0xf0); //读缓存区
124 1 j=inportb(D12_DATA);
125 1 j=inportb(D12_DATA);
126 1 if(j>len)
127 1 j=len;
128 1 Prints("\r\nlen=");
129 1 PrintShortIntHex(len);
130 1 for(i=0;i<j;i++)
131 1 PrintShortIntHex(*(buf+i)=inportb(D12_DATA));
132 1 outportb(D12_COMMAND,0xf2); //清缓存
133 1 return j;
134 1 }
135 //把数据写入端点
136 uint8 D12_WriteEndpoint(uint8 endp,uint8 len,uint8 * buf)
137 {
138 1 uint8 i;
139 1 outportb(D12_COMMAND,endp);
140 1 inportb(D12_DATA);
141 1 outportb(D12_COMMAND,0xf0); //写缓存
142 1 outportb(D12_DATA,0);
143 1 outportb(D12_DATA,len);
144 1 Prints("\r\n写入的数据是");
145 1 for(i=0;i<len;i++)
146 1 {
147 2 outportb(D12_DATA,*(buf+i));
148 2 PrintHex(*(buf+i));
149 2 }
150 1
151 1 outportb(D12_COMMAND,0xfa);
152 1 outportb(D12_COMMAND,0x80+endp);
153 1 i=inportb(D12_DATA);
154 1 Prints("\r\n端点满否i=");
155 1 PrintHex(i);
156 1 return len;
157 1 }
158 /*void write_a_usb_data(uint8 usb_data)
159 {
160 USB_A0=0;
161 P0=usb_data;
162 USB_WR=0;
163 USB_WR=1;
164 P0=0XFF;
165 }
166 //写端点2
167 /*uint8 write_endpoint_buff(uint8 endp,uint8 len,uint8 * buff)
168 {
169 uint8 i;
170 D12_ReadLastTransactionStatus(endp);
171 outportb(D12_COMMAND,endp);
172 outportb(D12_COMMAND,0xf0);
173 write_a_usb_data(0);
174 write_a_usb_data(len);
175 Prints("\r\n写入数据");
176
177 for(i=0;i<len;i++)
178 {
179 P0=*(buff+i);
C51 COMPILER V8.02 D12CI 03/04/2008 13:50:50 PAGE 4
180 PrintHex(*(buff+i));
181
182 USB_WR=0;
183 USB_WR=1;
184
185 //PrintHex(*(buff+i));
186
187 }
188
189 P0=0xFF;
190 outportb(D12_COMMAND,0xfa);
191 outportb(D12_COMMAND,0x80+endp);
192 i=inportb(D12_DATA);
193 Prints("\r\n端点满否i=");
194 PrintHex(i);
195 return len;
196 } */
197 //端点应答处理
198 void D12_AcknowledgeEndpoint(uint8 endp)
199 {
200 1 outportb(D12_COMMAND,endp);
201 1 outportb(D12_COMMAND,0xf1);
202 1 if(endp==0)
203 1 outportb(D12_COMMAND,0xf2); //清缓存
204 1 }
205
206 //读取端点状态
207 unsigned char D12_ReadEndpointStatus(uint8 bEndp)
208 {
209 1 unsigned char c;
210 1
211 1 if(bEPPflags.bits.in_isr == 0)
212 1 EA=0;
213 1
214 1 outportb(D12_COMMAND, 0x80 + bEndp);//读取端点状态
215 1 c = inportb(D12_DATA);
216 1
217 1 if(bEPPflags.bits.in_isr == 0)
218 1 EA=1;
219 1
220 1 return c;
221 1 }
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
C51 COMPILER V8.02 D12CI 03/04/2008 13:50:50 PAGE 5
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 660 ----
CONSTANT SIZE = 59 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 24
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -