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

2010-12-6 03:27 2416 9 11 分类: MCU/ 嵌入式



  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//ReadIN : 发送到主机的数据长度,OUT : 从主机接收到数据的实际长度.)

  123. //WriteIN : 发送到主机的数据长度,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. //----------------------------------------------------//
复制代码
PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户315561 2010-12-10 09:31

华邦M0确实不错。

用户1584993 2010-12-6 15:36

终于又看到您的身影了,呵呵
相关推荐阅读
雁塔菜农 2012-04-05 17:51
2012年度新唐Cortex-M0助学开发套件有约束条件赠送申报贴
2012年度新唐Cortex-M0助学套件从4月起每月有约束条件发放16套。 申报人必须是21ic或 EDNC 会员 并具备1月的会龄。 申报时必须注明“遵守约束条件,缴纳250元订金,上...
雁塔菜农 2012-04-05 17:04
2012年度Cortex-M0助学园地推广框图
...
雁塔菜农 2012-04-01 17:59
2012年度Cortex-M0助学园地奖励计划细则
抢楼请点击:菜地公告:即日起创建《菜农Cortex-M0助学园地》(盖楼入口) 每月10号和25号的下午2:50进行2次抢楼,规则同去年12月的疯狂抢楼活动。 奖品由21IC、北航、广州迪圣...
雁塔菜农 2012-02-03 08:19
菜农谋略:搞定牛人宋俊德,对女牛人孙昌旭说:“记住,俺是雁塔菜农~~~ ”
http://www.baidu.com/s?wd=%B2%CB%C5%A9%D0%A6%CC%B8%A1%B6%D0%C2%C0%CB%C3%FB%C8%CB%D0%A7%D3%A6%A1%B7...
EE直播间
更多
我要评论
2
9
关闭 站长推荐上一条 /1 下一条