📄 pdiusbd12.lst
字号:
234 //== 说 明:端点状态 1:停止 0:运行
235 //== 时 间:2008.8.13 创建函数
236 //== 入口参数:endp:端点索引号(0-5)
237 // status:端点状态
238 // bit1-bit7为保留位
239 // bit0 = 1--表示端点处于停止状态
240 //== 返 回 值:0
241 //===============================================================================//
C51 COMPILER V7.50 PDIUSBD12 11/24/2008 09:12:37 PAGE 5
242 unsigned char set_endpoint_status(unsigned char endp,unsigned char status)
243 {
244 1 #ifdef __DEBUG__ //== 打印调试信息
245 1 Print_Msg("Runing set_endpoint_status()!\r\n");
246 1 #endif
247 1
248 1 write_D12_command(0x40+endp);
249 1 write_a_D12_data(status);
250 1 return 0;
251 1 }
252
253 //===============================================================================//
254 //== 函 数 名:read_endpoint_status
255 //== 功 能:读端点状态,命令为0x80+endp
256 //== 说 明:主要作用是判断端点缓冲区是否满
257 //== 时 间:2008.8.13 创建函数
258 //== 入口参数:endp:端点索引号(0-5)
259 //== 返 回 值:当前端点状态信息
260 //===============================================================================//
261 unsigned char read_endpoint_status(unsigned char endp)
262 {
263 1 #ifdef __DEBUG__ //== 打印调试信息
264 1 Print_Msg("Runing read_endpoint_status()!\r\n");
265 1 #endif
266 1
267 1 write_D12_command(0x80+endp);
268 1 return read_a_D12_data();
269 1 }
270
271 //===============================================================================//
272 //== 函 数 名:clear_buffer
273 //== 功 能:清缓冲区,命令为0xf2
274 //== 说 明:清的是选择的端点的缓冲区,在读取缓冲数据后调用
275 //== 时 间:2008.8.13 创建函数
276 //== 入口参数:无
277 //== 返 回 值:0
278 //===============================================================================//
279 unsigned char clear_buffer(void)
280 {
281 1 #ifdef __DEBUG__ //== 打印调试信息
282 1 Print_Msg("Runing clear_buffer()!\r\n");
283 1 #endif
284 1
285 1 write_D12_command(Clear_Buffer);
286 1 return 0;
287 1 }
288
289 //===============================================================================//
290 //== 函 数 名:validate_buffer
291 //== 功 能:缓冲区数据有效
292 //== 说 明:选择的端点的缓冲区有效,在写缓冲后调用
293 //== 时 间:2008.8.13 创建函数
294 //== 入口参数:无
295 //== 返 回 值:0
296 //===============================================================================//
297 unsigned char validate_buffer(void)
298 {
299 1 #ifdef __DEBUG__ //== 打印调试信息
300 1 Print_Msg("Runing validate_buffer()!\r\n");
301 1 #endif
302 1
303 1 write_D12_command(Validate_Buffer);
C51 COMPILER V7.50 PDIUSBD12 11/24/2008 09:12:37 PAGE 6
304 1 return 0;
305 1 }
306
307
308 //===============================================================================//
309 //== 函 数 名:ack_setup
310 //== 功 能:应答建立包
311 //== 说 明:处理完 setup 包后调用
312 //== 时 间:2008.8.13 创建函数
313 //== 入口参数:endp:端点索引号
314 //== 返 回 值:0
315 //===============================================================================//
316 unsigned char ack_setup(unsigned char endp)
317 {
318 1 #ifdef __DEBUG__ //== 打印调试信息
319 1 Print_Msg("Runing ack_setup()!\r\n");
320 1 #endif
321 1
322 1 select_endpoint(endp);
323 1 write_D12_command(Ack_Setup);
324 1 return 0;
325 1 }
326
327 //===============================================================================//
328 //== 函 数 名:error
329 //== 功 能:出错处理
330 //== 说 明:
331 //== 时 间:2008.8.13 创建函数
332 //== 入口参数:number:错误号
333 //== 返 回 值:0
334 //===============================================================================//
335 unsigned char error(unsigned char number)
336 {
337 1 #ifdef __DEBUG__ //== 打印调试信息
338 1 Print_Msg("Runing error()!\r\n");
339 1 #endif
340 1
341 1 number = 0;
342 1 return 0;
343 1 }
344
345 //===============================================================================//
346 //== 函 数 名:read_endpoint_buff
347 //== 功 能 :读端点缓冲区(读取逻辑端点0和1),读出的数据为
348 //== 说 明 :字节1: 保留可为任意值
349 //== :字节2: 数据字节的数目/长度
350 //== :字节3: 数据字节1
351 //== :字节4: 数据字节2
352 //== 时 间 :2008.8.13 创建函数
353 //== 入口参数:endp:端点号 len:要读出的长度 buff:存储的缓冲区
354 //== 返 回 值:ret:实际读取的字节数
355 //===============================================================================//
356 unsigned char read_endpoint_buff(unsigned char endp,unsigned char len,unsigned char * buff)
357 {
358 1 unsigned char i, ret;
359 1
360 1 #ifdef __DEBUG__ //== 打印调试信息
361 1 Print_Msg("Runing read_endpoint_buff()!\r\n");
362 1 #endif
363 1
364 1 //== 进行端点操作前要选择端点
365 1 if ((select_endpoint(endp)&0x01) == 0x00)//== 端点缓冲区为空时返回,端点必须在运行状态时才可引发中断
C51 COMPILER V7.50 PDIUSBD12 11/24/2008 09:12:37 PAGE 7
366 1 { //== 所以这里只是判断缓冲区是否满,并没有要判断端点是否运行
367 2 error(0);
368 2 return 0;
369 2 }
370 1
371 1 write_D12_command(Read_Buffer); //== 读缓冲区命令,读nB
372 1 read_a_D12_data(); //== 读出的第一个字节,保留,可为任意值
373 1 ret = read_a_D12_data(); //== 读出的第二个字节是数据字节的数目/长度
374 1
375 1 if (ret > len) //== 数据字节长度最大130B
376 1 {
377 2 ret = len;
378 2 }
379 1
380 1 for (i=0; i<ret; i++)
381 1 {
382 2 *(buff+i) = D12_DATA_ADD;
383 2 }
384 1 clear_buffer();
385 1 return ret;
386 1 }
387
388 //===============================================================================//
389 //== 函 数 名:read_main_endpoint_buff
390 //== 功 能 :读端点4缓冲区(主输出端点),读出的数据为
391 //== 说 明 :字节1: 保留可为任意值
392 //== :字节2: 数据字节的数目/长度
393 //== :字节3: 数据字节1
394 //== :字节4: 数据字节2
395 //== :主端点4和5都是双缓冲区,每个端点都有2个64字节的缓冲区
396 //== 时 间 :2008.8.13 创建函数
397 //== 入口参数:buff:存储的缓冲区
398 //== 返 回 值:ret:实际读取的字节数
399 //===============================================================================//
400 unsigned char read_main_endpoint_buff(unsigned char* buff)
401 {
402 1 unsigned char i, ret;
403 1 unsigned char bDbuBuf = 1; //== 记录有几个缓冲区满
404 1 unsigned char j = 0;
405 1
406 1 #ifdef __DEBUG__ //== 打印调试信息
407 1 Print_Msg("Runing read_main_endpoint_buff()!\r\n");
408 1 #endif
409 1
410 1 if ((read_endpoint_status(0x84)&0x60) == 0x60)//== 两个缓冲区都满都满,要读取128个字节
411 1 {
412 2 // error(0);
413 2 bDbuBuf = 2;
414 2 }
415 1
416 1 for (; bDbuBuf>0; bDbuBuf--)
417 1 { //== 进行端点操作前要选择端点
418 2 if ((select_endpoint(0x04))&0x01 == 0x00) //== 端点缓冲区为空时退出
419 2 {
420 3 break;
421 3 }
422 2
423 2 write_D12_command(Read_Buffer); //== 读缓冲区命令,读nB
424 2 read_a_D12_data(); //== 读出的第一个字节,保留,可为任意值
425 2 ret = read_a_D12_data(); //== 读出的第二个字节是数据字节的数目/长度
426 2
427 2 for (i=0; i<ret; i++) //== 数据字节长度最大130B
C51 COMPILER V7.50 PDIUSBD12 11/24/2008 09:12:37 PAGE 8
428 2 {
429 3 *(buff+i+j) = D12_DATA_ADD;
430 3 }
431 2
432 2 j += ret;
433 2 clear_buffer();
434 2 }
435 1 ret = j;
436 1
437 1 return ret;
438 1 }
439
440 //===============================================================================//
441 //== 函 数 名:write_endpoint_buff
442 //== 功 能:写端点缓冲区
443 //== 说 明:最多一次能写入130个字节
444 //== 时 间:2008.8.13 创建函数
445 //== 入口参数:endp:端点号 len:要写入的长度 buff:存储的缓冲区
446 //== 返 回 值:len:实际写入的字节数
447 //===============================================================================//
448 unsigned char write_endpoint_buff(unsigned char endp, unsigned char len, unsigned char* buff)
449 {
450 1 unsigned char i;
451 1
452 1 #ifdef __DEBUG__ //== 打印调试信息
453 1 Print_Msg("Runing write_endpoint_buff()!\r\n");
454 1 #endif
455 1
456 1 read_last_status(endp);
457 1 select_endpoint(endp);
458 1
459 1 write_D12_command(Write_Buffer);
460 1 write_a_D12_data(0); //== 写入的第一个字节保留,总为0
461 1 write_a_D12_data(len);
462 1
463 1 for (i=0; i<len; i++)
464 1 {
465 2 D12_DATA_ADD = *(buff+i);
466 2 }
467 1
468 1 validate_buffer();
469 1
470 1 Print_Msg("************** ");
471 1 Print_Hex(buff, len);
472 1 Print_Msg("**************!\r\n");
473 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -