📄 d12driver.lst
字号:
144
145 /*******************************************************************
146 ** 函数名称: ep2_txdone()
147 ** 功能描述: 端点2 IN(发送)处理处理函数
148 ** 输 入: 无
149 ** 输 出: 无
150 ********************************************************************/
151 void ep2_txdone(void)
152 {
153 1
154 1 D12_ReadLastTransactionStatus(5); //清中断标志位
155 1 EP2_tx = 1;
156 1 }
157
158 /*******************************************************************
159 ** 函数名称: ep2_rxdone()
160 ** 功能描述: 端点2 OUT(接收)处理处理函数
161 ** 输 入: 无
162 ** 输 出: 无
163 ********************************************************************/
164 void ep2_rxdone(void)
165 {
166 1 D12_ReadLastTransactionStatus(4); //清中断标志位
167 1
168 1 if(num_Of_64len != 0)
169 1 {
170 2 if ((0x60&(D12_ReadEndpointStatus(4))) == 0x60) // 如果双缓冲区中收到数据
171 2 {
172 3 D12_ReadEndpoint(4,EP2_PACKET_SIZE,RecBuf + offset);
173 3 offset += EP2_PACKET_SIZE;
174 3 D12_ReadEndpoint(4,EP2_PACKET_SIZE,RecBuf + offset);
175 3 offset += EP2_PACKET_SIZE;
176 3 num_Of_64len -= 0x02;
177 3 Rcv128Bytes = 1;
178 3 }
C51 COMPILER V7.50 D12DRIVER 03/07/2006 08:28:19 PAGE 4
179 2 else if(num_Of_64len != 0) // 只有一个缓冲区中收到数据
180 2 {
181 3 D12_ReadEndpoint(4,EP2_PACKET_SIZE,RecBuf + offset); // 读取缓冲区中的数据
182 3 offset += EP2_PACKET_SIZE;
183 3 num_Of_64len --;
184 3 Rcv128Bytes = 0;
185 3 }
186 2 }
187 1
188 1 else if(num_of_less64len != 0)
189 1 {
190 2 D12_ReadEndpoint(4,num_of_less64len,RecBuf + offset); // 读取缓冲区中的数据
191 2 offset += num_of_less64len;
192 2 num_of_less64len = 0;
193 2 }
194 1
195 1 bEPPflags.bits.ep2_rxdone = 1;
196 1 }
197
198 /***********************************************************************
199 ** 函数名称: void Usb_Exception(void)
200 ** 功能描述: D12中断服务程序
201 *************************************************************************/
202 void Usb_Exception(void) interrupt 0
203 {
204 1 INT16U i_st;
205 1
206 1 DISABLE(); //进入D12中断服务程序时关中断
207 1 bEPPflags.bits.in_isr = 1;
208 1 i_st = D12_ReadInterruptRegister(); //读取PDIUSBD12中断寄存器值
209 1 if(i_st != 0) {
210 2 if(i_st & D12_INT_BUSRESET)
211 2 bEPPflags.bits.bus_reset = 1; //USB总线复位标志
212 2 if(i_st & D12_INT_EOT)
213 2 dma_eot(); //DMA传输技术处理
214 2 if(i_st & D12_INT_SUSPENDCHANGE)
215 2 bEPPflags.bits.suspend = 1; //挂起改变标志置1
216 2 if(i_st & D12_INT_ENDP0IN)
217 2 ep0_txdone(); //控制端点发送数据处理
218 2 if(i_st & D12_INT_ENDP0OUT)
219 2 ep0_rxdone(); //控制端点接收数据处理
220 2 if(i_st & D12_INT_ENDP1IN)
221 2 ep1_txdone(); //端点 1发送数据处理
222 2 if(i_st & D12_INT_ENDP1OUT)
223 2 ep1_rxdone(); //端点 1接收数据处理
224 2 if(i_st & D12_INT_ENDP2IN)
225 2 ep2_txdone(); //端点 2发送数据处理
226 2 if(i_st & D12_INT_ENDP2OUT)
227 2 ep2_rxdone(); //端点 2接收数据处理
228 2 }
229 1 bEPPflags.bits.in_isr = 0;
230 1
231 1 ENABLE(); //退出D12中断服务程序时开中断
232 1 }
233
234
235 /************************************************************
236 ** 函数名称: disconnect_USB()
237 ** 功能描述: 断开USB总线
238 ************************************************************/
239 void disconnect_USB(void)
240 {
C51 COMPILER V7.50 D12DRIVER 03/07/2006 08:28:19 PAGE 5
241 1 // Initialize D12 configuration
242 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
243 1 } //SoftConnect 断开
244
245
246 /************************************************************
247 ** 函数名称: connect_USB()
248 ** 功能描述: 连接USB总线
249 ************************************************************/
250 void connect_USB(void)
251 {
252 1 // Initialize D12 configuration
253 1 D12_SetDMA(0x00);
254 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
255 1 } //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
256
257
258 /************************************************************
259 ** 函数名称: reconnect_USB()
260 ** 功能描述: 重新连接USB总线
261 ************************************************************/
262 void reconnect_USB(void)
263 {
264 1 INT16U clk_cnt;
265 1
266 1 disconnect_USB(); //断开芯片与USB总线连接
267 1 for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++); //延时处理
268 1 connect_USB(); //连接到USB总线
269 1 }
270
271
272 /************************************************************
273 ** 函数名称: Get_D12_FirmwareVer()
274 ** 功能描述: 重新连接USB总线
275 ** 输 入: 无
276 ** 输 出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
277 ************************************************************/
278 INT16U Get_D12_FirmwareVer(void)
279 {
280 1 return 0x0500; //D12固件软件版本号为5.00
281 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 536 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = 16 ----
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 + -