📄 d12ci.lst
字号:
C51 COMPILER V8.02 D12CI 03/28/2009 00:39:52 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE D12CI
OBJECT MODULE PLACED IN D12CI.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE D12CI.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*本文件定义了PDIUSBD12的命令函数,根据需要进行增减。*/
2 #ifdef __C51__
3 #include <reg51.h> /* special function register declarations */
4 #else
#include <absacc.h>
#endif
7
8 #include "mainloop.h"
9 #include "d12ci.h"
10 #include "epphal.h"
11
12 #define D12_DATA 0x02
13 #define D12_COMMAND 0x03
14
15 extern EPPFLAGS bEPPflags;
16
17 /*设置/使能地址命令:D0H*/
18 void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
19 {
20 1 if(bEPPflags.bits.in_isr == 0)
21 1 DISABLE;//EA=0
22 1 outportb(D12_COMMAND, 0xD0);
23 1 if(bEnable)
24 1 bAddress |= 0x80;
25 1 outportb(D12_DATA, bAddress);
26 1 if(bEPPflags.bits.in_isr == 0)
27 1 ENABLE;//EA=1
28 1 }
29
30 /*设置端点使能命令:D8H*/
31 void D12_SetEndpointEnable(unsigned char bEnable)
32 {
33 1 if(bEPPflags.bits.in_isr == 0)
34 1 DISABLE;
35 1 outportb(D12_COMMAND, 0xD8);
36 1 if(bEnable)
37 1 outportb(D12_DATA, 1);
38 1 else
39 1 outportb(D12_DATA, 0);
40 1 if(bEPPflags.bits.in_isr == 0)
41 1 ENABLE;
42 1 }
43
44 /*设置模式命令:F3H*/
45 void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
46 {
47 1 if(bEPPflags.bits.in_isr == 0)
48 1 DISABLE;
49 1 outportb(D12_COMMAND, 0xF3);
50 1 outportb(D12_DATA, bConfig);
51 1 outportb(D12_DATA, bClkDiv);
52 1 if(bEPPflags.bits.in_isr == 0)
53 1 ENABLE;
54 1 }
55
C51 COMPILER V8.02 D12CI 03/28/2009 00:39:52 PAGE 2
56 /*设置DMA命令:FBH*/
57 void D12_SetDMA(unsigned char bMode)
58 {
59 1 if(bEPPflags.bits.in_isr == 0)
60 1 DISABLE;
61 1 outportb(D12_COMMAND, 0xFB);
62 1 outportb(D12_DATA, bMode);
63 1 if(bEPPflags.bits.in_isr == 0)
64 1 ENABLE;
65 1 }
66
67 /*读中断寄存器命令:F4H*/
68 unsigned short D12_ReadInterruptRegister(void)
69 {
70 1 unsigned char b1;
71 1 unsigned int j;
72 1 outportb(D12_COMMAND, 0xF4);
73 1 b1 = inportb(D12_DATA);
74 1 j = inportb(D12_DATA);
75 1 j <<= 8;
76 1 j += b1;
77 1 return j;
78 1 }
79
80 /*选择端点命令:00~05H*/
81 unsigned char D12_SelectEndpoint(unsigned char bEndp)
82 {
83 1 unsigned char c;
84 1 if(bEPPflags.bits.in_isr == 0)
85 1 DISABLE;
86 1 outportb(D12_COMMAND, bEndp);
87 1 c = inportb(D12_DATA);
88 1 if(bEPPflags.bits.in_isr == 0)
89 1 ENABLE;
90 1 return c;
91 1 }
92
93 /*读最后处理状态寄存器命令:40~45H*/
94 unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
95 {
96 1 outportb(D12_COMMAND, 0x40 + bEndp);
97 1 return inportb(D12_DATA);
98 1 }
99
100
101 /*设置端点状态命令:40~45H*/
102 void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
103 {
104 1 if(bEPPflags.bits.in_isr == 0)
105 1 DISABLE;
106 1 outportb(D12_COMMAND, 0x40 + bEndp);
107 1 outportb(D12_DATA, bStalled);
108 1 if(bEPPflags.bits.in_isr == 0)
109 1 ENABLE;
110 1 }
111
112
113 /*设置端点状态命令:40~45H,专用于中断函数中*/
114 void D12_SetEndpointStatusIsr(unsigned char bEndp, unsigned char bStalled)
115 {
116 1 if(bEPPflags.bits.in_isr == 0)
117 1 DISABLE;
C51 COMPILER V8.02 D12CI 03/28/2009 00:39:52 PAGE 3
118 1 outportb(D12_COMMAND, 0x40 + bEndp);
119 1 outportb(D12_DATA, bStalled);
120 1 if(bEPPflags.bits.in_isr == 0)
121 1 ENABLE;
122 1 }
123
124
125 /*读端点缓冲区同时清缓冲区,包含读缓冲区命令:F0H*/
126 /*以及清缓冲区命令:F2H*/
127 unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len,unsigned char * buf)
128 {
129 1 unsigned char i, j;
130 1 if(bEPPflags.bits.in_isr == 0)
131 1 DISABLE;
132 1 outportb(D12_COMMAND, endp);
133 1 if((inportb(D12_DATA) & D12_FULLEMPTY) == 0)
134 1 {
135 2 if(bEPPflags.bits.in_isr == 0)
136 2 ENABLE;
137 2 return 0;
138 2 }
139 1 outportb(D12_COMMAND, 0xF0);
140 1 j = inportb(D12_DATA);
141 1 j = inportb(D12_DATA);
142 1 if(j > len)
143 1 j = len;
144 1 for(i=0; i<j; i++)
145 1 *(buf+i) = inportb(D12_DATA);
146 1 outportb(D12_COMMAND, 0xF2);
147 1 if(bEPPflags.bits.in_isr == 0)
148 1 ENABLE;
149 1 return j;
150 1 }
151
152
153 /*写端点缓冲区同时使缓冲区有效,包含写缓冲区命令:F0H*/
154 /*以及使缓冲区有效命令:FAH*/
155 unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len,unsigned char * buf)
156 {
157 1 unsigned char i;
158 1 if(bEPPflags.bits.in_isr == 0)
159 1 DISABLE;
160 1 outportb(D12_COMMAND, endp);
161 1 inportb(D12_DATA);
162 1 outportb(D12_COMMAND, 0xF0);
163 1 outportb(D12_DATA, 0);
164 1 outportb(D12_DATA, len);
165 1 for(i=0; i<len; i++)
166 1 outportb(D12_DATA, *(buf+i));
167 1 outportb(D12_COMMAND, 0xFA);
168 1 if(bEPPflags.bits.in_isr == 0)
169 1 ENABLE;
170 1 return len;
171 1 }
172
173 /*写端点缓冲区同时使缓冲区有效,专用于中断函数*/
174 unsigned char D12_WriteEndpointIsr(unsigned char endp, unsigned char len,unsigned char * buf)
175 {
176 1 unsigned char i;
177 1 if(bEPPflags.bits.in_isr == 0)
178 1 DISABLE;
179 1 outportb(D12_COMMAND, endp);
C51 COMPILER V8.02 D12CI 03/28/2009 00:39:52 PAGE 4
180 1 inportb(D12_DATA);
181 1 outportb(D12_COMMAND, 0xF0);
182 1 outportb(D12_DATA, 0);
183 1 outportb(D12_DATA, len);
184 1 for(i=0; i<len; i++)
185 1 outportb(D12_DATA, *(buf+i));
186 1 outportb(D12_COMMAND, 0xFA);
187 1 if(bEPPflags.bits.in_isr == 0)
188 1 ENABLE;
189 1 return len;
190 1 }
191
192 /*应答SETUP命令:F1H*/
193 void D12_AcknowledgeEndpoint(unsigned char endp)
194 {
195 1 outportb(D12_COMMAND, endp);
196 1 outportb(D12_COMMAND, 0xF1);
197 1 if(endp == 0)
198 1 outportb(D12_COMMAND, 0xF2);
199 1 }
200
201 /*void D12_SendResume(void)
202 {
203 outportb(D12_COMMAND, 0xF6);
204 }
205
206 unsigned short D12_ReadCurrentFrameNumber(void)
207 {
208 unsigned short i,j;
209 if(bEPPflags.bits.in_isr == 0)
210 DISABLE;
211 outportb(D12_COMMAND, 0xF5);
212 i= inportb(D12_DATA);
213 j = inportb(D12_DATA);
214 i += (j<<8);
215 if(bEPPflags.bits.in_isr == 0)
216 ENABLE;
217 return i;
218 }*/
219
220 unsigned short D12_ReadChipID(void)
221 {
222 1 unsigned short i,j;
223 1 if(bEPPflags.bits.in_isr == 0)
224 1 DISABLE;
225 1 outportb(D12_COMMAND, 0xFD);
226 1 i=inportb(D12_DATA);
227 1 j=inportb(D12_DATA);
228 1 i += (j<<8);
229 1 if(bEPPflags.bits.in_isr == 0)
230 1 ENABLE;
231 1 return i;
232 1 }
233
234 /*unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
235 {
236 unsigned char c;
237 if(bEPPflags.bits.in_isr == 0)
238 DISABLE;
239 outportb(D12_COMMAND, 0x80 + bEndp);
240 c = inportb(D12_DATA);
241 if(bEPPflags.bits.in_isr == 0)
C51 COMPILER V8.02 D12CI 03/28/2009 00:39:52 PAGE 5
242 ENABLE;
243 return c;
244 }*/
245
246
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 786 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 28
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 + -