📄 d12driver.lst
字号:
155 1 }
156
157 /***********************************************************************
158 ** 函数名称: void Usb_Exception(void)
159 ** 功能描述: D12中断服务程序
160 *************************************************************************/
161 void Usb_Exception(void) interrupt 2
162 {
163 1 INT16U i_st;
164 1
165 1 DISABLE(); //进入D12中断服务程序时关中断
166 1
167 1 bEPPflags.bits.in_isr = 1;
168 1 i_st = D12_ReadInterruptRegister(); //读取PDIUSBD12中断寄存器值
169 1 if(i_st != 0) {
170 2 if(i_st & D12_INT_BUSRESET)
171 2 bEPPflags.bits.bus_reset = 1; //USB总线复位标志
172 2 if(i_st & D12_INT_EOT)
173 2 dma_eot(); //DMA传输技术处理
174 2 if(i_st & D12_INT_SUSPENDCHANGE)
175 2 bEPPflags.bits.suspend = 1; //挂起改变标志置1
176 2 if(i_st & D12_INT_ENDP0IN)
177 2 ep0_txdone(); //控制端点发送数据处理
178 2 if(i_st & D12_INT_ENDP0OUT)
C51 COMPILER V7.50 D12DRIVER 02/29/2008 14:36:29 PAGE 4
179 2 ep0_rxdone(); //控制端点接收数据处理
180 2 if(i_st & D12_INT_ENDP1IN)
181 2 ep1_txdone(); //端点 1发送数据处理
182 2 if(i_st & D12_INT_ENDP1OUT)
183 2 ep1_rxdone(); //端点 1接收数据处理
184 2 if(i_st & D12_INT_ENDP2IN)
185 2 ep2_txdone(); //端点 2发送数据处理
186 2 if(i_st & D12_INT_ENDP2OUT)
187 2 ep2_rxdone(); //端点 2接收数据处理
188 2 }
189 1 bEPPflags.bits.in_isr = 0;
190 1
191 1 ENABLE(); //退出D12中断服务程序时开中断
192 1 }
193
194
195 /************************************************************
196 ** 函数名称: disconnect_USB()
197 ** 功能描述: 断开USB总线
198 ************************************************************/
199 void disconnect_USB(void)
200 {
201 1 // Initialize D12 configuration
202 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
203 1 } //SoftConnect 断开
204
205
206 /************************************************************
207 ** 函数名称: connect_USB()
208 ** 功能描述: 连接USB总线
209 ************************************************************/
210 void connect_USB(void)
211 {
212 1 // Initialize D12 configuration
213 1 D12_SetDMA(0x00);
214 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
215 1 } //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
216
217
218 /************************************************************
219 ** 函数名称: reconnect_USB()
220 ** 功能描述: 重新连接USB总线
221 ************************************************************/
222 void reconnect_USB(void)
223 {
224 1 INT16U clk_cnt;
225 1
226 1 disconnect_USB(); //断开芯片与USB总线连接
227 1 for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++); //延时处理
228 1 connect_USB(); //连接到USB总线
229 1 }
230
231
232 /************************************************************
233 ** 函数名称: Get_D12_FirmwareVer()
234 ** 功能描述: 重新连接USB总线
235 ** 输 入: 无
236 ** 输 出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
237 ************************************************************/
238 /*INT16U Get_D12_FirmwareVer(void)
239 {
240 return 0x0500; //D12固件软件版本号为5.00
C51 COMPILER V7.50 D12DRIVER 02/29/2008 14:36:29 PAGE 5
241 } */
242
243 /************************************************************
244 ** 函数名称: ReadUsbBuff()
245 ** 功能描述: 查询USB数据
246 ** 输 入: 无
247 ** 输 出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
248 ************************************************************/
249 unsigned char ReadUsbBuff(unsigned char ep)
250 {
251 1 if(ep==2)
252 1 {
253 2 if(bEPPflags.bits.ep2_rxdone==0)return 0;
254 2 DISABLE();
255 2 bEPPflags.bits.ep2_rxdone = 0;
256 2 ENABLE();
257 2 return ep2_len;
258 2 }
259 1 if(ep==1)
260 1 {
261 2 if(bEPPflags.bits.ep1_rxdone==0)return 0;
262 2 DISABLE();
263 2 bEPPflags.bits.ep1_rxdone = 0;
264 2 ENABLE();
265 2 return ep1_len;
266 2 }
267 1 }
268 /*********************************************************************
269 ** 函数名称: Init_D12()
270 ** 功能描述: 设置D12与硬件的连接, 初始化D12, 复位D12
271 ** 输 入: 无
272 ** 输 出: 0: 初始化成功 1: 初始化失败
273 **********************************************************************/
274 INT8U Init_D12(void)
275 {
276 1 unsigned char a=1;
277 1 bEPPflags.value = 0; //初始化USB事件标志变量
278 1
279 1 Init_D12Port(); //初始化PDIUSBD12与51单片机连接的端口
280 1 Rst_D12(); //复位PDIUSBD12
281 1 reconnect_USB(); //重新连接USB
282 1
283 1 if (D12_ReadChipID() != 0x1012) //读取芯片ID号,如果不为1012H
284 1 return 1; //则复位失败
285 1 EA = 1; //开80C51总中断
286 1 EX1 = 1; //开外部中断0
287 1 PX1 = 0; //设置外部中断0中断优先级
288 1 if(a)
289 1 while(1)
290 1 {
291 2 usbserve();
292 2 if(bEPPflags.bits.configuration)return 0;
293 2 }
294 1 else
295 1 {
296 2 ReadUsbBuff(1);
297 2 D12_WriteEndpoint(3,a,GenEpBuf);
298 2 }
299 1 return 1; //初始化成功
300 1 }
301
C51 COMPILER V7.50 D12DRIVER 02/29/2008 14:36:29 PAGE 6
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 486 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 3
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 + -