📄 d12ci.lst
字号:
C51 COMPILER V7.06 D12CI 09/15/2008 18:19:56 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE D12CI
OBJECT MODULE PLACED IN D12CI.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE D12CI.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //接口控制驱动层
2
3 #include <reg52.h>
4 #include "D12Config.h"
5 #include "D12HAL.h"
6 #include "D12CI.h"
7 #include "Chap_9.h"
8
9 INT16U D12_ReadChipID(void)
10 {
11 1 INT16U i,j;
12 1
13 1 if(bEPPflags.bits.in_isr == 0)
14 1 DISABLE();
15 1
16 1 outportb(D12_COMMAND, 0xFD); //发送读PDIUSBD12芯片ID号命令
17 1 i=inportb(D12_DATA); //读取ID号低字节
18 1 j=inportb(D12_DATA); //读取ID号高位字节
19 1 i += (j<<8); //组成16位的PDIUSBD12芯片ID号
20 1
21 1 if(bEPPflags.bits.in_isr == 0)
22 1 ENABLE();
23 1
24 1 return i;
25 1 }
26
27
28 void D12_SetAddressEnable(INT8U bAddress, INT8U bEnable)
29 {
30 1 if(bEPPflags.bits.in_isr == 0)
31 1 DISABLE();
32 1
33 1 outportb(D12_COMMAND, 0xD0); //输出设置地址/使能指令
34 1 if(bEnable)
35 1 bAddress |= 0x80; //bit7置1,使能
36 1 outportb(D12_DATA, bAddress); //输出设置值
37 1
38 1 if(bEPPflags.bits.in_isr == 0)
39 1 ENABLE();
40 1 }
41
42
43 void D12_SetEndpointEnable(INT8U bEnable)
44 {
45 1 if(bEPPflags.bits.in_isr == 0)
46 1 DISABLE();
47 1
48 1 outportb(D12_COMMAND, 0xD8); //输出设置端点使能指令
49 1 if(bEnable)
50 1 outportb(D12_DATA, 1); //设置端点允许
51 1 else
52 1 outportb(D12_DATA, 0); //设置端点禁止
53 1
54 1 if(bEPPflags.bits.in_isr == 0)
55 1 ENABLE();
C51 COMPILER V7.06 D12CI 09/15/2008 18:19:56 PAGE 2
56 1 }
57
58
59 void D12_SetMode(INT8U bConfig,INT8U bClkDiv)
60 {
61 1 if(bEPPflags.bits.in_isr == 0)
62 1 DISABLE();
63 1
64 1 outportb(D12_COMMAND, 0xF3); //输出设置模式指令
65 1 outportb(D12_DATA, bConfig); //输出配置字节信息
66 1 outportb(D12_DATA, bClkDiv); //输出时钟分频因数字节
67 1
68 1 if(bEPPflags.bits.in_isr == 0)
69 1 ENABLE();
70 1 }
71
72
73 void D12_SetDMA(INT8U bMode)
74 {
75 1 if(bEPPflags.bits.in_isr == 0)
76 1 DISABLE();
77 1
78 1 outportb(D12_COMMAND, 0xFB); //设置DMA工作方命令
79 1 outportb(D12_DATA, bMode); //输出设置值
80 1
81 1 if(bEPPflags.bits.in_isr == 0)
82 1 ENABLE();
83 1 }
84
85
86 INT16U D12_ReadInterruptRegister(void)
87 {
88 1 INT8U b1;
89 1 INT16U j;
90 1
91 1 outportb(D12_COMMAND, 0xF4);
92 1 b1 = inportb(D12_DATA);
93 1 j = inportb(D12_DATA);
94 1 j <<= 8;
95 1 j += b1;
96 1
97 1 return j;
98 1 }
99
100
101 INT8U D12_SelectEndpoint(INT8U bEndp)
102 {
103 1 INT8U c;
104 1
105 1 if(bEPPflags.bits.in_isr == 0)
106 1 DISABLE();
107 1
108 1 outportb(D12_COMMAND, bEndp); //端点选择
109 1 c = inportb(D12_DATA); //读出一个字节
110 1
111 1 if(bEPPflags.bits.in_isr == 0)
112 1 ENABLE();
113 1
114 1 return c;
115 1 }
116
117
C51 COMPILER V7.06 D12CI 09/15/2008 18:19:56 PAGE 3
118 #if D12_ReadEndpointStatus_EN
INT8U D12_ReadEndpointStatus(INT8U bEndp)
{
INT8U c;
if(bEPPflags.bits.in_isr == 0)
DISABLE();
outportb(D12_COMMAND,0x80+bEndp); //读取端点状态命令
c = inportb(D12_DATA); //读取端点状态
if(bEPPflags.bits.in_isr == 0)
ENABLE();
return c;
}
#endif
135
136
137 INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
138 {
139 1 outportb(D12_COMMAND, 0x40 + bEndp); //输出读取最后处理状态寄存器命令
140 1 return inportb(D12_DATA);
141 1 }
142
143
144 void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled)
145 {
146 1 if(bEPPflags.bits.in_isr == 0)
147 1 DISABLE();
148 1
149 1 outportb(D12_COMMAND, 0x40 + bEndp); //发送设置端点状态命令
150 1 outportb(D12_DATA,bStalled); //设置端点状态
151 1
152 1 if(bEPPflags.bits.in_isr == 0)
153 1 ENABLE();
154 1 }
155
156
157 #if D12_SendResume_EN
void D12_SendResume(void)
{
outportb(D12_COMMAND,0xF6); //设置发送恢复
}
#endif
163
164
165
166 #if D12_ReadCurrentFrameNumber_EN
INT16U D12_ReadCurrentFrameNumber(void)
{
INT16U i,j;
if(bEPPflags.bits.in_isr == 0)
DISABLE();
outportb(D12_COMMAND,0xF5); //发送读取当前帧数目命令
i= inportb(D12_DATA);
j = inportb(D12_DATA);
i += (j<<8);
C51 COMPILER V7.06 D12CI 09/15/2008 18:19:56 PAGE 4
if(bEPPflags.bits.in_isr == 0)
ENABLE();
return i; //返目当前帧数目
}
#endif
186
187
188
189 INT8U D12_ReadEndpoint(INT8U endp,INT8U len,INT8U * buf)
190 {
191 1 INT8U i, j;
192 1
193 1 if(bEPPflags.bits.in_isr == 0)
194 1 DISABLE();
195 1
196 1 outportb(D12_COMMAND,endp); //发送选择端点命令
197 1 if((inportb(D12_DATA)&D12_FULLEMPTY) == 0)
198 1 { //如果缓冲区为空
199 2 if(bEPPflags.bits.in_isr == 0)
200 2 ENABLE();
201 2 return 0; //则返回读到0字节
202 2 }
203 1
204 1 outportb(D12_COMMAND,0xF0); //发送读缓冲区命令
205 1 j = inportb(D12_DATA); //读取保留字节
206 1 j = inportb(D12_DATA); //读取数据字节的数目/长度
207 1
208 1 if(j > len)
209 1 j = len;
210 1
211 1 for(i=0; i<j; i++)
212 1 {
213 2 *(buf+i) = inportb(D12_DATA); //读取要求的字节数目/长度
214 2 }
215 1
216 1 outportb(D12_COMMAND,0xF2); //清缓冲区,新的信息包才可以重新被接受
217 1
218 1 if(bEPPflags.bits.in_isr == 0)
219 1 ENABLE();
220 1
221 1 return j; //返回读到的字节数
222 1 }
223
224
225 INT8U D12_WriteEndpoint(INT8U endp, INT8U len,INT8U * buf)
226 {
227 1 INT8U i;
228 1
229 1 if(bEPPflags.bits.in_isr == 0)
230 1 DISABLE();
231 1
232 1 outportb(D12_COMMAND, endp); //发送选择端点命令
233 1 i = inportb(D12_DATA);
234 1
235 1 outportb(D12_COMMAND, 0xF0); //发送写缓冲区命令
236 1 outportb(D12_DATA, 0); //写入一个保留字节
237 1 outportb(D12_DATA, len); //写入即将写入的字节数目
238 1
239 1 for(i=0; i<len; i++)
240 1 outportb(D12_DATA, *(buf+i));
241 1
C51 COMPILER V7.06 D12CI 09/15/2008 18:19:56 PAGE 5
242 1 outportb(D12_COMMAND, 0xFA); //使缓冲区有效
243 1
244 1 if(bEPPflags.bits.in_isr == 0)
245 1 ENABLE();
246 1
247 1 return len; //返回写入的字节数
248 1 }
249
250
251 void D12_AcknowledgeEndpoint(INT8U endp)
252 {
253 1 outportb(D12_COMMAND, endp); //选择端点
254 1 outportb(D12_COMMAND, 0xF1); //应答Setup指令
255 1 if(endp == 0)
256 1 outportb(D12_COMMAND, 0xF2); //清空该端点缓冲区
257 1 }
258
259
260 #if D12_ClearBuff_EN
void D12_ClearBuff(INT8U endp)
{
outportb(D12_COMMAND, endp); //选择端点
outportb(D12_COMMAND, 0xF2); //清空第1个缓冲区
if (endp >= 4)
{
outportb(D12_COMMAND, endp); //选择端点
outportb(D12_COMMAND, 0xF2); //清空第2个缓冲区
}
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 620 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
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 + -