菜农NUC100学习笔记2(USB红杏是怎样出墙的?)

[复制链接]
4377|9
 楼主| hotpower 发表于 2010-12-6 03:15 | 显示全部楼层 |阅读模式
  1. /*-------------------------------------------------------------------------------
  2. 文 件 名 : NUC1xxcfg.h
  3. 创 建 人 : Cortex-M0菜鸟HotPower@163.com,HotPower@126.com,QQ:1270688699
  4. 个 人 网 站 : www.hotpower.org,www.hotpower.net,www.hotpage.net.cn(合作及导航)
  5. 创 建 日 期 : 2010.10.18 18:18
  6. 最近修改日期 : 2010.12.6 3:18
  7. 创 建 地 点 : 西安大雁塔村队部
  8. 版 本 号 : V1.05 (红杏版)
  9. 修 改 原 因 : 规范并使寄存器模式也能控制到所有位
  10. 说 明 : 菜农掌握本版本的解释权利。
  11. 由于本头文件为开源,出现问题恕不承担一切责任。
  12. 备 注 : 本头文件风格归属于菜农的《红杏出墙》系列,堪称“红杏级别”
  13. 将本文件拷贝到...\CMSIS\CM0\DeviceSupport\Nuvoton\NUC1xx内。
  14. -------------------------------------------------------------------------------*/

  15. //----------------------------------------------------//
  16. typedef enum
  17. {
  18. USBD_INTEN_BUS = 0,//1/0使能/禁止BUS事件中断
  19. USBD_INTEN_USB = 1,//1/0 使能/禁止USB事件中断
  20. USBD_INTEN_FLD = 2,//1/0使能/禁止 浮动检测中断
  21. USBD_INTEN_WAKEUP = 3,//1/0 使能/禁止 唤醒功能
  22. USBD_INTEN_WAKEUP_EN = 8,//1/0 使能/禁止USB 唤醒功能
  23. USBD_INTEN_INNAK_EN = 15,//1/0 在接到IN标志后,设备响应NAK,使能/禁止中断
  24. }NU_USBD_INTEN_ENUM;

  25. typedef volatile union
  26. {
  27. NU_REG Regs;
  28. USBD_INTEN_T Bits;
  29. }NU_USBD_INTEN_T;
  30. //----------------------------------------------------//
  31. typedef enum
  32. {
  33. USBD_INTSTS_BUS = 0,//Bus 事件发生,通过ATTR[3:0]可知是哪类Bus事件发生,向EVF[0]写1清标志
  34. USBD_INTSTS_USB = 1,//USB 事件发生,通过STS[6:4]可知是哪类USB事件发生
  35. USBD_INTSTS_FLD = 2,//浮动检测事件发生,向EVF[2]写1 清标志
  36. USBD_INTSTS_WAKEUP = 3,//唤醒事件发生,向EVF[3]写1 清标志
  37. USBD_INTSTS_EPTF = 16,//1 = USB事件发生,通过STS[xxxx]可知是哪类USB事件发生
  38. USBD_INTSTS_SETUP = 31,//1 = Setup事件发生,向EVF[31]写1清标志
  39. }NU_USBD_INTSTS_ENUM;

  40. typedef volatile union
  41. {
  42. NU_REG Regs;
  43. USBD_INTSTS_T Bits;
  44. }NU_USBD_INTSTS_T;
  45. //----------------------------------------------------//
  46. typedef enum
  47. {
  48. USBD_FADDR_FADDR = 0//USB设备的功能地址
  49. }NU_USBD_FADDR_ENUM;

  50. typedef volatile union
  51. {
  52. NU_REG Regs;
  53. USBD_FADDR_T Bits;
  54. }NU_USBD_FADDR_T;
  55. //----------------------------------------------------//
  56. typedef enum
  57. {
  58. USBD_EPSTS_OVERRUN = 7,//输出数据超过最大有效载荷或安装数据超过8字节
  59. USBD_EPSTS_EPSTS0 = 8,//端点0的系统状态(000=In ACK~111=同步传输结束)
  60. USBD_EPSTS_EPSTS1 = 11,//端点1的系统状态(000=In ACK~111=同步传输结束)
  61. USBD_EPSTS_EPSTS2 = 14,//端点2的系统状态(000=In ACK~111=同步传输结束)
  62. USBD_EPSTS_EPSTS3 = 17,//端点3的系统状态(000=In ACK~111=同步传输结束)
  63. USBD_EPSTS_EPSTS4 = 20,//端点4的系统状态(000=In ACK~111=同步传输结束)
  64. USBD_EPSTS_EPSTS5 = 23,//端点5的系统状态(000=In ACK~111=同步传输结束)
  65. }NU_USBD_EPSTS_ENUM;

  66. typedef volatile union
  67. {
  68. NU_REG Regs;
  69. USBD_EPSTS_T Bits;
  70. }NU_USBD_EPSTS_T;
  71. //----------------------------------------------------//
  72. typedef enum
  73. {
  74. USBD_ATTR_USBRST = 0,//SE0(single-ended 0) 超过2.5uS,总线复位.
  75. USBD_ATTR_SUSPEND = 1,//Bus空闲超过3mS,表示 要么电缆没连接,要么主机正在休眠.
  76. USBD_ATTR_RESUME = 2,//从暂停中恢复
  77. USBD_ATTR_TIMEOUT = 3,//无响应超过18位时间
  78. USBD_ATTR_PHY_EN = 4,//使能 PHY
  79. USBD_ATTR_RWAKEUP = 5,//使USB总线处于K状态,以便远程唤醒.
  80. USBD_ATTR_USB_EN = 7,//使能 USB
  81. USBD_ATTR_DPPU_EN = 8,//使能 DP上拉电阻
  82. USBD_ATTR_PDB = 9,//掉电 PHY, 低电平有效
  83. }NU_USBD_ATTR_ENUM;

  84. typedef volatile union
  85. {
  86. NU_REG Regs;
  87. USBD_ATTR_T Bits;
  88. }NU_USBD_ATTR_T;
  89. //----------------------------------------------------//
  90. typedef enum
  91. {
  92. USBD_FLDET_FLDET = 0//1/0: 连接/悬空
  93. }NU_USBD_FLDET_ENUM;

  94. typedef volatile union
  95. {
  96. NU_REG Regs;
  97. USBD_FLDET_T Bits;
  98. }NU_USBD_FLDET_T;
  99. //----------------------------------------------------//
  100. typedef enum
  101. {
  102. USBD_BUFSEG_BUFSEG = 3//仅用于标记设置(总线缓冲有效的开始地址= {BUFSEG[8:3], 3’b000})
  103. }NU_USBD_BUFSEG_ENUM;

  104. typedef volatile union
  105. {
  106. NU_REG Regs;
  107. USBD_BUFSEG_T Bits;
  108. }NU_USBD_BUFSEG_T;
  109. //----------------------------------------------------//
  110. typedef enum
  111. {
  112. USBD_EP_BUFSEG_BUFSEG = 0//USB缓冲有效的开始地址
  113. }NU_USBD_EP_BUFSEG_ENUM;

  114. typedef volatile union
  115. {
  116. NU_REG Regs;
  117. USBD_BUFSEG_T Bits;
  118. }NU_USBD_EP_BUFSEG_T;
  119. //----------------------------------------------------//
  120. typedef enum
  121. {
  122. USBD_EP_MXPLD_MXPLD = 0//Read:(IN : 发送到主机的数据长度,OUT : 从主机接收到数据的实际长度.)
  123. //Write:(IN : 发送到主机的数据长度,OUT : 从主机接收到数据的最大长度
  124. //注:一旦MXPLD被写,数据包将在IN/OUT标志到达之后立即发送/接收.
  125. }NU_USBD_EP_MXPLD_ENUM;

  126. typedef volatile union
  127. {
  128. NU_REG Regs;
  129. USBD_MXPLD_T Bits;
  130. }NU_USBD_EP_MXPLD_T;
  131. //----------------------------------------------------//
  132. typedef enum
  133. {
  134. USBD_EP_CFG_EPT = 0,//端点号
  135. USBD_EP_CFG_ISOCH = 4,//同步,无握手
  136. USBD_EP_CFG_STATE = 5,//状态(00 = 禁止端点01 = Out 端点10 = IN 端点11 = 无定义)
  137. USBD_EP_CFG_DSQ = 7,//主机应答之后,IN标记自动指定为数据0或1.
  138. USBD_EP_CFG_STALL_CTL = 9,//1 = 在setup阶段允许自动清stall
  139. }NU_USBD_EP_CFG_ENUM;

  140. typedef volatile union
  141. {
  142. NU_REG Regs;
  143. USBD_CFG_T Bits;
  144. }NU_USBD_EP_CFG_T;
  145. //----------------------------------------------------//
  146. typedef enum
  147. {
  148. USBD_EP_CFGP_CFGP = 0,//IN: 写 ‘1’ 清in ready (由MXPLD置1).OUT: 写 ‘1’清out ready(由MXPLD置1)
  149. USBD_EP_CFGP_STALL = 1,//置1, 使设备响应STALL
  150. }NU_USBD_EP_CFGP_ENUM;

  151. typedef volatile union
  152. {
  153. NU_REG Regs;
  154. USBD_CFGP_T Bits;
  155. }NU_USBD_EP_CFGP_T;
  156. //----------------------------------------------------//
  157. typedef struct
  158. {
  159. __IO NU_USBD_EP_BUFSEG_T BUFSEG;//端点0~5的缓冲分割寄存器
  160. __IO NU_USBD_EP_MXPLD_T MXPLD;//端点0~5的最大有效载荷寄存器
  161. __IO NU_USBD_EP_CFG_T CFG;//端点0~5的配置寄存器
  162. __IO NU_USBD_EP_CFGP_T CFGP;//端点0~5的额外配置寄存器
  163. }NU_USBD_EP_T;
  164. //----------------------------------------------------//
  165. typedef enum
  166. {
  167. USBD_DRVSE0_DRVSE0 = 0//1/0: 驱动 se0/无
  168. }NU_USBD_DRVSE0_ENUM;

  169. typedef volatile union
  170. {
  171. NU_REG Regs;
  172. USBD_DRVSE0_T Bits;
  173. }NU_USBD_DRVSE0_T;
  174. //----------------------------------------------------//
  175. typedef enum
  176. {
  177. USBD_PDMA_PDMA_RW = 0,//0 = 从内存读数据到USB缓存,1 = 从USB缓存读数据到内存
  178. USBD_PDMA_PDMA_EN = 0//0 = 禁止PDMA,1 = 使能PDMA,该位在PDMA传输完毕后自动清零.
  179. }NU_USBD_PDMA_ENUM;

  180. typedef volatile union
  181. {
  182. NU_REG Regs;
  183. USBD_PDMA_T Bits;
  184. }NU_USBD_PDMA_T;
  185. //----------------------------------------------------//
  186. typedef struct
  187. {
  188. __IO NU_USBD_INTEN_T INTEN;//中断使能寄存器
  189. __IO NU_USBD_INTSTS_T INTSTS;//中断事件标志寄存器
  190. __IO NU_USBD_FADDR_T FADDR;//功能地址寄存器
  191. __IO NU_USBD_EPSTS_T EPSTS;//系统状态寄存器
  192. __IO NU_USBD_ATTR_T ATTR;//总线状态&归属寄存器
  193. __I NU_USBD_FLDET_T FLDET;//悬空检测寄存器
  194. __IO NU_USBD_BUFSEG_T BUFSEG;//缓冲分割寄存器
  195. __I NU_REG RESERVE0;
  196. union{
  197. __IO NU_USBD_EP_T EP[6];//端点数组0~5
  198. struct{
  199. __IO NU_USBD_EP_T EP0;//端点0
  200. __IO NU_USBD_EP_T EP1;//端点1
  201. __IO NU_USBD_EP_T EP2;//端点2
  202. __IO NU_USBD_EP_T EP3;//端点3
  203. __IO NU_USBD_EP_T EP4;//端点4
  204. __IO NU_USBD_EP_T EP5;//端点5
  205. };
  206. };
  207. __I NU_REG RESERVE1[4];
  208. __IO NU_USBD_DRVSE0_T DRVSE0;//驱动SE0寄存器(1/0: 驱动 se0/无)
  209. __I NU_REG RESERVE2[4];
  210. __IO NU_USBD_PDMA_T PDMA;//PDMA 控制寄存器
  211. }NU_USBD_T;

  212. //----------------------------------------------------//
  213. #define USBDs (*((NU_USBD_T *) USBD_BASE))//定位全局结构变量USBDs
  214. //----------------------------------------------------//
  215. #define USBDx ((NU_USBD_T *) USBD_BASE)
  216. //----------------------------------------------------//
Jerric 发表于 2010-12-6 15:36 | 显示全部楼层
很强大!MP
火箭球迷 发表于 2010-12-6 16:54 | 显示全部楼层
笔记似乎简洁了一点,哪里有更详细的:lol
mtwumtwu 发表于 2010-12-6 17:40 | 显示全部楼层
雖不中亦不遠矣
 楼主| hotpower 发表于 2010-12-7 20:21 | 显示全部楼层
休眠之中
crestxa 发表于 2010-12-7 21:35 | 显示全部楼层
如果什么时候能把这句去掉,就强大了
“由于本头文件为开源,出现问题恕不承担一切责任。”
ouxueguo 发表于 2010-12-8 22:14 | 显示全部楼层
:)哪天我到达如此书写风格就很好了
秋天落叶 发表于 2010-12-9 21:33 | 显示全部楼层
很不错的笔记,虽然看的很辛苦:lol
 楼主| hotpower 发表于 2012-1-6 09:24 | 显示全部楼层
martinshen 发表于 2012-1-9 22:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21617

帖子

508

粉丝
快速回复 在线客服 返回列表 返回顶部