usbPdiusbd12.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:7k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usbPdiusbd12.h - Definitions for Philips PDIUSBD12 USB target controller */
  2. /* Copyright 2000 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01a,05aug99,rcb  First.
  7. */
  8. /*
  9. DESCRIPTION
  10. Defines constants related to the Philips PDIUSBD12 USB device (target) IC.
  11. */
  12. #ifndef __INCusbPdiusbd12h
  13. #define __INCusbPdiusbd12h
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /* defines */
  18. /* PDIUSBD12 signature (read through Read Chip Id command) 
  19.  *
  20.  * NOTE: The value of the signature has been determined empirically.  The
  21.  * official data sheet for the PDIUSBD12 does not discuss the Read Chip ID
  22.  * command, but sample code from Philips reveals the existence of the 
  23.  * command.
  24.  */
  25. #define D12_CHIP_ID_MASK 0xffff
  26. #define D12_CHIP_ID 0x1012
  27. /* PDIUSBD12 I/O registers */
  28. #define D12_DATA_REG 0 /* data register (r/w) */
  29. #define D12_CMD_REG 1 /* command register (write only) */
  30. /* PDIUSBD12 endpoints */
  31. #define D12_NUM_ENDPOINTS 6 /* number of endpoints */
  32. #define D12_ENDPOINT_CONTROL_OUT 0 /* control OUT endpoint */
  33. #define D12_ENDPOINT_CONTROL_IN  1 /* control IN endpoint */
  34. #define D12_ENDPOINT_1_OUT 2 /* endpoint 1 OUT */
  35. #define D12_ENDPOINT_1_IN 3 /* endpoint 1 IN */
  36. #define D12_ENDPOINT_2_OUT 4 /* endpoint 2 OUT */
  37. #define D12_ENDPOINT_2_IN 5 /* endpoint 2 IN */
  38. /* max endpoint packet lengths */
  39. #define D12_MAX_PKT_CONTROL 16
  40. #define D12_MAX_PKT_ENDPOINT_1 16
  41. #define D12_MAX_PKT_ENDPOINT_2_NON_ISO 64 /* mode 0 */
  42. #define D12_MAX_PKT_ENDPOINT_2_ISO_OUT 128 /* mode 1 */
  43. #define D12_MAX_PKT_ENDPOINT_2_ISO_IN 128 /* mode 2 */
  44. #define D12_MAX_PKT_ENDPOINT_2_ISO_IO 64 /* mode 3 */
  45. /* PDIUSBD12 commands */
  46. /* data phase */
  47. #define D12_CMD_SET_ADDRESS 0xd0 /* write 1 byte */
  48. #define D12_CMD_SET_ENDPOINT_ENABLE 0xd8 /* write 1 byte */
  49. #define D12_CMD_SET_MODE 0xf3 /* write 2 bytes */
  50. #define D12_CMD_SET_DMA  0xfb /* write/read 1 byte */
  51. #define D12_CMD_READ_INTERRUPT_REG 0xf4 /* read 2 bytes */
  52. #define D12_CMD_READ_BUFFER 0xf0 /* read n bytes */
  53. #define D12_CMD_WRITE_BUFFER 0xf0 /* write n bytes */
  54. #define D12_CMD_ACK_SETUP 0xf1 /* none */
  55. #define D12_CMD_CLEAR_BUFFER 0xf2 /* none */
  56. #define D12_CMD_VALIDATE_BUFFER  0xfa /* none */
  57. #define D12_CMD_SEND_RESUME 0xf6 /* none */
  58. #define D12_CMD_READ_CURRENT_FRAME_NO 0xf5 /* read 1 or 2 bytes */
  59. #define D12_CMD_READ_CHIP_ID 0xfd /* read 2 bytes */
  60. /* following cmds must be OR'd with endpoint selector: D12_ENDPOINT_xxxx */
  61. #define D12_CMD_SELECT_ENDPOINT  0x00 /* read 1 byte (optional) */
  62. #define D12_CMD_READ_LAST_TRANS_STATUS 0x40 /* read 1 byte */
  63. #define D12_CMD_SET_ENDPOINT_STATUS 0x40 /* write 1 byte */
  64. #define D12_CMD_READ_ENDPOINT_STATUS 0x80 /* read 1 byte */
  65. /* set address command (write 1 byte) */
  66. #define D12_CMD_SA_ADRS_MASK 0x7f /* address */
  67. #define D12_CMD_SA_ENABLE 0x80 /* enable */
  68. /* set endpoint enable command (write 1 byte) */
  69. #define D12_CMD_SEE_ENABLE 0x01 /* generic/isoch endpt enable */
  70. /* set mode command (write 2 bytes) */
  71. /* first byte... */
  72. #define D12_CMD_SM_CFG_NO_LAZYCLOCK 0x02 /* no lazyclock */
  73. #define D12_CMD_SM_CFG_CLOCK_RUNNING 0x04 /* clock running */
  74. #define D12_CMD_SM_CFG_INTERRUPT_MODE 0x08 /* interrupt mode */
  75. #define D12_CMD_SM_CFG_SOFTCONNECT 0x10 /* SoftConnect */
  76. #define D12_CMD_SM_CFG_MODE_MASK 0xc0
  77. #define D12_CMD_SM_CFG_MODE0_NON_ISO 0x00 /* mode 0, non-iso */
  78. #define D12_CMD_SM_CFG_MODE1_ISO_OUT 0x40 /* mode 1, iso-out */
  79. #define D12_CMD_SM_CFG_MODE2_ISO_IN 0x80 /* mode 2, iso-in */
  80. #define D12_CMD_SM_CFG_MODE3_ISO_IO 0xc0 /* mode 3, iso-io */
  81. /* second byte... */
  82. #define D12_CMD_SM_CLK_DIV_FACTOR_MASK 0x0f /* clock division factor */
  83. #define D12_CMD_SM_CLK_DIV_DEFAULT 0x0b /* default = 11 */
  84. #define D12_CMD_SM_CLK_SET_TO_ONE 0x40 /* bit must be set to 1 */
  85. #define D12_CMD_SM_CLK_SOF_ONLY_INTRPT 0x80 /* SOF-only interrupt */
  86. /* set dma command (read/write 1 byte) */
  87. #define D12_CMD_SD_DMA_SINGLE_CYCLE 0x00 /* single cycle DMA */
  88. #define D12_CMD_SD_DMA_BURST_4 0x01 /* burst (4 cycle) DMA */
  89. #define D12_CMD_SD_DMA_BURST_8 0x02 /* burst (8 cycle) DMA */
  90. #define D12_CMD_SD_DMA_BURST_16  0x03 /* burst (16 cycle) DMA */
  91. #define D12_CMD_SD_DMA_ENABLE 0x04 /* dma enable */
  92. #define D12_CMD_SD_DMA_DIRECTION_MASK 0x08 /* mask for direction */
  93. #define D12_CMD_SD_DMA_DIRECTION_WRITE 0x08 /* '1' = dma write */
  94. #define D12_CMD_SD_DMA_DIRECTION_READ 0x00 /* '0' = dma read */
  95. #define D12_CMD_SD_AUTO_RELOAD 0x10 /* dma auto restart */
  96. #define D12_CMD_SD_SOF_INTRPT 0x20 /* enable SOF interrupt */
  97. #define D12_CMD_SD_ENDPT_2_OUT_INTRPT 0x40 /* intrpt when valid packet */
  98. #define D12_CMD_SD_ENDPT_2_IN_INTRPT 0x80 /* intrpt when valid packet */
  99. /* read interrupt register (read 2 bytes) */
  100. /* first byte... */
  101. #define D12_CMD_RIR_CONTROL_OUT  0x0001 /* control out endpoint */
  102. #define D12_CMD_RIR_CONTROL_IN 0x0002 /* control in endpoint */
  103. #define D12_CMD_RIR_ENDPOINT_1_OUT 0x0004 /* endpoint 1 OUT */
  104. #define D12_CMD_RIR_ENDPOINT_1_IN 0x0008 /* endpoint 1 IN */
  105. #define D12_CMD_RIR_ENDPOINT_2_OUT 0x0010 /* endpoint 2 OUT (main OUT) */
  106. #define D12_CMD_RIR_ENDPOINT_2_IN 0x0020 /* endpoint 2 IN (main IN) */
  107. #define D12_CMD_RIR_BUS_RESET 0x0040 /* bus reset */
  108. #define D12_CMD_RIR_SUSPEND 0x0080 /* suspend change */
  109. /* second byte... */
  110. #define D12_CMD_RIR_DMA_EOT 0x0100 /* DMA EOT */
  111. /* select endpoint command (optional read 1 byte) */
  112. #define D12_CMD_SE_FULL_EMPTY 0x01 /* '1' = bfr full, '0' = empty */
  113. #define D12_CMD_SE_STALL 0x02 /* '1' = endpoint stall */
  114. /* read last transaction status command (read 1 byte) */
  115. #define D12_CMD_RLTS_DATA_SUCCESS 0x01 /* xmit/rcv data success */
  116. #define D12_CMD_RLTS_SETUP_PACKET 0x20 /* Setup packet */
  117. #define D12_CMD_RLTS_DATA1 0x40 /* DATA0/DATA1 indicator */
  118. #define D12_CMD_RLTS_STATUS_SKIPPED 0x80 /* previous status not read */
  119. #define D12_CMD_RLTS_ERROR_CODE_MASK 0x1e /* error code */
  120. #define D12_CMD_RLTS_ERROR_CODE_SHIFT 1
  121. #define D12_CMD_RLTS_ERROR_CODE(b)  
  122.     (((b) & D12_CMD_RLTS_ERROR_CODE_MASK) >> D12_CMD_RLTS_ERROR_CODE_SHIFT)
  123. #define D12_CMD_RLTS_ERROR_NONE  0x0 /* no error */
  124. #define D12_CMD_RLTS_ERROR_PID_ENCODE 0x1 /* PID encoding error */
  125. #define D12_CMD_RLTS_ERROR_PID_UNKNOWN 0x2 /* unknown PID */
  126. #define D12_CMD_RLTS_ERROR_EXPECTED_PKT 0x3 /* unexpected packet */
  127. #define D12_CMD_RLTS_ERROR_TOKEN_CRC 0x4 /* token CRC error */
  128. #define D12_CMD_RLTS_ERROR_DATA_CRC 0x5 /* data CRC error */
  129. #define D12_CMD_RLTS_ERROR_TIME_OUT 0x6 /* time out error */
  130. #define D12_CMD_RLTS_ERROR_END_OF_PKT 0x8 /* unexpected end of packet */
  131. #define D12_CMD_RLTS_ERROR_NAK 0x9 /* sent or received NAK */
  132. #define D12_CMD_RLTS_ERROR_STALL 0xa /* sent stall */
  133. #define D12_CMD_RLTS_ERROR_OVERFLOW 0xb /* packet too long for bfr */
  134. #define D12_CMD_RLTS_ERROR_BITSTUFF 0xd /* bitstuff error */
  135. #define D12_CMD_RLTS_ERROR_DATA_TOGGLE 0xf /* wrong data toggle */
  136. /* set endpoint status command (write 1 byte) */
  137. #define D12_CMD_SES_STALLED 0x01 /* stalled */
  138. /* read current frame number command (read 1 or 2 bytes) */
  139. /* LSB is in first byte (8 bits) , MSB is in second byte (3 bits).  
  140.  * 11 bits total. */
  141. #define D12_CMD_RCFN_MSB_MASK 0x07 /* mask for MSB */
  142. #ifdef __cplusplus
  143. }
  144. #endif
  145. #endif /* __INCusbPdiusbd12h */
  146. /* End of file. */