usbout.c
上传用户:hank9955
上传日期:2022-08-05
资源大小:14k
文件大小:2k
源码类别:

USB编程

开发平台:

C/C++

  1. /****************************************************************
  2.  NAME: usbout.c
  3.  DESC: USB bulk-OUT operation related functions
  4.  HISTORY:
  5.  Mar.25.2002:purnnamu: ported for S3C2410X.
  6.  Mar.27.2002:purnnamu: DMA is enabled.
  7.  ****************************************************************/
  8.  
  9. #include <string.h>
  10. #include "option.h"
  11. #include "2410addr.h"
  12. #include "2410lib.h"
  13. #include "def.h"
  14. #include "2410usb.h"
  15. #include "usbmain.h"
  16. #include "usb.h"
  17. #include "usblib.h"
  18. #include "usbsetup.h"
  19. #include "usbout.h"
  20. #include "u241mon.h"
  21. static void PrintEpoPkt(U8 *pt,int cnt);
  22. // ===================================================================
  23. // All following commands will operate in case 
  24. // - out_csr3 is valid.
  25. // ===================================================================
  26.  
  27. #define CLR_EP3_OUT_PKT_READY() rOUT_CSR1_REG= ( out_csr3 &(~ EPO_WR_BITS)
  28. &(~EPO_OUT_PKT_READY) ) 
  29. #define SET_EP3_SEND_STALL() rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)
  30. | EPO_SEND_STALL) )
  31. #define CLR_EP3_SENT_STALL() rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)
  32. &(~EPO_SENT_STALL) )
  33. #define FLUSH_EP3_FIFO()  rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)
  34. |EPO_FIFO_FLUSH) )
  35. U8 ep3Buf[EP3_PKT_SIZE];
  36. //这个只是一个测试函数,把收到的信息都打到调试串口,正式使用可能要开启一下环形缓冲区。
  37. void Ep3Handler(void)
  38. {
  39.     U8 out_csr3;
  40.     int fifoCnt;
  41.     rINDEX_REG=3;
  42.     out_csr3=rOUT_CSR1_REG;
  43.     
  44.     DbgPrintf("<3:%x]",out_csr3);
  45.     if(out_csr3 & EPO_OUT_PKT_READY)
  46.     {  
  47.     
  48. fifoCnt=rOUT_FIFO_CNT1_REG; 
  49. RdPktEp3(ep3Buf,fifoCnt);
  50. PrintEpoPkt(ep3Buf,fifoCnt);
  51.     CLR_EP3_OUT_PKT_READY();
  52. return;
  53.     }
  54.     
  55.     //I think that EPO_SENT_STALL will not be set to 1.
  56.     if(out_csr3 & EPO_SENT_STALL)
  57.     {   
  58.     DbgPrintf("[STALL]");
  59.     CLR_EP3_SENT_STALL();
  60.     return;
  61.     }
  62. }
  63. void PrintEpoPkt(U8 *pt,int cnt)
  64. {
  65.     int i;
  66.     DbgPrintf("[BOUT:%d:",cnt);
  67.     for(i=0;i<cnt;i++)
  68.     {
  69.      DbgPrintf("%x,",pt[i]);
  70.      Uart_Printf("%c",pt[i]);
  71.     }
  72.     DbgPrintf("]");
  73. }
  74. void ClearEp3OutPktReady(void)
  75. {
  76.     U8 out_csr3;
  77.     rINDEX_REG=3;
  78.     out_csr3=rOUT_CSR1_REG;
  79.     CLR_EP3_OUT_PKT_READY();
  80. }