📄 d12ci.lst
字号:
C51 COMPILER V7.50 D12CI 04/16/2007 15:22:44 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE D12CI
OBJECT MODULE PLACED IN .\Obj\D12ci.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\Driver\Usb\D12ci.c LARGE OPTIMIZE(2,SPEED) BROWSE MODP2 PRINT(.\Obj\D
-12ci.lst) OBJECT(.\Obj\D12ci.obj)
line level source
1 #include "..\inc\includes.h"
2 #include "epphal.h"
3 #include "D12ci.h"
4 #include "mainloop.h"
5
6 /*
7 sbit USBA0 = P2^0;
8 sbit USBReset = P2^1;
9 sbit SimWR = P2^2;
10 sbit SimRD = P2^3;
11 */
12
13 EPPFLAGS bEPPflags;
14
15 //extern EPPFLAGS bEPPflags;
16
17 //设置地址使能,将入口的地址值写入D12并使能。
18 void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
19 {
20 1 if(bEPPflags.bits.in_isr == 0)
21 1 DISABLE;
22 1
23 1
24 1 //outportb( 0xD0);//输出指令
25 1 D12_WriteCommand(0xD0);
26 1 if(bEnable)
27 1 bAddress |= 0x80;
28 1 //D12_WriteData( bAddress);//设置地址
29 1 D12_WriteData(bAddress);
30 1
31 1 if(bEPPflags.bits.in_isr == 0)
32 1 ENABLE;
33 1 }
34
35 //设置端点使能
36 void D12_SetEndpointEnable(unsigned char bEnable)
37 {
38 1 if(bEPPflags.bits.in_isr == 0)
39 1 DISABLE;
40 1
41 1 D12_WriteCommand( 0xD8);//输出指令
42 1 if(bEnable)
43 1 D12_WriteData( 1);//设置端点允许
44 1 else
45 1 D12_WriteData( 0);//设置端点禁止
46 1
47 1 if(bEPPflags.bits.in_isr == 0)
48 1 ENABLE;
49 1 }
50
51 //模式设置
52 void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
53 {
54 1 if(bEPPflags.bits.in_isr == 0)
C51 COMPILER V7.50 D12CI 04/16/2007 15:22:44 PAGE 2
55 1 DISABLE;
56 1
57 1 D12_WriteCommand( 0xF3);//设置模式
58 1 D12_WriteData( bConfig);
59 1 D12_WriteData( bClkDiv);
60 1
61 1 if(bEPPflags.bits.in_isr == 0)
62 1 ENABLE;
63 1 }
64
65 //DMA工作方式设置
66 void D12_SetDMA(unsigned char bMode)
67 {
68 1 if(bEPPflags.bits.in_isr == 0)
69 1 DISABLE;
70 1
71 1 D12_WriteCommand( 0xFB);//设置DMA工作方式
72 1 D12_WriteData( bMode);
73 1
74 1 if(bEPPflags.bits.in_isr == 0)
75 1 ENABLE;
76 1 }
77 //----------数据流命令----------------------------
78 //读取中断寄存器
79 unsigned short D12_ReadInterruptRegister(void)
80 {
81 1 unsigned char b1;
82 1 unsigned int j;
83 1
84 1 D12_WriteCommand( 0xF4);//读取中断寄存器
85 1 b1 = D12_ReadData();
86 1 j = D12_ReadData();
87 1
88 1 j <<= 8;
89 1 j += b1;
90 1
91 1 return j;
92 1 }
93
94 //端点选择
95 //返回所选端点是否满或空
96 unsigned char D12_SelectEndpoint(unsigned char bEndp)
97 {
98 1 unsigned char c;
99 1
100 1 if(bEPPflags.bits.in_isr == 0)
101 1 DISABLE;
102 1
103 1 D12_WriteCommand( bEndp);//端点选择
104 1 c = D12_ReadData();
105 1
106 1 if(bEPPflags.bits.in_isr == 0)
107 1 ENABLE;
108 1
109 1 return c;
110 1 }
111
112 //读取最后传输状态,并复位中断寄存器。
113 unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
114 {
115 1 D12_WriteCommand( 0x40 + bEndp);//返回最后传输状态
116 1 return D12_ReadData();
C51 COMPILER V7.50 D12CI 04/16/2007 15:22:44 PAGE 3
117 1 }
118
119 //读取端点状态
120 unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
121 {
122 1 unsigned char c;
123 1
124 1 if(bEPPflags.bits.in_isr == 0)
125 1 DISABLE;
126 1
127 1 D12_WriteCommand( 0x80 + bEndp);//读取端点状态
128 1 c = D12_ReadData();
129 1
130 1 if(bEPPflags.bits.in_isr == 0)
131 1 ENABLE;
132 1
133 1 return c;
134 1 }
135
136 //设置端点状态
137 void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
138 {
139 1 if(bEPPflags.bits.in_isr == 0)
140 1 DISABLE;
141 1
142 1 D12_WriteCommand( 0x40 + bEndp);//设置端点状态
143 1 D12_WriteData( bStalled);
144 1
145 1 if(bEPPflags.bits.in_isr == 0)
146 1 ENABLE;
147 1 }
148 /*
149 //传输恢复
150 void D12_SendResume(void)
151 {
152 outportb( 0xF6);//设置发送恢复
153 }
154 */
155
156 /*
157 //读取当前帧号
158 unsigned short D12_ReadCurrentFrameNumber(void)
159 {
160 unsigned short i,j;
161
162 if(bEPPflags.bits.in_isr == 0)
163 DISABLE;
164
165 outportb( 0xF5);//读取当前帧数目
166 i= D12_ReadData();
167 j = D12_ReadData();
168
169 i += (j<<8);
170
171 if(bEPPflags.bits.in_isr == 0)
172 ENABLE;
173
174 return i;
175 }
176 */
177
178 unsigned short D12_ReadChipID(void)
C51 COMPILER V7.50 D12CI 04/16/2007 15:22:44 PAGE 4
179 {
180 1 unsigned short i,j;
181 1
182 1 if(bEPPflags.bits.in_isr == 0)
183 1 DISABLE;
184 1
185 1 D12_WriteCommand( 0xFD);
186 1 i=D12_ReadData();
187 1 j=D12_ReadData();
188 1 i += (j<<8);
189 1
190 1 if(bEPPflags.bits.in_isr == 0)
191 1 ENABLE;
192 1
193 1 return i;
194 1 }
195
196 //功能介绍:读取端点数据
197 //入口参数:1。端点号2。数据长度,3读取数据存放的缓冲区指针。
198 //出口参数:读取到的字节数据数
199 //备注:
200 unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
201 {
202 1 unsigned char i, j;
203 1
204 1 if(bEPPflags.bits.in_isr == 0)
205 1 DISABLE;
206 1
207 1 D12_WriteCommand( endp); //选择端点
208 1 if((D12_ReadData() & D12_FULLEMPTY) == 0)
209 1 {
210 2 if(bEPPflags.bits.in_isr == 0)
211 2 ENABLE;
212 2 return 0; //端点为空则返回
213 2 }
214 1
215 1 D12_WriteCommand( 0xF0); //读缓冲区,读多个字节
216 1 j = D12_ReadData(); //无用
217 1 j = D12_ReadData(); //数据长度
218 1
219 1 if(j > len)
220 1 j = len;
221 1
222 1 for(i=0; i<j; i++)
223 1 {
224 2 *(buf+i) = D12_ReadData();
225 2 }
226 1 /*
227 1 USBA0 = 0;
228 1
229 1 for(i=0; i<j; i++)
230 1 {
231 1 SimRD = 0;
232 1 *(buf+i) = P0;
233 1 SimRD = 1;
234 1 }
235 1 */
236 1 D12_WriteCommand( 0xF2); //清缓冲区
237 1
238 1 if(bEPPflags.bits.in_isr == 0) //恢复现场后返回接收到的数据长度
239 1 ENABLE;
240 1
C51 COMPILER V7.50 D12CI 04/16/2007 15:22:44 PAGE 5
241 1 return j;
242 1 }
243
244 //功能介绍:写数据到端点
245 //入口参数:1。端点号 2,待写数据长度,3,数据缓冲区
246 //出口参数:写入数据的长度
247 //备注:
248 unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
249 {
250 1 unsigned char i;
251 1
252 1 if(bEPPflags.bits.in_isr == 0)
253 1 DISABLE;
254 1
255 1 D12_WriteCommand( endp); //选择端点
256 1 i = D12_ReadData();
257 1
258 1 D12_WriteCommand( 0xF0); //写数据到端点
259 1 D12_WriteData( 0); //无用字节
260 1 D12_WriteData( len); //数据长度
261 1
262 1
263 1 for(i=0; i<len; i++)
264 1 {
265 2 D12_WriteData( *(buf+i));
266 2 }
267 1 /*
268 1 USBA0 = 0;
269 1 for(i=0; i<len; i++)
270 1 {
271 1 P0 = *(buf+i);
272 1
273 1 SimWR = 0;
274 1 // _nop_();
275 1 SimWR = 1;
276 1 }
277 1 */
278 1 D12_WriteCommand( 0xFA); //使缓冲区有效
279 1
280 1 if(bEPPflags.bits.in_isr == 0) //恢复现场
281 1 ENABLE;
282 1
283 1 return len;
284 1 }
285
286 //设置端点应答
287 void D12_AcknowledgeEndpoint(unsigned char endp)
288 {
289 1 D12_WriteCommand( endp);
290 1 D12_WriteCommand( 0xF1);
291 1 if(endp == 0)
292 1 D12_WriteCommand( 0xF2);
293 1 }
294
295
296 //断开USB总线
297 void D12_DisConnect(void)
298 {
299 1 // Initialize D12 configuration
300 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
301 1 }
302
C51 COMPILER V7.50 D12CI 04/16/2007 15:22:44 PAGE 6
303 //连接USB总线
304 void D12_Connect(void)
305 {
306 1 DISABLE;
307 1 bEPPflags.value = 0;//清除所有状态
308 1 ENABLE;
309 1
310 1 D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
311 1 // Initialize D12 configuration
312 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
313 1 }
314
315
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1072 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 34
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -