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

USB编程

开发平台:

C/C++

  1. /****************************************************************
  2.  NAME: usbin.c
  3.  DESC: usb bulk-IN operation
  4.  HISTORY:
  5.  Mar.25.2002:purnnamu: ported for S3C2410X.
  6.  ****************************************************************/
  7. #include <string.h>
  8. #include "option.h"
  9. #include "2410addr.h"
  10. #include "2410lib.h"
  11. #include "def.h"
  12. #include "2410usb.h"
  13. #include "usbmain.h"
  14. #include "usb.h"
  15. #include "usblib.h"
  16. #include "usbsetup.h"
  17. #include "usbin.h"
  18. // ===================================================================
  19. // All following commands will operate in case 
  20. // - in_csr1 is valid.
  21. // ===================================================================
  22. #define SET_EP1_IN_PKT_READY()  rIN_CSR1_REG= ( in_csr1 &(~ EPI_WR_BITS)
  23. | EPI_IN_PKT_READY )  
  24. #define SET_EP1_SEND_STALL() rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)
  25. | EPI_SEND_STALL) )
  26. #define CLR_EP1_SENT_STALL() rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)
  27. &(~EPI_SENT_STALL) )
  28. #define FLUSH_EP1_FIFO()  rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)
  29. | EPI_FIFO_FLUSH) )
  30. static U8 sent = 0;
  31. //这个只是一个测试程序,一次不能写大于EP1_PKT_SIZE字节的数据
  32. //同时,写周期不能大于USB主机读取的周期。
  33. //TODO: 增加一个环形缓冲区做缓冲。
  34. void PrepareEp1Fifo(char *Msg, U32 MsgLen) 
  35. {
  36.     U8 in_csr1;
  37.     rINDEX_REG=1;
  38.     in_csr1=rIN_CSR1_REG;
  39.     
  40.     if(sent == 1) return;
  41.     
  42.     WrPktEp1((U8*)Msg, MsgLen < EP1_PKT_SIZE ? MsgLen : EP1_PKT_SIZE);
  43.     SET_EP1_IN_PKT_READY(); 
  44. }
  45. void Ep1Handler(void)
  46. {
  47.     U8 in_csr1;
  48.     rINDEX_REG=1;
  49.     in_csr1=rIN_CSR1_REG;
  50.     
  51.     //I think that EPI_SENT_STALL will not be set to 1.
  52.     if(in_csr1 & EPI_SENT_STALL)
  53.     {   
  54.     DbgPrintf("[STALL]");
  55.     CLR_EP1_SENT_STALL();
  56.     return;
  57.     }
  58.     
  59.     sent= 0;
  60.    return;
  61. }