📄 d12ci.lst
字号:
C51 COMPILER V7.02a D12CI 09/20/2005 15:09:59 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE D12CI
OBJECT MODULE PLACED IN D12CI.OBJ
COMPILER INVOKED BY: D:\Program Files\Keilc7\C51\BIN\C51.EXE D12CI.c BROWSE DEBUG OBJECTEXTEND
stmt 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 0xFB02
13 #define D12_COMMAND 0xFB03
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 V7.02a D12CI 09/20/2005 15:09:59 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 /*设置端点状态命令:40~45H*/
101 void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
102 {
103 1 if(bEPPflags.bits.in_isr == 0)
104 1 DISABLE;
105 1 outportb(D12_COMMAND, 0x40 + bEndp);
106 1 outportb(D12_DATA, bStalled);
107 1 if(bEPPflags.bits.in_isr == 0)
108 1 ENABLE;
109 1 }
110
111 /*设置端点状态命令:40~45H,专用于中断函数中*/
112 void D12_SetEndpointStatusIsr(unsigned char bEndp, unsigned char bStalled)
113 {
114 1 if(bEPPflags.bits.in_isr == 0)
115 1 DISABLE;
116 1 outportb(D12_COMMAND, 0x40 + bEndp);
117 1 outportb(D12_DATA, bStalled);
C51 COMPILER V7.02a D12CI 09/20/2005 15:09:59 PAGE 3
118 1 if(bEPPflags.bits.in_isr == 0)
119 1 ENABLE;
120 1 }
121
122
123 /*读端点缓冲区同时清缓冲区,包含读缓冲区命令:F0H*/
124 /*以及清缓冲区命令:F2H*/
125 unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len,unsigned char * buf)
126 {
127 1 unsigned char i, j;
128 1 if(bEPPflags.bits.in_isr == 0)
129 1 DISABLE;
130 1 outportb(D12_COMMAND, endp);
131 1 if((inportb(D12_DATA) & D12_FULLEMPTY) == 0)
132 1 {
133 2 if(bEPPflags.bits.in_isr == 0)
134 2 ENABLE;
135 2 return 0;
136 2 }
137 1 outportb(D12_COMMAND, 0xF0);
138 1 j = inportb(D12_DATA);
139 1 j = inportb(D12_DATA);
140 1 if(j > len)
141 1 j = len;
142 1 for(i=0; i<j; i++)
143 1 *(buf+i) = inportb(D12_DATA);
144 1 outportb(D12_COMMAND, 0xF2);
145 1 if(bEPPflags.bits.in_isr == 0)
146 1 ENABLE;
147 1 return j;
148 1 }
149
150
151 /*写端点缓冲区同时使缓冲区有效,包含写缓冲区命令:F0H*/
152 /*以及使缓冲区有效命令:FAH*/
153 unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len,unsigned char * buf)
154 {
155 1 unsigned char i;
156 1 if(bEPPflags.bits.in_isr == 0)
157 1 DISABLE;
158 1 outportb(D12_COMMAND, endp);
159 1 inportb(D12_DATA);
160 1 outportb(D12_COMMAND, 0xF0);
161 1 outportb(D12_DATA, 0);
162 1 outportb(D12_DATA, len);
163 1 for(i=0; i<len; i++)
164 1 outportb(D12_DATA, *(buf+i));
165 1 outportb(D12_COMMAND, 0xFA);
166 1 if(bEPPflags.bits.in_isr == 0)
167 1 ENABLE;
168 1 return len;
169 1 }
170
171 /*写端点缓冲区同时使缓冲区有效,专用于中断函数*/
172 unsigned char D12_WriteEndpointIsr(unsigned char endp, unsigned char len,unsigned char * buf)
173 {
174 1 unsigned char i;
175 1 if(bEPPflags.bits.in_isr == 0)
176 1 DISABLE;
177 1 outportb(D12_COMMAND, endp);
178 1 inportb(D12_DATA);
179 1 outportb(D12_COMMAND, 0xF0);
C51 COMPILER V7.02a D12CI 09/20/2005 15:09:59 PAGE 4
180 1 outportb(D12_DATA, 0);
181 1 outportb(D12_DATA, len);
182 1 for(i=0; i<len; i++)
183 1 outportb(D12_DATA, *(buf+i));
184 1 outportb(D12_COMMAND, 0xFA);
185 1 if(bEPPflags.bits.in_isr == 0)
186 1 ENABLE;
187 1 return len;
188 1 }
189
190 /*应答SETUP命令:F1H*/
191 void D12_AcknowledgeEndpoint(unsigned char endp)
192 {
193 1 outportb(D12_COMMAND, endp);
194 1 outportb(D12_COMMAND, 0xF1);
195 1 if(endp == 0)
196 1 outportb(D12_COMMAND, 0xF2);
197 1 }
198
199
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 834 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 26
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 + -