菜农NUC100学习笔记1(一切从红杏出墙做起)

[复制链接]
6779|16
 楼主| hotpower 发表于 2010-12-5 01:43 | 显示全部楼层 |阅读模式
  1. /*-------------------------------------------------------------------------------
  2. 文 件 名 : NUC1xxcfg.h
  3. 创 建 人 : Cortex-M0菜鸟HotPower@163.com,HotPower@126.com,QQ:1270688699
  4. 创 建 日 期 : 2010.10.18 18:18
  5. 最近修改日期 : 2010.12.3 16:58
  6. 创 建 地 点 : 西安大雁塔村队部
  7. 版 本 号 : V1.03 (红杏版)
  8. 修 改 原 因 :
  9. 说 明 :
  10. 备 注 : 本头文件风格归属于菜农的《红杏出墙》系列,堪称“红杏级别”
  11. 将本文件拷贝到...\CMSIS\CM0\DeviceSupport\Nuvoton\NUC1xx内。
  12. -------------------------------------------------------------------------------*/

  13. #ifndef __NUC1xxcfg_H__
  14. #define __NUC1xxcfg_H__

  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif

  18. #if defined (__CC_ARM)
  19. #pragma anon_unions
  20. #endif

  21. #include "NUC1xx.h"

  22. typedef volatile unsigned int NU_REG;// Hardware register definition
  23. #define __noinit__ __attribute__((zero_init))//变量不初始化为0

  24. typedef enum
  25. {
  26. __0 = (NU_REG)0,
  27. __1 = (NU_REG)1,
  28. __2 = (NU_REG)2,
  29. __3 = (NU_REG)3,
  30. __4 = (NU_REG)4,
  31. __5 = (NU_REG)5,
  32. __6 = (NU_REG)6,
  33. __7 = (NU_REG)7,
  34. __8 = (NU_REG)8,
  35. __9 = (NU_REG)9,
  36. __10 = (NU_REG)10,
  37. __11 = (NU_REG)11,
  38. __12 = (NU_REG)12,
  39. __13 = (NU_REG)13,
  40. __14 = (NU_REG)14,
  41. __15 = (NU_REG)15,
  42. __16 = (NU_REG)16,
  43. __17 = (NU_REG)17,
  44. __18 = (NU_REG)18,
  45. __19 = (NU_REG)19,
  46. __20 = (NU_REG)20,
  47. __21 = (NU_REG)21,
  48. __22 = (NU_REG)22,
  49. __23 = (NU_REG)23,
  50. __24 = (NU_REG)24,
  51. __25 = (NU_REG)25,
  52. __26 = (NU_REG)26,
  53. __27 = (NU_REG)27,
  54. __28 = (NU_REG)28,
  55. __29 = (NU_REG)29,
  56. __30 = (NU_REG)30,
  57. __31 = (NU_REG)31
  58. }Number_enum;

  59. typedef volatile struct
  60. {
  61. NU_REG Bit0: 1;
  62. NU_REG Bit1: 1;
  63. NU_REG Bit2: 1;
  64. NU_REG Bit3: 1;
  65. NU_REG Bit4: 1;
  66. NU_REG Bit5: 1;
  67. NU_REG Bit6: 1;
  68. NU_REG Bit7: 1;
  69. NU_REG Bit8: 1;
  70. NU_REG Bit9: 1;
  71. NU_REG Bit10: 1;
  72. NU_REG Bit11: 1;
  73. NU_REG Bit12: 1;
  74. NU_REG Bit13: 1;
  75. NU_REG Bit14: 1;
  76. NU_REG Bit15: 1;
  77. NU_REG Bit16: 1;
  78. NU_REG Bit17: 1;
  79. NU_REG Bit18: 1;
  80. NU_REG Bit19: 1;
  81. NU_REG Bit20: 1;
  82. NU_REG Bit21: 1;
  83. NU_REG Bit22: 1;
  84. NU_REG Bit23: 1;
  85. NU_REG Bit24: 1;
  86. NU_REG Bit25: 1;
  87. NU_REG Bit26: 1;
  88. NU_REG Bit27: 1;
  89. NU_REG Bit28: 1;
  90. NU_REG Bit29: 1;
  91. NU_REG Bit30: 1;
  92. NU_REG Bit31: 1;
  93. }NU_BITs;
  94. //===============================================//
  95. typedef volatile struct
  96. {
  97. NU_REG Pin0: 1;
  98. NU_REG Pin1: 1;
  99. NU_REG Pin2: 1;
  100. NU_REG Pin3: 1;
  101. NU_REG Pin4: 1;
  102. NU_REG Pin5: 1;
  103. NU_REG Pin6: 1;
  104. NU_REG Pin7: 1;
  105. NU_REG Pin8: 1;
  106. NU_REG Pin9: 1;
  107. NU_REG Pin10: 1;
  108. NU_REG Pin11: 1;
  109. NU_REG Pin12: 1;
  110. NU_REG Pin13: 1;
  111. NU_REG Pin14: 1;
  112. NU_REG Pin15: 1;
  113. NU_REG Pin16: 1;
  114. NU_REG Pin17: 1;
  115. NU_REG Pin18: 1;
  116. NU_REG Pin19: 1;
  117. NU_REG Pin20: 1;
  118. NU_REG Pin21: 1;
  119. NU_REG Pin22: 1;
  120. NU_REG Pin23: 1;
  121. NU_REG Pin24: 1;
  122. NU_REG Pin25: 1;
  123. NU_REG Pin26: 1;
  124. NU_REG Pin27: 1;
  125. NU_REG Pin28: 1;
  126. NU_REG Pin29: 1;
  127. NU_REG Pin30: 1;
  128. NU_REG Pin31: 1;
  129. }NU_PINs;

  130. //============================================
  131. typedef volatile union
  132. {
  133. __IO NU_REG Regs;
  134. __IO NU_BITs Bits;
  135. }NU_REG_BITs;

  136. typedef volatile union
  137. {
  138. __IO NU_REG Regs;
  139. __IO NU_PINs Bits;
  140. }NU_REG_PINs;

  141. typedef struct
  142. {
  143. __IO NU_REG RESERVED:16;
  144. __IO NU_REG OFFD0:1;
  145. __IO NU_REG OFFD1:1;
  146. __IO NU_REG OFFD2:1;
  147. __IO NU_REG OFFD3:1;
  148. __IO NU_REG OFFD4:1;
  149. __IO NU_REG OFFD5:1;
  150. __IO NU_REG OFFD6:1;
  151. __IO NU_REG OFFD7:1;
  152. __IO NU_REG OFFD8:1;
  153. __IO NU_REG OFFD9:1;
  154. __IO NU_REG OFFD10:1;
  155. __IO NU_REG OFFD11:1;
  156. __IO NU_REG OFFD12:1;
  157. __IO NU_REG OFFD13:1;
  158. __IO NU_REG OFFD14:1;
  159. __IO NU_REG OFFD15:1;
  160. }NU_GPIO_OFFD_Bits;

  161. typedef volatile union
  162. {
  163. NU_REG Regs;
  164. GPIO_PMD_T Bits;
  165. }NU_GPIO_PMD_T;

  166. typedef volatile union
  167. {
  168. NU_REG Regs;
  169. NU_GPIO_OFFD_Bits Bits;
  170. }NU_GPIO_OFFD_T;

  171. //----------------------------------------------------//
  172. //改造GPIO为结构(不占用空间)
  173. typedef struct
  174. {
  175. NU_GPIO_PMD_T PMD;//模式控制(0输入1输出2开漏3准双向)
  176. NU_GPIO_OFFD_T OFFD;//数字使能(高16位)
  177. NU_REG_PINs DOUT;//数据输出值(低16位)
  178. NU_REG_PINs DMASK;//数据输出写屏蔽
  179. NU_REG_PINs PIN;//管脚数值(低16位)
  180. NU_REG_PINs DBEN;//防反弹使能
  181. NU_REG_PINs IMD;//中断模式控制(0边沿触发中断1电平触发中断)
  182. NU_REG_BITs IEN;//中断使能(高16位上升沿或高电平,低16位下降沿或低电平)
  183. NU_REG_PINs ISRC;//中断源标志
  184. NU_REG RESERVED[7];//保留,为了构造GPIO结构数组
  185. } NU_GPIO_T;

  186. typedef volatile union
  187. {
  188. NU_REG Regs;
  189. GPIO_DBNCECON_T Bits;
  190. }NU_GPIO_DBNCECON_T;

  191. typedef struct {
  192. union {
  193. __IO NU_GPIO_T Px[5];//GPIOs.Px[0].DOUT.Regs |= 1;GPIOs.Px[0].DOUT.Bits.Pin0 = 1;
  194. struct {
  195. __IO NU_GPIO_T PA;//GPIOs.PA.DOUT.Regs |=1;GPIOs.PA.DOUT.Bits.Pin0=1;
  196. __IO NU_GPIO_T PB;//GPIOs.PB.DOUT.Regs |=2;GPIOs.PB.DOUT.Bits.Pin1=1;
  197. __IO NU_GPIO_T PC;//GPIOs.PC.DOUT.Regs |=4;GPIOs.PC.DOUT.Bits.Pin2=1;
  198. __IO NU_GPIO_T PD;//GPIOs.PD.DOUT.Regs |=8;GPIOs.PD.DOUT.Bits.Pin3=1;
  199. __IO NU_GPIO_T PE;//GPIOs.PE.DOUT.Regs |=16;GPIOs.PE.DOUT.Bits.Pin4=1;
  200. };
  201. };
  202. __I NU_REG RESERVED[16];
  203. __IO NU_GPIO_DBNCECON_T DBNCECON;
  204. }NUS_GPIO, *NUPS_GPIO;

  205. #define NU_BASE_GPIO ((NUPS_GPIO) GPIOA_BASE)//定义硬件结构指针(硬件地址)
  206. #define GPIOs (*NU_BASE_GPIO)//定位全局结构变量GPIOs
  207. //----------------------------------------------------//
  208. #define GPIOAs (*((NU_GPIO_T *) GPIOA_BASE))//定位全局结构变量GPIOAs
  209. #define GPIOBs (*((NU_GPIO_T *) GPIOB_BASE))//定位全局结构变量GPIOBs
  210. #define GPIOCs (*((NU_GPIO_T *) GPIOC_BASE))//定位全局结构变量GPIOCs
  211. #define GPIODs (*((NU_GPIO_T *) GPIOD_BASE))//定位全局结构变量GPIODs
  212. #define GPIOEs (*((NU_GPIO_T *) GPIOE_BASE))//定位全局结构变量GPIOEs
  213. //----------------------------------------------------//

  214. #define GPIOx(x) ((NU_GPIO_T *) GPIOA_BASE + (x * 0x0040))
  215. #define Px(x) ((NU_GPIO_T *) GPIOA_BASE + (x * 0x0040))
  216. //----------------------------------------------------//

  217. typedef enum
  218. {
  219. SPI_CNTRL_GO_BUSY = 0,//通讯或忙状态标志
  220. SPI_CNTRL_RX_NEG = 1,//接收数据边沿反向位(0=SDI信号在SPICLK上升沿接收)
  221. SPI_CNTRL_TX_NEG = 2,//发送数据边沿反向位(0=SDO信号在SPICLK的上升沿发送)
  222. SPI_CNTRL_TX_BIT_LEN = 3,//传输位长度(32,1,...31)
  223. SPI_CNTRL_TX_NUM = 8,//发送/接收数量(00=每次传输仅完成1次发送/接收,01=每次传输仅完成2次发送/接收)
  224. SPI_CNTRL_LSB = 10,//优先传送LSB(0=优先发送/接收MSB,根据CNTRL寄存器的Tx_BIT_LEN 决定TxX/RxX)
  225. SPI_CNTRL_CLKP = 11,//时钟极性(0=SCLK低电平闲置)
  226. SPI_CNTRL_SP_CYCLE = 12,//暂缓间隙 (仅主机模式)
  227. SPI_CNTRL_IF = 16,//中断标志(0=表示传输未结束, 该位写1清零)
  228. SPI_CNTRL_IE = 17,//中断使能
  229. SPI_CNTRL_SLAVE = 18,//SLAVE模式标志(0=MCU作为主机模式)
  230. SPI_CNTRL_BYTE_REORDER = 19,
  231. SPI_CNTRL_TWOB= 21,
  232. SPI_CNTRL_VARCLK_EN = 22
  233. }NU_SPI_CNTRL_ENUM;

  234. typedef enum
  235. {
  236. SPI_SSR_SSR = 0,//从机选择寄存器(主机模式)
  237. SPI_SSR_SS_LVL = 2,//从机选择触发电平选择
  238. SPI_SSR_AUTOSS = 3,//自动从机选择(主机模式)
  239. SPI_SSR_SS_LTRIG = 4,//从机电平触发选择(从机模式)
  240. SPI_SSR_LTRIG_FLAG = 5//电平触发标志
  241. }NU_SPI_SSR_ENUM;

  242. typedef enum
  243. {
  244. SPI_DMA_TX_DMA_GO = 0,//发送DMA开始(如果采用DMA发送数据,将不会对SPI_CNTRL寄存器的GO_BUSY位置位)
  245. SPI_DMA_RX_DMA_GO = 1//接收DMA开始
  246. }NU_SPI_DMA_ENUM;

  247. typedef volatile union
  248. {
  249. NU_REG Regs;
  250. SPI_CNTRL_T Bits;
  251. }NU_SPI_CNTRL_T;

  252. typedef volatile union
  253. {
  254. NU_REG Regs;
  255. SPI_SSR_T Bits;
  256. }NU_SPI_SSR_T;

  257. typedef volatile union
  258. {
  259. NU_REG Regs;
  260. SPI_DIVIDER_T Bits;
  261. }NU_SPI_DIVIDER_T;

  262. typedef volatile union
  263. {
  264. NU_REG Regs;
  265. SPI_DMA_T Bits;
  266. }NU_SPI_DMA_T;

  267. typedef struct
  268. {
  269. NU_SPI_CNTRL_T CNTRL;//控制及状态寄存器
  270. NU_SPI_DIVIDER_T DIVIDER;//时钟除频寄存器
  271. NU_SPI_SSR_T SSR;//从机选择寄存器
  272. NU_REG RESERVE0;//保留
  273. union{
  274. NU_REG_BITs RX[2];//接收数据寄存器数组
  275. struct{
  276. NU_REG_BITs RX0;//接收数据寄存器低32位
  277. NU_REG_BITs RX1;//接收数据寄存器高32位
  278. };
  279. };
  280. NU_REG RESERVE1[2];//保留
  281. union{
  282. NU_REG_BITs TX[2];//数据发送寄存器数组
  283. struct{
  284. NU_REG_BITs TX0;//数据发送寄存器低32位
  285. NU_REG_BITs TX1;//数据发送寄存器高32位
  286. };
  287. };
  288. NU_REG RESERVE2[3];//保留
  289. NU_REG_BITs VARCLK;
  290. NU_SPI_DMA_T DMA;//SPIDMA控制寄存器
  291. }NU_SPI_T;
  292. //----------------------------------------------------//
  293. #define SPI0s (*((NU_SPI_T *) SPI0_BASE))//定位全局结构变量SPI0s
  294. #define SPI1s (*((NU_SPI_T *) SPI1_BASE))//定位全局结构变量SPI1s
  295. #define SPI2s (*((NU_SPI_T *) SPI2_BASE))//定位全局结构变量SPI2s
  296. #define SPI3s (*((NU_SPI_T *) SPI3_BASE))//定位全局结构变量SPI3s
  297. //----------------------------------------------------//
  298. #define SPIx(x) ((NU_SPI_T *) SPI0_BASE + ((x & 1) * 0x4000) + ((x >> 1) * 0x100000))
  299. //----------------------------------------------------//
  300. typedef volatile union
  301. {
  302. NU_REG Regs;
  303. PDMA_CSR_T Bits;
  304. }NU_PDMA_CSR_T;


  305. typedef volatile union
  306. {
  307. NU_REG Regs;
  308. PDMA_CBCR_T Bits;
  309. }NU_PDMA_CBCR_T;

  310. typedef volatile union
  311. {
  312. NU_REG Regs;
  313. PDMA_IER_T Bits;
  314. }NU_PDMA_IER_T;

  315. typedef volatile union
  316. {
  317. NU_REG Regs;
  318. PDMA_ISR_T Bits;
  319. }NU_PDMA_ISR_T;

  320. typedef enum
  321. {
  322. PDMA_CSR_PDMACEN = 0,//PDMA通道使能
  323. PDMA_CSR_SW_RST = 1,//软件产生复位
  324. PDMA_CSR_MODE_SEL = 2,//PDMA模式选择
  325. PDMA_CSR_SAD_SEL = 4,//传输源地址方向选择
  326. PDMA_CSR_DAD_SEL = 6,//传输目的地址方向选择
  327. PDMA_CSR_WAR_BCR_SEL = 12,
  328. PDMA_CSR_APB_TWS = 19,//外设传输宽度选择
  329. PDMA_CSR_TRIG_EN = 23//PDMA数据读写传输使能(当PDMA传输完成, 该位自动清除.)
  330. }NU_PDMA_CSR_ENUM;

  331. typedef enum
  332. {
  333. PDMA_CBCR_CBCR = 0
  334. }NU_PDMA_CBCR_ENUM;

  335. typedef enum
  336. {
  337. PDMA_IER_TABORT_IE = 0,//读写异常使能
  338. PDMA_IER_BLKD_IE = 1,//Transfer Done中断使能
  339. PDMA_IER_WAR_IE = 2//Wrap Around中断使能
  340. }NU_PDMA_IER_ENUM;

  341. typedef enum
  342. {
  343. PDMA_ISR_TABORT_IF = 0,//PDMA 读/写 目标异常中断标志位
  344. PDMA_ISR_BLKD_IF = 1,//Block 传递完成 中断标志位
  345. PDMA_ISR_WAR_BCR_IF= 8,//Wrap around传递字节计时器中断标志位
  346. PDMA_ISR_INTR = 31//中断管脚状态(只读)
  347. }NU_PDMA_ISR_ENUM;

  348. typedef struct
  349. {
  350. NU_PDMA_CSR_T CSR;//控制寄存器
  351. NU_REG_BITs SAR;//源地址寄存器
  352. NU_REG_BITs DAR;//目的地址寄存器
  353. NU_REG_BITs BCR;//发送字节计数寄存器
  354. NU_REG_BITs POINT;//内部数据指示器
  355. NU_REG_BITs CSAR;//当前源目的地址
  356. NU_REG_BITs CDAR;//当前目的地址寄存器
  357. NU_PDMA_CBCR_T CBCR;//当前传输字节计数寄存器
  358. NU_PDMA_IER_T IER;//中断使能寄存器
  359. NU_PDMA_ISR_T ISR;//中断状态寄存器
  360. union{
  361. NU_REG_BITs SBUF[4];//共享缓冲FIFO
  362. struct{
  363. NU_REG_BITs SBUF0;//共享缓冲FIFO
  364. NU_REG_BITs SBUF1;//共享缓冲FIFO
  365. NU_REG_BITs SBUF2;//共享缓冲FIFO
  366. NU_REG_BITs SBUF3;//共享缓冲FIFO
  367. };
  368. };
  369. }NU_PDMA_T;

  370. typedef struct {
  371. union {
  372. __IO NU_PDMA_T CHx[16];
  373. struct {
  374. __IO NU_PDMA_T CH0;
  375. __IO NU_PDMA_T CH1;
  376. __IO NU_PDMA_T CH2;
  377. __IO NU_PDMA_T CH3;
  378. __IO NU_PDMA_T CH4;
  379. __IO NU_PDMA_T CH5;
  380. __IO NU_PDMA_T CH6;
  381. __IO NU_PDMA_T CH7;
  382. __IO NU_PDMA_T CH8;
  383. __IO NU_PDMA_T RESERVE[7];
  384. };
  385. };
  386. }NUS_PDMA, *NUPS_PDMA;

  387. #define NU_BASE_PDMA ((NUPS_PDMA) PDMA0_BASE)//定义硬件结构指针(硬件地址)
  388. #define PDMAs (*NU_BASE_PDMA)//定位全局结构变量PDMAs
  389. //----------------------------------------------------//
  390. #define PDMA0s (*((NU_PDMA_T *) PDMA0_BASE))//定位全局结构变量PDMA0s
  391. #define PDMA1s (*((NU_PDMA_T *) PDMA1_BASE))//定位全局结构变量PDMA1s
  392. #define PDMA2s (*((NU_PDMA_T *) PDMA2_BASE))//定位全局结构变量PDMA2s
  393. #define PDMA3s (*((NU_PDMA_T *) PDMA3_BASE))//定位全局结构变量PDMA3s
  394. #define PDMA4s (*((NU_PDMA_T *) PDMA4_BASE))//定位全局结构变量PDMA4s
  395. #define PDMA5s (*((NU_PDMA_T *) PDMA5_BASE))//定位全局结构变量PDMA5s
  396. #define PDMA6s (*((NU_PDMA_T *) PDMA6_BASE))//定位全局结构变量PDMA6s
  397. #define PDMA7s (*((NU_PDMA_T *) PDMA7_BASE))//定位全局结构变量PDMA7s
  398. #define PDMA8s (*((NU_PDMA_T *) PDMA8_BASE))//定位全局结构变量PDMA8s
  399. //----------------------------------------------------//
  400. #define PDMAx(x) ((NU_PDMA_T *) PDMA0_BASE + (x * 0x0100))
  401. //----------------------------------------------------//
  402. typedef enum
  403. {
  404. TIMER_TCSR_PRESCALE = 0,//预分频计数器
  405. TIMER_TCSR_TDR_EN = 16,//数据锁存使能
  406. TIMER_TCSR_COUNTER_EN = 24,//
  407. TIMER_TCSR_CACT = 25,//定时器工作状态
  408. TIMER_TCSR_CRST = 26,//计数器重置
  409. TIMER_TCSR_MODE = 27,//定时器工作模式
  410. TIMER_TCSR_TMR_IE = 29,//中断使能
  411. TIMER_TCSR_CEN = 30,//计数器使能位
  412. TIMER_TCSR_nDBGACK_EN = 31
  413. }NU_TIMER_TCSR_ENUM;

  414. typedef volatile union
  415. {
  416. NU_REG Regs;
  417. TIMER_TCSR_T Bits;
  418. }NU_TIMER_TCSR_T;

  419. typedef enum
  420. {
  421. TIMER_TISR_TIF = 0//定时器中断标志
  422. }NU_TIMER_TISR_T_ENUM;

  423. typedef volatile union
  424. {
  425. NU_REG Regs;
  426. TIMER_TISR_T Bits;
  427. }NU_TIMER_TISR_T;

  428. typedef struct
  429. {
  430. __IO NU_TIMER_TCSR_T TCSR;//控制与状态寄存器
  431. __IO NU_REG_BITs TCMPR;//比较寄存器
  432. __IO NU_TIMER_TISR_T TISR;//中断状态寄存器
  433. __IO NU_REG_BITs TDR;//数据寄存器
  434. }NU_TIMER_T;

  435. //----------------------------------------------------//
  436. #define TIMER0s (*((NU_TIMER_T *) TIMER0_BASE))//定位全局结构变量TIMER0s
  437. #define TIMER1s (*((NU_TIMER_T *) TIMER1_BASE))//定位全局结构变量TIMER1s
  438. #define TIMER2s (*((NU_TIMER_T *) TIMER2_BASE))//定位全局结构变量TIMER2s
  439. #define TIMER3s (*((NU_TIMER_T *) TIMER3_BASE))//定位全局结构变量TIMER3s
  440. //----------------------------------------------------//
  441. #define TIMERx(x) ((NU_TIMER_T *)TIMER0_BASE + ((x & 1) * 0x0020) + ((x >> 1) * 0x100000))
  442. //----------------------------------------------------//
  443. typedef enum
  444. {
  445. I2C_CON_AA = 2,//I2C接收应答标志位
  446. I2C_CON_SI = 3,//I2C中断标志位
  447. I2C_CON_STO = 4,//I2C停止标志
  448. I2C_CON_STA = 5,//I2C起始标志
  449. I2C_CON_ENSI = 6,//I2C控制使能/禁止
  450. I2C_CON_EI = 7 //使能中断
  451. }NU_I2C_CON_ENUM;

  452. typedef volatile union
  453. {
  454. NU_REG Regs;
  455. I2C_CON_T Bits;
  456. }NU_I2C_CON_T;

  457. typedef enum
  458. {
  459. I2C_ADDR_GC = 0,//全呼功能
  460. I2C_ADDR_ADDR = 1 //I2C地址寄存器
  461. }NU_I2C_ADDR_ENUM;

  462. typedef volatile union
  463. {
  464. NU_REG Regs;
  465. I2C_ADDR_T Bits;
  466. }NU_I2C_ADDR_T;

  467. typedef enum
  468. {
  469. I2C_ADRM_ADM = 1 //I2C隐藏地址寄存器
  470. }NU_I2C_ADRM_ENUM;

  471. typedef volatile union
  472. {
  473. NU_REG Regs;
  474. I2C_ADRM_T Bits;
  475. }NU_I2C_ADRM_T;

  476. typedef enum
  477. {
  478. I2C_TOC_TIF = 0,//超时标志
  479. I2C_TOC_DIV4 = 1,//超时计数输入时钟除4
  480. I2C_TOC_ENTI = 2 //超时计数使能/禁止
  481. }NU_I2C_TOC_NUM;

  482. typedef volatile union
  483. {
  484. NU_REG Regs;
  485. I2C_TOC_T Bits;
  486. }NU_I2C_TOC_T;

  487. typedef struct
  488. {
  489. __IO NU_I2C_CON_T CON;//I2C控制寄存器
  490. __IO NU_I2C_ADDR_T ADDR0;//I2C从机地址寄存器0
  491. __IO NU_REG_BITs DATA;//I2C数据寄存器
  492. __IO NU_REG_BITs STATUS;//I2C状态寄存器
  493. __IO NU_REG_BITs CLK;//I2C时钟时钟分频寄存器
  494. __IO NU_I2C_TOC_T TOC;//I2C超时控制寄存器
  495. __IO NU_I2C_ADDR_T ADDR1;//从机地址寄存器1
  496. __IO NU_I2C_ADDR_T ADDR2;//从机地址寄存器2
  497. __IO NU_I2C_ADDR_T ADDR3;//从机地址寄存器3
  498. __IO NU_I2C_ADRM_T ADRM0;//从机隐藏地址寄存器0
  499. __IO NU_I2C_ADRM_T ADRM1;//从机隐藏地址寄存器1
  500. __IO NU_I2C_ADRM_T ADRM2;//从机隐藏地址寄存器2
  501. __IO NU_I2C_ADRM_T ADRM3;//从机隐藏地址寄存器3
  502. __IO NU_REG RESERVE[((I2C1_BASE - I2C0_BASE) - sizeof(I2C_T)) / sizeof(NU_REG)];
  503. }NU_I2C_T;
  504. //----------------------------------------------------//
  505. typedef struct {
  506. union {
  507. __IO NU_I2C_T PORT[2];
  508. struct {
  509. __IO NU_I2C_T PORT0;
  510. __IO NU_I2C_T PORT1;
  511. };
  512. };
  513. }NUS_I2C, *NUPS_I2C;

  514. #define NU_BASE_I2C ((NUPS_I2C) I2C0_BASE)//定义硬件结构指针(硬件地址)
  515. #define I2Cs (*NU_BASE_I2C)//定位全局结构变量I2Cs
  516. //----------------------------------------------------//
  517. #define I2C0s (*((NU_I2C_T *) I2C0_BASE))//定位全局结构变量I2C0s
  518. #define I2C1s (*((NU_I2C_T *) I2C1_BASE))//定位全局结构变量I2C0s
  519. //----------------------------------------------------//
  520. #define I2Cx(x) ((NU_I2C_T *) I2C0_BASE + (x * 0x100000))
  521. //----------------------------------------------------//
  522. typedef volatile union
  523. {
  524. NU_REG Regs;
  525. PWM_PPR_T Bits;
  526. }NU_PWM_PPR_T;

  527. typedef volatile union
  528. {
  529. NU_REG Regs;
  530. PWM_CSR_T Bits;
  531. }NU_PWM_CSR_T;

  532. typedef volatile union
  533. {
  534. NU_REG Regs;
  535. PWM_PCR_T Bits;
  536. }NU_PWM_PCR_T;

  537. typedef volatile union
  538. {
  539. NU_REG Regs;
  540. PWM_PBCR_T Bits;
  541. }NU_PWM_PBCR_T;

  542. typedef volatile union
  543. {
  544. NU_REG Regs;
  545. PWM_PIER_T Bits;
  546. }NU_PWM_PIER_T;

  547. typedef volatile union
  548. {
  549. NU_REG Regs;
  550. PWM_PIIR_T Bits;
  551. }NU_PWM_PIIR_T;

  552. typedef volatile union
  553. {
  554. NU_REG Regs;
  555. PWM_CCR0_T Bits;
  556. }NU_PWM_CCR0_T;

  557. typedef volatile union
  558. {
  559. NU_REG Regs;
  560. PWM_CCR2_T Bits;
  561. }NU_PWM_CCR2_T;

  562. typedef volatile union
  563. {
  564. NU_REG Regs;
  565. PWM_POE_T Bits;
  566. }NU_PWM_POE_T;

  567. typedef struct
  568. {
  569. __IO NU_PWM_PPR_T PPR;//PWM0~3或PWM4~7预分频寄存器
  570. __IO NU_PWM_CSR_T CSR;//PWM0~3或PWM4~7时钟选择寄存器
  571. __IO NU_PWM_PCR_T PCR;//PWM0~3或PWM4~7控制寄存器
  572. __IO NU_REG_BITs CNR0;//PWM0或PWM4计数器寄存器
  573. __IO NU_REG_BITs CMR0;//PWM0或PWM4比较寄存器
  574. __IO NU_REG_BITs PDR0;//PWM0或PWM4数据寄存器
  575. __IO NU_REG_BITs CNR1;//PWM1或PWM5计数器寄存器
  576. __IO NU_REG_BITs CMR1;//PWM1或PWM5比较寄存器
  577. __IO NU_REG_BITs PDR1;//PWM1或PWM5数据寄存器
  578. __IO NU_REG_BITs CNR2;//PWM2或PWM6计数器寄存器
  579. __IO NU_REG_BITs CMR2;//PWM2或PWM6比较寄存器
  580. __IO NU_REG_BITs PDR2;//PWM2或PWM6数据寄存器
  581. __IO NU_REG_BITs CNR3;//PWM3或PWM7计数器寄存器
  582. __IO NU_REG_BITs CMR3;//PWM3或PWM7比较寄存器
  583. __IO NU_REG_BITs PDR3;//PWM3或PWM7数据寄存器
  584. __IO NU_PWM_PBCR_T PBCR;
  585. __IO NU_PWM_PIER_T PIER;//PWM0~3或PWM4~7中断使能寄存器
  586. __IO NU_PWM_PIIR_T PIIR;
  587. __I NU_REG RESERVE1[2];
  588. __IO NU_PWM_CCR0_T CCR0;
  589. __IO NU_PWM_CCR2_T CCR2;
  590. __IO NU_REG_BITs CRLR0;
  591. __IO NU_REG_BITs CFLR0;
  592. __IO NU_REG_BITs CRLR1;
  593. __IO NU_REG_BITs CFLR1;
  594. __IO NU_REG_BITs CRLR2;
  595. __IO NU_REG_BITs CFLR2;
  596. __IO NU_REG_BITs CRLR3;
  597. __IO NU_REG_BITs CFLR3;
  598. __IO NU_REG_BITs CAPENR;
  599. __IO NU_PWM_POE_T POE;
  600. }NU_PWM_T;
  601. //----------------------------------------------------//
  602. #define PWM03s (*((NU_PWM_T *) PWMA_BASE))//定位全局结构变量PWM03s
  603. #define PWM47s (*((NU_PWM_T *) PWMB_BASE))//定位全局结构变量PWM47s
  604. //----------------------------------------------------//
  605. #define PWMx(x) ((NU_PWM_T *) PWMA_BASE + (x * 0x100000))
  606. //----------------------------------------------------//
  607. typedef volatile union
  608. {
  609. NU_REG Regs;
  610. UART_IER_T Bits;
  611. }NU_UART_IER_T;

  612. typedef volatile union
  613. {
  614. NU_REG Regs;
  615. UART_FCR_T Bits;
  616. }NU_UART_FCR_T;

  617. typedef volatile union
  618. {
  619. NU_REG Regs;
  620. UART_LCR_T Bits;
  621. }NU_UART_LCR_T;

  622. typedef volatile union
  623. {
  624. NU_REG Regs;
  625. UART_MCR_T Bits;
  626. }NU_UART_MCR_T;

  627. typedef volatile union
  628. {
  629. NU_REG Regs;
  630. UART_MSR_T Bits;
  631. }NU_UART_MSR_T;

  632. typedef volatile union
  633. {
  634. NU_REG Regs;
  635. UART_FSR_T Bits;
  636. }NU_UART_FSR_T;

  637. typedef volatile union
  638. {
  639. NU_REG Regs;
  640. UART_ISR_T Bits;
  641. }NU_UART_ISR_T;

  642. typedef volatile union
  643. {
  644. NU_REG Regs;
  645. UART_TOR_T Bits;
  646. }NU_UART_TOR_T;

  647. typedef volatile union
  648. {
  649. NU_REG Regs;
  650. UART_BAUD_T Bits;
  651. }NU_UART_BAUD_T;

  652. typedef volatile union
  653. {
  654. NU_REG Regs;
  655. UART_IRCR_T Bits;
  656. }NU_UART_IRCR_T;

  657. typedef volatile union
  658. {
  659. NU_REG Regs;
  660. UART_ALTCON_T Bits;
  661. }NU_UART_ALTCON_T;

  662. typedef volatile union
  663. {
  664. NU_REG Regs;
  665. UART_FUNSEL_T Bits;
  666. }NU_UART_FUNSEL_T;

  667. typedef struct
  668. {
  669. union{
  670. __IO NU_REG_BITs DATA;//接收发送数据
  671. __I NU_REG_BITs RBR;//接收数据缓存寄存器
  672. __O NU_REG_BITs THR;//发送保持寄存器
  673. };
  674. __IO NU_UART_IER_T IER;//中断使能寄存器
  675. __IO NU_UART_FCR_T FCR;//FIFO控制寄存器
  676. __IO NU_UART_LCR_T LCR;//Line控制寄存器
  677. __IO NU_UART_MCR_T MCR;//Modem控制寄存器
  678. __IO NU_UART_MSR_T MSR;//Modem状态寄存器
  679. __IO NU_UART_FSR_T FSR;//FIFO状态寄存器
  680. __IO NU_UART_ISR_T ISR;//中断状态寄存器
  681. __IO NU_UART_TOR_T TOR;//定时溢出寄存器
  682. __IO NU_UART_BAUD_T BAUD;//波特率分频寄存器
  683. __IO NU_UART_IRCR_T IRCR;//IrDA控制寄存器
  684. __IO NU_UART_ALTCON_T ALTCON;//LIN Break失败计数寄存器
  685. __IO NU_UART_FUNSEL_T FUNSEL;//功能选择寄存器
  686. }NU_UART_T;

  687. //----------------------------------------------------//
  688. #define UART0s (*((NU_UART_T *) UART0_BASE))//定位全局结构变量UART0s
  689. #define UART1s (*((NU_UART_T *) UART1_BASE))//定位全局结构变量UART0s
  690. #define UART2s (*((NU_UART_T *) UART2_BASE))//定位全局结构变量UART0s
  691. #define UART3s (*((NU_UART_T *) UART3_BASE))//定位全局结构变量UART0s
  692. //----------------------------------------------------//
  693. #define UARTx(x) ((NU_UART_T *) UART0_BASE + ((x & 1) * 0x100000) + ((x >> 1) * 0x104000))
  694. #define Ux(x) ((NU_UART_T *) UART0_BASE + ((x & 1) * 0x100000) + ((x >> 1) * 0x104000))
  695. //----------------------------------------------------//
  696. typedef enum
  697. {
  698. ADC_ADDR_RSLT = 0,//A/D转换结果
  699. ADC_ADDR_OVERRUN = 16,//结束运行标志位
  700. ADC_ADDR_VALID = 17//有效标志位
  701. }NU_ADC_ADDR_ENUM;

  702. typedef volatile union
  703. {
  704. NU_REG Regs;
  705. ADC_ADDR_T Bits;
  706. }NU_ADC_ADDR_T;

  707. typedef enum
  708. {
  709. ADC_ADCR_ADEN = 0,//A/D转换使能
  710. ADC_ADCR_ADIE = 1,//A/D中断使能
  711. ADC_ADCR_ADMD = 2,//A/D转换操作模式
  712. ADC_ADCR_TRGS = 4,//硬件触发源
  713. ADC_ADCR_TRGCOND = 6,//外部触发条件
  714. ADC_ADCR_TRGEN = 8,//外部触发使能
  715. ADC_ADCR_PTEN = 9,//PDMA 传送使能
  716. ADC_ADCR_DIFFEN = 10,//A/D差分输入模式使能
  717. ADC_ADCR_ADST = 11,//A/D转换开始
  718. ADC_ADCR_DMOF = 31
  719. }NU_ADC_ADCR_ENUM;

  720. typedef volatile union
  721. {
  722. NU_REG Regs;
  723. ADC_ADCR_T Bits;
  724. }NU_ADC_ADCR_T;

  725. typedef enum
  726. {
  727. ADC_ADCHER_CHEN0 = 0,//模拟输入通道0
  728. ADC_ADCHER_CHEN1 = 1,//模拟输入通道1
  729. ADC_ADCHER_CHEN2 = 2,//模拟输入通道2
  730. ADC_ADCHER_CHEN3 = 3,//模拟输入通道3
  731. ADC_ADCHER_CHEN4 = 4,//模拟输入通道4
  732. ADC_ADCHER_CHEN5 = 5,//模拟输入通道5
  733. ADC_ADCHER_CHEN6 = 6,//模拟输入通道6
  734. ADC_ADCHER_CHEN7 = 7,//模拟输入通道7
  735. ADC_ADCHER_PRESEL = 8 //模拟输入通道7选择位
  736. //00:模拟输入通道7 01:Bandgap(VBG)模拟输入
  737. //10:VTEMP模拟输入 11:模拟地
  738. }NU_ADC_ADCHER_ENUM;

  739. typedef volatile union
  740. {
  741. NU_REG Regs;
  742. ADC_ADCHER_T Bits;
  743. }NU_ADC_ADCHER_T;

  744. typedef enum
  745. {
  746. ADC_ADCMPR_CMPEN = 0, //比较使能
  747. ADC_ADCMPR_CMPIE = 1, //比较中断使能
  748. ADC_ADCMPR_CMPCOND = 2, //比较条件
  749. ADC_ADCMPR_CMPCH = 3, //Compare通道选择(000=选择通道0转换结果,111=选择通道7转换结果)
  750. ADC_ADCMPR_CMPMATCNT = 8, //比较匹配值
  751. ADC_ADCMPR_CMPD = 16 //比较数值
  752. }NU_ADC_ADCMPR_ENUM;

  753. typedef volatile union
  754. {
  755. NU_REG Regs;
  756. ADC_ADCMPR_T Bits;
  757. }NU_ADC_ADCMPR_T;

  758. typedef enum
  759. {
  760. ADC_ADSR_ADF = 0,//A/D转换结束标志位
  761. ADC_ADSR_CMPF0 = 1,//比较标志位
  762. ADC_ADSR_CMPF1 = 2,//较标志位
  763. ADC_ADSR_BUSY = 3,//BUSY/IDLE
  764. ADC_ADSR_CHANNEL = 4,//当前转换通道
  765. ADC_ADSR_VALID = 8,//数据有效标志位
  766. ADC_ADSR_OVERRUN = 16//结束运行标志位
  767. }NU_ADC_ADSR_ENUM;

  768. typedef volatile union
  769. {
  770. NU_REG Regs;
  771. ADC_ADSR_T Bits;
  772. }NU_ADC_ADSR_T;

  773. typedef enum
  774. {
  775. ADC_ADCALR_CALEN = 0,//自身校准功能使能
  776. ADC_ADCALR_CALDONE = 1 //校准完成标志(只读)
  777. }NU_ADC_ADCALR_ENUM;

  778. typedef volatile union
  779. {
  780. NU_REG Regs;
  781. ADC_ADCALR_T Bits;
  782. }NU_ADC_ADCALR_T;

  783. typedef enum
  784. {
  785. ADC_ADPDMA_AD_PDMA = 0 //ADC PDMA当前数据传输寄存器
  786. }NU_ADC_ADPDMA_ENUM;

  787. typedef volatile union
  788. {
  789. NU_REG Regs;
  790. ADC_ADPDMA_T Bits;
  791. }NU_ADC_ADPDMA_T;

  792. typedef struct
  793. {
  794. union{
  795. __I NU_ADC_ADDR_T ADDR[8];//A/D数据寄存器0~7
  796. struct{
  797. __I NU_ADC_ADDR_T ADDR0;//A/D数据寄存器0
  798. __I NU_ADC_ADDR_T ADDR1;//A/D数据寄存器1
  799. __I NU_ADC_ADDR_T ADDR2;//A/D数据寄存器2
  800. __I NU_ADC_ADDR_T ADDR3;//A/D数据寄存器3
  801. __I NU_ADC_ADDR_T ADDR4;//A/D数据寄存器4
  802. __I NU_ADC_ADDR_T ADDR5;//A/D数据寄存器5
  803. __I NU_ADC_ADDR_T ADDR6;//A/D数据寄存器6
  804. __I NU_ADC_ADDR_T ADDR7;//A/D数据寄存器7
  805. };
  806. };
  807. __IO NU_ADC_ADCR_T ADCR;//ADC控制寄存器
  808. __IO NU_ADC_ADCHER_T ADCHER;//A/D 通道使能
  809. union{
  810. __IO NU_ADC_ADCMPR_T ADCMPR[2];//A/D比较寄存器0,1
  811. struct{
  812. __IO NU_ADC_ADCMPR_T ADCMPR0;//A/D比较寄存器0
  813. __IO NU_ADC_ADCMPR_T ADCMPR1;//A/D比较寄存器1
  814. };
  815. };
  816. __IO NU_ADC_ADSR_T ADSR;//ADC状态寄存器
  817. __IO NU_ADC_ADCALR_T ADCALR;//A/D校准寄存器
  818. __I NU_REG RESERVE0;
  819. __I NU_REG RESERVE1;
  820. __IO NU_ADC_ADPDMA_T ADPDMA;//A/D PDMA当前数据传输寄存器
  821. }NU_ADC_T;
  822. //----------------------------------------------------//
  823. #define ADCs (*((NU_ADC_T *) ADC_BASE))//定位全局结构变量ADCs
  824. //----------------------------------------------------//
  825. #define ADCx ((NU_ADC_T *) ADC_BASE)
  826. //----------------------------------------------------//
  827. typedef enum
  828. {
  829. SYSCLK_PWRCON_XTL12M_EN = 0,//外部12MHz晶振控制
  830. SYSCLK_PWRCON_XTL32K_EN = 1,//外部32.768KHz晶振控制
  831. SYSCLK_PWRCON_OSC22M_EN = 2,//内部22MHz振荡器控制
  832. SYSCLK_PWRCON_OSC10K_EN = 3,//内部10KHz振荡器控制
  833. SYSCLK_PWRCON_PD_WU_DLY = 4,//使能唤醒延时计数器
  834. SYSCLK_PWRCON_PD_WU_INT_EN = 5,//掉电模式唤醒的中断使能
  835. SYSCLK_PWRCON_PD_WU_STS = 6,//芯片掉电唤醒状态标志
  836. SYSCLK_PWRCON_PWR_DOWN = 7,//激活或使能系统掉电模式
  837. SYSCLK_PWRCON_PD_WAIT_CPU = 8 //控制进入掉电模式的条件
  838. }NU_SYSCLK_PWRCON_ENUM;

  839. typedef volatile union
  840. {
  841. NU_REG Regs;
  842. SYSCLK_PWRCON_T Bits;
  843. }NU_SYSCLK_PWRCON_T;

  844. typedef enum
  845. {
  846. SYSCLK_AHBCLK_PDMA_EN = 1,//PDMA控制器时钟使能控制
  847. SYSCLK_AHBCLK_ISP_EN = 2,//Flash ISP控制器时钟使能控制
  848. SYSCLK_AHBCLK_EBI_EN = 3 //
  849. }NU_SYSCLK_AHBCLK_ENUM;

  850. typedef volatile union
  851. {
  852. NU_REG Regs;
  853. SYSCLK_AHBCLK_T Bits;
  854. }NU_SYSCLK_AHBCLK_T;

  855. typedef enum
  856. {
  857. SYSCLK_APBCLK_WDT_EN = 0,//Watch Dog时钟使能
  858. SYSCLK_APBCLK_RTC_EN = 1,//Real-Time-Clock APB接口时钟控制
  859. SYSCLK_APBCLK_TMR0_EN = 2,//Timer0时钟使能控制
  860. SYSCLK_APBCLK_TMR1_EN = 3,//Timer1时钟使能控制
  861. SYSCLK_APBCLK_TMR2_EN = 4,//Timer2时钟使能控制
  862. SYSCLK_APBCLK_TMR3_EN = 5,//Timer3时钟使能控制
  863. SYSCLK_APBCLK_FDIV_EN = 6,//分频器输出时钟使能控制
  864. SYSCLK_APBCLK_I2C0_EN = 8,//I2C0时钟使能控制
  865. SYSCLK_APBCLK_I2C1_EN = 9,//I2C1时钟使能控制
  866. SYSCLK_APBCLK_SPI0_EN = 12,//SPI0时钟使能控制
  867. SYSCLK_APBCLK_SPI1_EN = 13,//SPI1时钟使能控制
  868. SYSCLK_APBCLK_SPI2_EN = 14,//SPI2时钟使能控制
  869. SYSCLK_APBCLK_SPI3_EN = 15,//SPI3时钟使能控制
  870. SYSCLK_APBCLK_UART0_EN = 16,//UART0时钟使能控制
  871. SYSCLK_APBCLK_UART1_EN = 17,//UART1时钟使能控制
  872. SYSCLK_APBCLK_UART2_EN = 18,//UART2时钟使能控制
  873. SYSCLK_APBCLK_PWM01_EN = 20,//PWM_01时钟使能控制
  874. SYSCLK_APBCLK_PWM23_EN = 21,//PWM_23时钟使能控制
  875. SYSCLK_APBCLK_PWM45_EN = 22,//PWM_45时钟使能控制
  876. SYSCLK_APBCLK_PWM67_EN = 23,//PWM_67时钟使能控制
  877. SYSCLK_APBCLK_CAN0_EN = 24,//使能CAN线控制器0时钟控制
  878. SYSCLK_APBCLK_USBD_EN = 27,//USB FS设备控制器时钟使能控制
  879. SYSCLK_APBCLK_ADC_EN = 28,//使能ADC时钟控制
  880. SYSCLK_APBCLK_I2S_EN = 29,//I2S时钟使能控制
  881. SYSCLK_APBCLK_ACMP_EN = 30,//模拟比较器时钟使能控制
  882. SYSCLK_APBCLK_PS2_EN = 31//PS2时钟使能控制
  883. }NU_SYSCLK_APBCLK_ENUM;

  884. typedef volatile union
  885. {
  886. NU_REG Regs;
  887. SYSCLK_APBCLK_T Bits;
  888. }NU_SYSCLK_APBCLK_T;

  889. typedef enum
  890. {
  891. SYSCLK_CLKSTATUS_XTL12M_STB = 0,
  892. SYSCLK_CLKSTATUS_XTL32K_STB = 1,
  893. SYSCLK_CLKSTATUS_PLL_STB = 2,
  894. SYSCLK_CLKSTATUS_OSC10K_STB = 3,
  895. SYSCLK_CLKSTATUS_OSC22M_STB = 4,
  896. SYSCLK_CLKSTATUS_RESERVE0 = 5,
  897. SYSCLK_CLKSTATUS_CLK_SW_FAIL = 7
  898. }NU_SYSCLK_CLKSTATUS_ENUM;

  899. typedef volatile union
  900. {
  901. NU_REG Regs;
  902. SYSCLK_CLKSTATUS_T Bits;
  903. }NU_SYSCLK_CLKSTATUS_T;

  904. typedef enum
  905. {
  906. SYSCLK_CLKSEL0_HCLK_S = 0,
  907. SYSCLK_CLKSEL0_STCLK_S = 3
  908. }NU_SYSCLK_CLKSEL0_ENUM;

  909. typedef volatile union
  910. {
  911. NU_REG Regs;
  912. SYSCLK_CLKSEL0_T Bits;
  913. }NU_SYSCLK_CLKSEL0_T;

  914. typedef enum
  915. {
  916. SYSCLK_CLKSEL1_WDT_S = 0,//WDGCLK时钟源选择
  917. SYSCLK_CLKSEL1_ADC_S = 1,//ADC时钟源选择
  918. SYSCLK_CLKSEL1_TMR0_S = 8,//TIMER0时钟源选择
  919. SYSCLK_CLKSEL1_TMR1_S = 12,//TIMER1时钟源选择
  920. SYSCLK_CLKSEL1_TMR2_S = 16,//TIMER2时钟源选择
  921. SYSCLK_CLKSEL1_TMR3_S = 20,//TIMER3时钟源选择
  922. SYSCLK_CLKSEL1_UART_S = 24,//UART时钟源选择
  923. SYSCLK_CLKSEL1_CAN_S = 26,//CAN时钟源选择
  924. SYSCLK_CLKSEL1_PWM01_S = 28,//PWM1与PWM0的时钟源选择
  925. SYSCLK_CLKSEL1_PWM23_S = 30 //PWM3与PWM2的时钟源选择.
  926. }NU_SYSCLK_CLKSEL1_ENUM;

  927. typedef volatile union
  928. {
  929. NU_REG Regs;
  930. SYSCLK_CLKSEL1_T Bits;
  931. }NU_SYSCLK_CLKSEL1_T;

  932. typedef enum
  933. {
  934. SYSCLK_CLKDIV_HCLK_N = 0,//HCLK时钟频率=(HCLK时钟源频率)/(HCLK_N+1)
  935. SYSCLK_CLKDIV_USB_N = 4,//USB时钟频率=(PLL频率)/(USB_N+1)
  936. SYSCLK_CLKDIV_UART_N = 8,//UART时钟频率=(UART时钟源频率)/(UART_N+1)
  937. SYSCLK_CLKDIV_CAN_N = 12,//APU时钟频率=(CAN时钟源频率)/(CAN_N+1)
  938. SYSCLK_CLKDIV_ADC_N = 16,//ADC时钟频率=ADC时钟源频率/(ADC_N+1)
  939. SYSCLK_CLKDIV_CAN_N_EXT = 24//
  940. }NU_SYSCLK_CLKDIV_ENUM;

  941. typedef volatile union
  942. {
  943. NU_REG Regs;
  944. SYSCLK_CLKDIV_T Bits;
  945. }NU_SYSCLK_CLKDIV_T;

  946. typedef enum
  947. {
  948. SYSCLK_CLKSEL2_I2S_S = 0,//I2S时钟源选择
  949. SYSCLK_CLKSEL2_FRQDIV_S = 2,//时钟分频器时钟源选择
  950. SYSCLK_CLKSEL2_PWM45_S = 4,//PWM4与PWM5的时钟源选择
  951. SYSCLK_CLKSEL2_PWM67_S = 6 //PWM6与PWM7的时钟源选择
  952. }NU_SYSCLK_CLKSEL2_ENUM;

  953. typedef volatile union
  954. {
  955. NU_REG Regs;
  956. SYSCLK_CLKSEL2_T Bits;
  957. }NU_SYSCLK_CLKSEL2_T;

  958. typedef enum
  959. {
  960. SYSCLK_PLLCON_FB_DV = 0,//PLL反馈分频控制引脚
  961. SYSCLK_PLLCON_IN_DV = 9,//PLL输入分频控制引脚
  962. SYSCLK_PLLCON_OUT_DV = 14,//PLL输出分频控制引脚
  963. SYSCLK_PLLCON_PD = 16,//掉电模式
  964. SYSCLK_PLLCON_BP = 17,//PLL旁路控制
  965. SYSCLK_PLLCON_OE = 18,//PLL OE(FOUT enable)引脚控制
  966. SYSCLK_PLLCON_PLL_SRC = 19 //PLL时钟源选择
  967. }NU_SYSCLK_PLLCON_ENUM;

  968. typedef volatile union
  969. {
  970. NU_REG Regs;
  971. SYSCLK_PLLCON_T Bits;
  972. }NU_SYSCLK_PLLCON_T;


  973. typedef enum
  974. {
  975. SYSCLK_FRQDIV_FSEL = 0,//分频器输出频率选择位
  976. SYSCLK_FRQDIV_FDIV_EN = 4 //频率分频器使能位
  977. }NU_SYSCLK_FRQDIV_ENUM;

  978. typedef volatile union
  979. {
  980. NU_REG Regs;
  981. SYSCLK_FRQDIV_T Bits;
  982. }NU_SYSCLK_FRQDIV_T;

  983. typedef struct
  984. {
  985. __IO NU_SYSCLK_PWRCON_T PWRCON;//系统掉电控制寄存器
  986. __IO NU_SYSCLK_AHBCLK_T AHBCLK;//AHB设备时钟使能控制寄存器
  987. __IO NU_SYSCLK_APBCLK_T APBCLK;//APB设备时钟使能控制寄存器
  988. __IO NU_SYSCLK_CLKSTATUS_T CLKSTATUS;
  989. __IO NU_SYSCLK_CLKSEL0_T CLKSEL0;//时钟源选择控制寄存器0
  990. __IO NU_SYSCLK_CLKSEL1_T CLKSEL1;//时钟源选择控制寄存器1
  991. __IO NU_SYSCLK_CLKDIV_T CLKDIV;//时钟分频寄存器
  992. __IO NU_SYSCLK_CLKSEL2_T CLKSEL2;//时钟源选择控制寄存器2
  993. __IO NU_SYSCLK_PLLCON_T PLLCON;//PLL 控制寄存器
  994. __IO NU_SYSCLK_FRQDIV_T FRQDIV;//频率分频器控制寄存器
  995. }NU_SYSCLK_T;
  996. //----------------------------------------------------//
  997. #define SYSCLKs (*((NU_SYSCLK_T *) SYSCLK_BASE))//定位全局结构变量SYSCLKs
  998. //----------------------------------------------------//
  999. #define SYSCLKx ((NU_SYSCLK_T *) SYSCLK_BASE)
  1000. //----------------------------------------------------//
  1001. typedef enum
  1002. {
  1003. GCR_RSTSRC_RSTS_POR = 0,//RSTS_POR标志位由POR模块的”复位信号”置1
  1004. GCR_RSTSRC_RSTS_RESET = 1,//RSTS_PAD标志位由/RESET脚的”复位信号”置1
  1005. GCR_RSTSRC_RSTS_WDT = 2,//RSTS_WDG标志位由看门狗模块的”复位信号”置1
  1006. GCR_RSTSRC_RSTS_LVR = 3,//RSTS_LVR标志位由低压复位模块的”复位信号”置1
  1007. GCR_RSTSRC_RSTS_BOD = 4,//RSTS_BOD标志位由欠压检测模块的”复位信号”置1
  1008. GCR_RSTSRC_RSTS_MCU = 5,//RSTS_SYS由来自MCU Cortex_M0的“复位信号“置位
  1009. GCR_RSTSRC_RSTS_CPU = 7 //RSTS_CPU标志由硬件置位
  1010. }NU_GCR_RSTSRC_ENUM;

  1011. typedef volatile union
  1012. {
  1013. NU_REG Regs;
  1014. GCR_RSTSRC_T Bits;
  1015. }NU_GCR_RSTSRC_T;

  1016. typedef enum
  1017. {
  1018. GCR_IPRSTC1_CHIP_RST = 0,//CHIP复位
  1019. GCR_IPRSTC1_CPU_RST = 1,//CPU内核复位
  1020. GCR_IPRSTC1_PDMA_RST = 2,//PDMA控制器复位
  1021. GCR_IPRSTC1_EBI_RST = 3 //EBI接口复位
  1022. }NU_GCR_IPRSTC1_ENUM;

  1023. typedef volatile union
  1024. {
  1025. NU_REG Regs;
  1026. GCR_IPRSTC1_T Bits;
  1027. }NU_GCR_IPRSTC1_T;

  1028. typedef enum
  1029. {
  1030. GCR_IPRSTC2_GPIO_RST = 1,//GPIO控制器复位
  1031. GCR_IPRSTC2_TMR0_RST = 2,//Timer0控制器复位
  1032. GCR_IPRSTC2_TMR1_RST = 3,//Timer1控制器复位
  1033. GCR_IPRSTC2_TMR2_RST = 4,//Timer2控制器复位
  1034. GCR_IPRSTC2_TMR3_RST = 5,//Timer3控制器复位
  1035. GCR_IPRSTC2_I2C0_RST = 8,//I2C0控制器复位
  1036. GCR_IPRSTC2_I2C1_RST = 9,//I2C1控制器复位
  1037. GCR_IPRSTC2_SPI0_RST = 12,//SPI0控制器复位
  1038. GCR_IPRSTC2_SPI1_RST = 13,//SPI1控制器复位
  1039. GCR_IPRSTC2_SPI2_RST = 14,//SPI2控制器复位
  1040. GCR_IPRSTC2_SPI3_RST = 15,//SPI3控制器复位
  1041. GCR_IPRSTC2_UART0_RST = 16,//UART0控制器复位
  1042. GCR_IPRSTC2_UART1_RST = 17,//UART1控制器复位
  1043. GCR_IPRSTC2_UART2_RST = 18,//UART2控制器复位
  1044. GCR_IPRSTC2_PWM03_RST = 20,//PWM03控制器复位
  1045. GCR_IPRSTC2_PWM47_RST = 21,//PWM47控制器复位
  1046. GCR_IPRSTC2_ACMP_RST = 22,//模拟比较器控制器复位
  1047. GCR_IPRSTC2_PS2_RST = 23,//PS2控制器复位
  1048. GCR_IPRSTC2_CAN0_RST = 24,//CAN0控制器复位
  1049. GCR_IPRSTC2_USBD_RST = 27,//USB设备控制器复位
  1050. GCR_IPRSTC2_ADC_RST = 28,//ADC控制器复位
  1051. GCR_IPRSTC2_I2S_RST = 29,//I2S控制器复位
  1052. }NU_GCR_IPRSTC2_ENUM;

  1053. typedef volatile union
  1054. {
  1055. NU_REG Regs;
  1056. GCR_IPRSTC2_T Bits;
  1057. }NU_GCR_IPRSTC2_T;

  1058. typedef enum
  1059. {
  1060. GCR_CPR_HPE = 0 //CHIP复位
  1061. }NU_GCR_CPR_ENUM;


  1062. typedef volatile union
  1063. {
  1064. NU_REG Regs;
  1065. GCR_CPR_T Bits;
  1066. }NU_GCR_CPR_T;

  1067. typedef enum
  1068. {
  1069. GCR_BODCR_BOD_EN = 0,//欠压检测使能
  1070. GCR_BODCR_BOD_VL = 1,//欠压检测Threshold电压选择
  1071. GCR_BODCR_BOD_RSTEN = 3,//欠压复位使能
  1072. GCR_BODCR_BOD_INTF = 4,//欠压检测中断标志
  1073. GCR_BODCR_BOD_LPM = 5,//低压模式下的欠压检测
  1074. GCR_BODCR_BOD_OUT = 6,//欠压检测输出的状态位
  1075. GCR_BODCR_LVR_EN = 7//低压复位使能
  1076. }NU_GCR_BODCR_ENUM;

  1077. typedef volatile union
  1078. {
  1079. NU_REG Regs;
  1080. GCR_BODCR_T Bits;
  1081. }NU_GCR_BODCR_T;

  1082. typedef enum
  1083. {
  1084. GCR_TEMPCR_VTEMP_EN = 0,//温度传感器使能
  1085. }NU_GCR_TEMPCR_ENUM;

  1086. typedef struct
  1087. {
  1088. __IO uint32_t VTEMP_EN:1;//温度传感器使能
  1089. __I uint32_t RESERVE1:31;
  1090. }GCR_TEMPCR_Bits;

  1091. typedef volatile union
  1092. {
  1093. NU_REG Regs;
  1094. GCR_TEMPCR_Bits Bits;
  1095. }NU_GCR_TEMPCR_T;


  1096. typedef enum
  1097. {
  1098. GCR_GPAMFP_ADC0 = 0, //PA.0 Pin功能选择ADC0
  1099. GCR_GPAMFP_ADC1_AD12 = 1, //PA.1 Pin功能选择ADC1
  1100. GCR_GPAMFP_ADC2_AD11 = 2, //PA.2 Pin功能选择ADC2
  1101. GCR_GPAMFP_ADC3_AD10 = 3, //PA.3 Pin功能选择ADC3
  1102. GCR_GPAMFP_ADC4_AD9 = 4, //PA.4 Pin功能选择ADC4
  1103. GCR_GPAMFP_ADC5_AD8 = 5, //PA.5 Pin功能选择ADC5
  1104. GCR_GPAMFP_ADC6_AD7 = 6, //PA.6 Pin功能选择ADC6
  1105. GCR_GPAMFP_ADC7_SS21_AD6 = 7,//PA.7 Pin功能选择ADC7
  1106. GCR_GPAMFP_I2C0_SDA = 8, //PA.8 Pin功能选择I2C0_SDA
  1107. GCR_GPAMFP_I2C0_SCL = 9, //PA.9 Pin功能选择I2C0_SCL
  1108. GCR_GPAMFP_I2C1_SDA_nWR = 10,//PA.10 Pin功能选择I2C1_SDA
  1109. GCR_GPAMFP_I2C1_SCL_nRD = 11,//PA.11 Pin功能选择I2C1_SCL
  1110. GCR_GPAMFP_PWM0_AD13 = 12, //PA.12 Pin功能选择PWM0
  1111. GCR_GPAMFP_PWM1_AD14 = 13, //PA.13 Pin功能选择PWM1
  1112. GCR_GPAMFP_PWM2_AD15 = 14, //PA.14 Pin功能选择PWM2
  1113. GCR_GPAMFP_PWM3_I2SMCLK = 15,//PA.15 Pin功能选择PWM3
  1114. GCR_GPAMFP_SCHMITT = 16, //PA[15:0]I/O史密特触发输入使能
  1115. }NU_GCR_GPAMFP_ENUM;

  1116. typedef volatile union
  1117. {
  1118. NU_REG Regs;
  1119. GCR_GPAMFP_T Bits;
  1120. }NU_GCR_GPAMFP_T;

  1121. typedef enum
  1122. {
  1123. GCR_GPBMFP_UART0_RX = 0,//PB.0 Pin功能选择
  1124. GCR_GPBMFP_UART0_TX = 1,//PB.1 Pin功能选择
  1125. GCR_GPBMFP_UART0_nRTS_nWRL = 2,//PB.2 Pin功能选择
  1126. GCR_GPBMFP_UART0_nCTS_nWRH = 3,//PB.3 Pin功能选择
  1127. GCR_GPBMFP_UART1_RX = 4,//PB.4 Pin功能选择
  1128. GCR_GPBMFP_UART1_TX = 5,//PB.5 Pin功能选择
  1129. GCR_GPBMFP_UART1_nRTS_ALE = 6,//PB.6 Pin功能选择
  1130. GCR_GPBMFP_UART1_nCTS_nCS = 7,//PB.7 Pin功能选择
  1131. GCR_GPBMFP_TM0 = 8,//PB.8 Pin功能选择
  1132. GCR_GPBMFP_TM1_SS11 = 9,//PB.9 Pin功能选择
  1133. GCR_GPBMFP_TM2_SS01 = 10,//PB.10 Pin功能选择
  1134. GCR_GPBMFP_TM3_PWM4 = 11,//PB.11 Pin功能选择
  1135. GCR_GPBMFP_CPO0_CLKO_AD0 = 12,//PB.12 Pin功能选择
  1136. GCR_GPBMFP_CPO1_AD1 = 13,//PB.13 Pin功能选择
  1137. GCR_GPBMFP_INT1_SS31 = 14,//PB.14 Pin功能选择
  1138. GCR_GPBMFP_INT0 = 15,//PB.15 Pin功能选择
  1139. GCR_GPBMFP_SCHMITT = 16//PB[15:0]I/O史密特触发输入使能
  1140. }NU_GCR_GPBMFP_ENUM;

  1141. typedef volatile union
  1142. {
  1143. NU_REG Regs;
  1144. GCR_GPBMFP_T Bits;
  1145. }NU_GCR_GPBMFP_T;


  1146. typedef enum
  1147. {
  1148. GCR_GPCMFP_SPI0_SS0_I2SLRCLK = 0,//PC.0 Pin功能选择
  1149. GCR_GPCMFP_SPI0_CLK_I2SBCLK = 1,//PC.0 Pin功能选择
  1150. GCR_GPCMFP_SPI0_MISO0_I2SDI = 2,//PC.0 Pin功能选择
  1151. GCR_GPCMFP_SPI0_MOSI0_I2SDO = 3,//PC.0 Pin功能选择
  1152. GCR_GPCMFP_SPI0_MISO1 = 4,//PC.0 Pin功能选择
  1153. GCR_GPCMFP_SPI0_MOSI1 = 5,//PC.0 Pin功能选择
  1154. GCR_GPCMFP_CPP0_AD4 = 6,//PC.0 Pin功能选择
  1155. GCR_GPCMFP_CPN0_AD5 = 7,//PC.0 Pin功能选择
  1156. GCR_GPCMFP_SPI1_SS0_MCLK = 8,//PC.0 Pin功能选择
  1157. GCR_GPCMFP_SPI1_CLK = 9,//PC.0 Pin功能选择
  1158. GCR_GPCMFP_SPI1_MISO0 = 10,//PC.0 Pin功能选择
  1159. GCR_GPCMFP_SPI1_MOSI0 = 11,//PC.0 Pin功能选择
  1160. GCR_GPCMFP_SPI1_MISO1 = 12,//PC.0 Pin功能选择
  1161. GCR_GPCMFP_SPI1_MOSI1 = 13,//PC.0 Pin功能选择
  1162. GCR_GPCMFP_CPP1_AD2 = 14,//PC.0 Pin功能选择
  1163. GCR_GPCMFP_CPN1_AD3 = 15,//PC.0 Pin功能选择
  1164. GCR_GPCMFP_SCHMITT = 16,//PC[15:0]I/O史密特触发输入使能
  1165. }NU_GCR_GPCMFP_ENUM;

  1166. typedef volatile union
  1167. {
  1168. NU_REG Regs;
  1169. GCR_GPCMFP_T Bits;
  1170. }NU_GCR_GPCMFP_T;


  1171. typedef enum
  1172. {
  1173. GCR_GPDMFP_SPI2_SS0 = 0,//PD.0 Pin功能选择
  1174. GCR_GPDMFP_SPI2_CLK_SPI0_SS1 = 1,//PD.1 Pin功能选择
  1175. GCR_GPDMFP_SPI2_MISO0_SPI0_MISO1 = 2,//PD.2 Pin功能选择
  1176. GCR_GPDMFP_SPI2_MOSI0_SPI0_MOSI1 = 3,//PD.3 Pin功能选择
  1177. GCR_GPDMFP_SPI2_MISO1 = 4,//PD.4 Pin功能选择
  1178. GCR_GPDMFP_SPI2_MOSI1 = 5,//PD.5 Pin功能选择
  1179. GCR_GPDMFP_CAN0_RX = 6,//PD.6 Pin功能选择
  1180. GCR_GPDMFP_CAN0_TX = 7,//PD.7 Pin功能选择
  1181. GCR_GPDMFP_SPI3_SS0 = 8,//PD.8 Pin功能选择
  1182. GCR_GPDMFP_SPI3_CLK = 9,//PD.9 Pin功能选择
  1183. GCR_GPDMFP_SPI3_MISO0 = 10,//PD.10 Pin功能选择
  1184. GCR_GPDMFP_SPI3_MOSI0 = 11,//PD.11 Pin功能选择
  1185. GCR_GPDMFP_SPI3_MISO1 = 12,//PD.12 Pin功能选择
  1186. GCR_GPDMFP_SPI3_MOSI1 = 13,//PD.13 Pin功能选择
  1187. GCR_GPDMFP_UART2_RX = 14,//PD.14 Pin功能选择
  1188. GCR_GPDMFP_UART2_TX = 15,//PD.15 Pin功能选择
  1189. GCR_GPDMFP_SCHMITT = 16,//PD[15:0]I/O史密特触发输入使能
  1190. }NU_GCR_GPDMFP_ENUM;

  1191. typedef volatile union
  1192. {
  1193. NU_REG Regs;
  1194. GCR_GPDMFP_T Bits;
  1195. }NU_GCR_GPDMFP_T;

  1196. typedef enum
  1197. {
  1198. GCR_GPEMFP_PWM6 = 0,//PE.0 Pin功能选择
  1199. GCR_GPEMFP_PWM7 = 1,//PE.1 Pin功能选择
  1200. GCR_GPEMFP_PWM5 = 5,//PE.6 Pin功能选择
  1201. GCR_GPEMFP_SCHMITT = 16 //PE[15:0]I/O史密特触发输入使能
  1202. }NU_GCR_GPEMFP_ENUM;

  1203. typedef volatile union
  1204. {
  1205. NU_REG Regs;
  1206. GCR_GPEMFP_T Bits;
  1207. }NU_GCR_GPEMFP_T;

  1208. typedef enum
  1209. {
  1210. GCR_ALTMFP_PB10_S01 = 0,//PB10_S01与GPB_MFP[10]决定GPB.10的功能
  1211. GCR_ALTMFP_PB9_S11 = 1,//PB9_S11与GPB_MFP[9]决定PB.9的功能
  1212. GCR_ALTMFP_PA7_S21 = 2,//PA7_S21与GPA_MFP[7]决定PA.7的功能
  1213. GCR_ALTMFP_PB14_S31 = 3,//PB14_S31与GPB_MFP[14]决定PB.14的功能
  1214. GCR_ALTMFP_PB11_PWM4 = 4,//PB11_PWM4与GPB_MFP[11]决定PB.11的功能
  1215. GCR_ALTMFP_PC0_I2SLRCLK = 5,//PC0_I2SLRCLK与GPC_MFP[0]决定PC.0的功能
  1216. GCR_ALTMFP_PC1_I2SBCLK = 6,//PC1_I2SBCLK与GPC_MFP[1 决定PC.1的功能
  1217. GCR_ALTMFP_PC2_I2SDI = 7,//PC2_I2SDI与GPC_MFP[2]决定PC.2的功能
  1218. GCR_ALTMFP_PC3_I2SDO = 8,//PC2_I2SDO与GPC_MFP[3]决定PC.3的功能
  1219. GCR_ALTMFP_PA15_I2SMCLK = 9,//PA15_I2SMCLK与GPA_MFP[15]决定PA.15的功能
  1220. GCR_ALTMFP_PB12_CLKO = 10,//PB12_CLKO与GPB_MFP[12]决定PB.12的功能
  1221. GCR_ALTMFP_EBI_EN = 11,
  1222. GCR_ALTMFP_EBI_MCLK_EN = 12, /* GPC8 */
  1223. GCR_ALTMFP_EBI_WRL_EN =13, /* GPB2 */
  1224. GCR_ALTMFP_EBI_WRH_EN = 14, /* GPB3 */
  1225. GCR_ALTMFP_EBI_HB_EN = 15
  1226. }NU_GCR_ALTMFP_ENUM;

  1227. typedef volatile union
  1228. {
  1229. NU_REG Regs;
  1230. GCR_ALTMFP_T Bits;
  1231. }NU_GCR_ALTMFP_T;

  1232. typedef struct
  1233. {
  1234. __IO NU_REG_BITs PDID;
  1235. __IO NU_GCR_RSTSRC_T RSTSRC;//系统管理器控制寄存器
  1236. __IO NU_GCR_IPRSTC1_T IPRSTC1;//IP复位控制寄存器1
  1237. __IO NU_GCR_IPRSTC2_T IPRSTC2;//IP复位控制寄存器2
  1238. __IO NU_GCR_CPR_T CPR;
  1239. __I NU_REG RESERVE0;
  1240. __IO NU_GCR_BODCR_T BODCR;//欠压检测控制寄存器
  1241. __IO NU_GCR_TEMPCR_T TEMPCR;//温度传感器控制寄存器
  1242. __I NU_REG RESERVE1;
  1243. __IO NU_REG_BITs PORCR;//上电复位控制寄存器
  1244. __I NU_REG RESERVE2[2];
  1245. __IO NU_GCR_GPAMFP_T GPAMFP;//多功能GPIOA控制寄存器
  1246. __IO NU_GCR_GPBMFP_T GPBMFP;//多功能GPIOB控制寄存器
  1247. __IO NU_GCR_GPCMFP_T GPCMFP;//多功能GPIOC控制寄存器
  1248. __IO NU_GCR_GPDMFP_T GPDMFP;//多功能GPIOD控制寄存器
  1249. __IO NU_GCR_GPEMFP_T GPEMFP;//多功能GPIOE控制寄存器
  1250. __I NU_REG RESERVE3[3];
  1251. __IO NU_GCR_ALTMFP_T ALTMFP;//可选多功能引脚控制寄存器
  1252. __I NU_REG RESERVE4[43];
  1253. __IO NU_REG_BITs REGLOCK;//寄存器锁定键地址寄存器
  1254. __I NU_REG RESERVE5[3];
  1255. __IO NU_REG_BITs RCADJ;//RC 校验控制寄存器
  1256. }NU_GCR_T;
  1257. //----------------------------------------------------//
  1258. #define SYSs (*((NU_GCR_T *) GCR_BASE))//定位全局结构变量SYSs
  1259. //----------------------------------------------------//
  1260. #define SYSx ((NU_GCR_T *) GCR_BASE)
  1261. //----------------------------------------------------//
  1262. typedef enum
  1263. {
  1264. GCR_INTSRC_INTSRC = 0//
  1265. }NU_GCR_INTSRC_ENUM;

  1266. typedef volatile union
  1267. {
  1268. NU_REG Regs;
  1269. GCR_INTSRC_T Bits;
  1270. }NU_GCR_INTSRC_T;

  1271. typedef enum
  1272. {
  1273. GCR_NMISEL_NMISEL = 0,//Cortex-M0的NMI 中断源可以从interrupt[31:0]中选择一个
  1274. GCR_NMISEL_INT_TEST = 7//
  1275. }NU_GCR_NMISEL_ENUM;

  1276. typedef volatile union
  1277. {
  1278. NU_REG Regs;
  1279. GCR_NMISEL_T Bits;
  1280. }NU_GCR_NMISEL_T;

  1281. typedef struct
  1282. {
  1283. __I NU_GCR_INTSRC_T INTSRC[32];//MCU IRQ0~31 (BOD) 中断源识别
  1284. __IO NU_GCR_NMISEL_T NMISEL;//NMI 中断源选择控制寄存器
  1285. __IO NU_REG_BITs MCUIRQ;//MCU IRQ 号识别寄存器
  1286. }NU_GCR_INT_T;

  1287. //----------------------------------------------------//
  1288. #define SYSINTs (*((NU_GCR_INT_T *) INT_BASE))//定位全局结构变量GCR_INTs
  1289. //----------------------------------------------------//
  1290. #define SYSINTx ((NU_GCR_INT_T *) INT_BASE)
  1291. //----------------------------------------------------//
  1292. typedef enum
  1293. {
  1294. WDT_WTCR_WTR = 0,//看门狗定时器重置
  1295. WDT_WTCR_WTRE = 1,//看门狗定时器复位使能
  1296. WDT_WTCR_WTRF = 2,//看门狗定时器复位标志
  1297. WDT_WTCR_WTIF = 3,//看门狗定时器中断标志
  1298. WDT_WTCR_WTWKE = 4,//看门狗定时器唤醒功能使能位
  1299. WDT_WTCR_WTWKF = 5,//看门狗定时器唤醒标志
  1300. WDT_WTCR_WTIE = 6,//看门狗定时器中断使能
  1301. WDT_WTCR_WTE = 7,//看门狗定时器使能
  1302. WDT_WTCR_WTIS = 8,//看门狗定时器间隔选择
  1303. //000:69.33us 001:72.53us 010:85.33us 011:170.67us
  1304. //100:426.67us 101:1.45ms 110:5.55ms 111:21.93ms
  1305. }NU_WDT_WTCR_ENUM;

  1306. typedef volatile union
  1307. {
  1308. NU_REG Regs;
  1309. WDT_WTCR_T Bits;
  1310. }NU_WDT_WTCR_T;

  1311. typedef struct
  1312. {
  1313. __IO NU_WDT_WTCR_T WTCR;//看门狗定时器控制寄存器
  1314. }NU_WDT_T;
  1315. //----------------------------------------------------//
  1316. #define WDTs (*((NU_WDT_T *) WDT_BASE))//定位全局结构变量WDTs
  1317. //----------------------------------------------------//
  1318. #define WDTx ((NU_WDT_T *) WDT_BASE)
  1319. //----------------------------------------------------//
  1320. typedef enum
  1321. {
  1322. RTC_AER_AER = 0,//RTC寄存器写入使能密码(只写)
  1323. RTC_AER_ENF = 16//RTC 寄存器写入使能标志(只读)
  1324. }NU_RTC_AER_ENUM;

  1325. typedef volatile union
  1326. {
  1327. NU_REG Regs;
  1328. RTC_AER_T Bits;
  1329. }NU_RTC_AER_T;

  1330. typedef enum
  1331. {
  1332. RTC_FCR_INTEGER_32761 = 0,
  1333. RTC_FCR_INTEGER_32762 = 1,
  1334. RTC_FCR_INTEGER_32763 = 2,
  1335. RTC_FCR_INTEGER_32764 = 3,
  1336. RTC_FCR_INTEGER_32765 = 4,
  1337. RTC_FCR_INTEGER_32766 = 5,
  1338. RTC_FCR_INTEGER_32767 = 6,
  1339. RTC_FCR_INTEGER_32768 = 7,
  1340. RTC_FCR_INTEGER_32769 = 8,
  1341. RTC_FCR_INTEGER_32770 = 9,
  1342. RTC_FCR_INTEGER_32771 = 10,
  1343. RTC_FCR_INTEGER_32772 = 11,
  1344. RTC_FCR_INTEGER_32773 = 12,
  1345. RTC_FCR_INTEGER_32774 = 13,
  1346. RTC_FCR_INTEGER_32775 = 14,
  1347. RTC_FCR_INTEGER_32776 = 15
  1348. }NU_RTC_FCR_INTEGER_ENUM;

  1349. typedef enum
  1350. {
  1351. RTC_FCR_FRACTION = 0,//分数部分(公式=(分数部分值)x60)
  1352. RTC_FCR_INTEGER = 8 //整数部分
  1353. }NU_RTC_FCR_ENUM;

  1354. typedef volatile union
  1355. {
  1356. NU_REG Regs;
  1357. RTC_FCR_T Bits;
  1358. }NU_RTC_FCR_T;

  1359. typedef enum
  1360. {
  1361. RTC_TLR_SEC1 = 0,//秒个位
  1362. RTC_TLR_SEC10 = 4,//秒十位
  1363. RTC_TLR_MIN1 = 8,//分个位
  1364. RTC_TLR_MIN10 = 12,//分十位
  1365. RTC_TLR_HR1 = 16,//小时个位
  1366. RTC_TLR_HR10 = 20//小时十位
  1367. }NU_RTC_TLR_ENUM;

  1368. typedef volatile union
  1369. {
  1370. NU_REG Regs;
  1371. RTC_TLR_T Bits;
  1372. }NU_RTC_TLR_T;

  1373. typedef enum
  1374. {
  1375. RTC_CLR_DAY1 = 0,//日位
  1376. RTC_CLR_DAY10 = 4,//日十位
  1377. RTC_CLR_MON1 = 8,//月个位
  1378. RTC_CLR_MON10 = 12,//月十位
  1379. RTC_CLR_YEAR1 = 16,//年个位
  1380. RTC_CLR_YEAR10 = 20//年十位
  1381. }NU_RTC_CLR_ENUM;

  1382. typedef volatile union
  1383. {
  1384. NU_REG Regs;
  1385. RTC_CLR_T Bits;
  1386. }NU_RTC_CLR_T;

  1387. typedef enum
  1388. {
  1389. RTC_TSSR_HR24 = 0//(1)24-小时/(0)12-小时模式选择(带AM /PM 指示)
  1390. }NU_RTC_TSSR_ENUM;

  1391. typedef volatile union
  1392. {
  1393. NU_REG Regs;
  1394. RTC_TSSR_T Bits;
  1395. }NU_RTC_TSSR_T;

  1396. typedef enum
  1397. {
  1398. RTC_DWR_DWR = 0//一周日期寄存器(0:星期天 1:星期一 6:星期六)
  1399. }NU_RTC_DWR_ENUM;

  1400. typedef volatile union
  1401. {
  1402. NU_REG Regs;
  1403. RTC_DWR_T Bits;
  1404. }NU_RTC_DWR_T;

  1405. typedef enum
  1406. {
  1407. RTC_TAR_SEC1 = 0,//秒个位
  1408. RTC_TAR_SEC10 = 4,//秒十位
  1409. RTC_TAR_MIN1 = 8,//分个位
  1410. RTC_TAR_MIN10 = 12,//分十位
  1411. RTC_TAR_HR1 = 16,//小时个位
  1412. RTC_TAR_HR10 = 20//小时十位
  1413. }NU_RTC_TAR_ENUM;

  1414. typedef volatile union
  1415. {
  1416. NU_REG Regs;
  1417. RTC_TLR_T Bits;
  1418. }NU_RTC_TAR_T;

  1419. typedef enum
  1420. {
  1421. RTC_CAR_DAY1 = 0,//日位
  1422. RTC_CAR_DAY10 = 4,//日十位
  1423. RTC_CAR_MON1 = 8,//月个位
  1424. RTC_CAR_MON10 = 12,//月十位
  1425. RTC_CAR_YEAR1 = 16,//年个位
  1426. RTC_CAR_YEAR10 = 20//年十位
  1427. }NU_RTC_CAR_ENUM;

  1428. typedef volatile union
  1429. {
  1430. NU_REG Regs;
  1431. RTC_CLR_T Bits;
  1432. }NU_RTC_CAR_T;

  1433. typedef enum
  1434. {
  1435. RTC_LIR_LIR = 0//按年分割指示寄存器(只读)
  1436. }NU_RTC_LIR_ENUM;

  1437. typedef volatile union
  1438. {
  1439. NU_REG Regs;
  1440. RTC_LIR_T Bits;
  1441. }NU_RTC_LIR_T;

  1442. typedef enum
  1443. {
  1444. RTC_RIER_AIER = 0,//闹钟中断使能
  1445. RTC_RIER_TIER = 1 //时钟节拍中断使能
  1446. }NU_RTC_RIER_ENUM;

  1447. typedef volatile union
  1448. {
  1449. NU_REG Regs;
  1450. RTC_RIER_T Bits;
  1451. }NU_RTC_RIER_T;

  1452. typedef enum
  1453. {
  1454. RTC_RIIR_AI = 0,//RTC闹钟中断标志
  1455. RTC_RIIR_TI = 1 //RTC时钟节拍中断标志
  1456. }NU_RTC_RIIR_ENUM;

  1457. typedef volatile union
  1458. {
  1459. NU_REG Regs;
  1460. RTC_RIIR_T Bits;
  1461. }NU_RTC_RIIR_T;

  1462. typedef enum
  1463. {
  1464. RTC_TTR_TWKE_1 = 0,//时钟节拍1
  1465. RTC_TTR_TWKE_1_2 = 1,//时钟节拍1/2
  1466. RTC_TTR_TWKE_1_4 = 2,//时钟节拍1/4
  1467. RTC_TTR_TWKE_1_8 = 3,//时钟节拍1/8
  1468. RTC_TTR_TWKE_1_16 = 4,//时钟节拍1/16
  1469. RTC_TTR_TWKE_1_32 = 5,//时钟节拍1/32
  1470. RTC_TTR_TWKE_1_64 = 6,//时钟节拍1/64
  1471. RTC_TTR_TWKE_1_128 = 7,//时钟节拍1/128
  1472. }NU_RTC_TTR_TWKE_ENUM;

  1473. typedef enum
  1474. {
  1475. RTC_TTR_TTR = 0,//时钟节拍寄存器
  1476. RTC_TTR_TWKE = 3 //RTC定时器唤醒CPU使能位
  1477. }NU_RTC_TTR_ENUM;

  1478. typedef volatile union
  1479. {
  1480. NU_REG Regs;
  1481. RTC_TTR_T Bits;
  1482. }NU_RTC_TTR_T;

  1483. typedef enum
  1484. {
  1485. RTC_PWRCON_PTOUT = 0,//
  1486. RTC_PWRCON_PWROFF = 16//
  1487. }NU_RTC_PWRCON_ENUM;

  1488. typedef volatile union
  1489. {
  1490. NU_REG Regs;
  1491. RTC_PWRCON_T Bits;
  1492. }NU_RTC_PWRCON_T;

  1493. typedef struct
  1494. {
  1495. __IO NU_REG_BITs INIR;//RTC复位寄存器
  1496. __IO NU_RTC_AER_T AER;//RTC读写使能寄存器
  1497. __IO NU_RTC_FCR_T FCR;//RTC频率补偿寄存器
  1498. __IO NU_RTC_TLR_T TLR;//时间载入寄存器
  1499. __IO NU_RTC_CLR_T CLR;//日历载入寄存器
  1500. __IO NU_RTC_TSSR_T TSSR;//时间格式选择寄存器
  1501. __IO NU_RTC_DWR_T DWR;//一周日期寄存器
  1502. __IO NU_RTC_TAR_T TAR;//时间闹钟寄存器
  1503. __IO NU_RTC_CAR_T CAR;//日历闹钟寄存器
  1504. __IO NU_RTC_LIR_T LIR;//年分割指示寄存器
  1505. __IO NU_RTC_RIER_T RIER;//RTC中断使能寄存器
  1506. __IO NU_RTC_RIIR_T RIIR;//RTC中断指示寄存器
  1507. __IO NU_RTC_TTR_T TTR;//RTC时钟节拍寄存器
  1508. __IO NU_RTC_PWRCON_T PWRCON;
  1509. }NU_RTC_T;
  1510. //----------------------------------------------------//
  1511. #define RTCs (*((NU_RTC_T *) RTC_BASE))//定位全局结构变量RTCs
  1512. //----------------------------------------------------//
  1513. #define RTCx ((NU_RTC_T *) RTC_BASE)
  1514. //----------------------------------------------------//
  1515. typedef enum
  1516. {
  1517. FMC_ISPCON_ISPEN = 0,//
  1518. FMC_ISPCON_BS = 0,//
  1519. FMC_ISPCON_CFGUEN = 0,//
  1520. FMC_ISPCON_LDUEN = 0,//
  1521. FMC_ISPCON_ISPFF = 0,//
  1522. FMC_ISPCON_SWRST = 0,//
  1523. FMC_ISPCON_PT = 0,//
  1524. FMC_ISPCON_ET = 0 //
  1525. }NU_FMC_ISPCON_ENUM;

  1526. typedef volatile union
  1527. {
  1528. NU_REG Regs;
  1529. FMC_ISPCON_T Bits;
  1530. }NU_FMC_ISPCON_T;

  1531. typedef struct
  1532. {
  1533. FMC_ISPCON_T ISPCON;
  1534. FMC_ISPADR_T ISPADR;
  1535. FMC_ISPDAT_T ISPDAT;
  1536. FMC_ISPCMD_T ISPCMD;
  1537. FMC_ISPTRG_T ISPTRG;
  1538. FMC_DFBADR_T DFBADR;
  1539. FMC_FATCON_T FATCON;
  1540. }NU_FMC_T;
  1541. //----------------------------------------------------//
  1542. #define FMCs (*((NU_FMC_T *) FMC_BASE))//定位全局结构变量FMCs
  1543. //----------------------------------------------------//
  1544. #define FMCx ((NU_FMC_T *) FMC_BASE)
  1545. //----------------------------------------------------//
  1546. typedef struct
  1547. {
  1548. PS2_CON_T PS2CON;
  1549. union{
  1550. PS2_DATA_T TXDATA[4];
  1551. struct{
  1552. PS2_DATA_T TXDATA0;
  1553. PS2_DATA_T TXDATA1;
  1554. PS2_DATA_T TXDATA2;
  1555. PS2_DATA_T TXDATA3;
  1556. };
  1557. };
  1558. PS2_DATA_T RXDATA;
  1559. PS2_STATUS_T STATUS;
  1560. PS2_INTID_T INTID;
  1561. }NU_PS2_T;

  1562. //----------------------------------------------------//
  1563. #define PS2s (*((NU_PS2_T *) PS2_BASE))//定位全局结构变量PS2s
  1564. //----------------------------------------------------//
  1565. #define PS2x ((NU_PS2_T *) PS2_BASE)
  1566. //----------------------------------------------------//
  1567. typedef struct
  1568. {
  1569. CAN_OPMODE_T OPMODE;
  1570. CAN_CMD_T CMD;
  1571. CAN_BUSSTS_T BUSSTS;
  1572. CAN_INTR_T INTR;

  1573. CAN_INTEN_T INTEN;
  1574. CAN_BTIMR_T BTIMR;
  1575. union{
  1576. CAN_RESERVE_T PROTECT[2];
  1577. struct{
  1578. CAN_RESERVE_T PROTECT_0;
  1579. CAN_RESERVE_T PROTECT_1;
  1580. };
  1581. };

  1582. CAN_ERRCR_T ERRCR;
  1583. CAN_RESERVE_T PROTECT1;
  1584. CAN_RECNTR_T RECNTR;
  1585. CAN_TECNTR_T
  1586. TECNTR;

  1587. CAN_TXFINFO_T TXFINFO;
  1588. CAN_TXIDR_T TXIDR;
  1589. union{
  1590. CAN_TXDATA_T TXDATA[2];
  1591. struct{
  1592. CAN_TXDATA_T TXDATA0;
  1593. CAN_TXDATA_T TXDATA1;
  1594. };
  1595. };

  1596. CAN_RXFINFO_T RXFINFO;
  1597. CAN_RXIDR_T RXIDR;
  1598. CAN_RXDATA_T RX_DATA[2];
  1599. CAN_ACR_T ACR;
  1600. CAN_AMR_T AMR;
  1601. }NU_CAN_T;

  1602. //----------------------------------------------------//
  1603. #define CANs (*((NU_CAN_T *) CAN_BASE))//定位全局结构变量CANs
  1604. //----------------------------------------------------//
  1605. #define CANx ((NU_CAN_T *) CAN_BASE)
  1606. //----------------------------------------------------//
  1607. typedef struct
  1608. {
  1609. USBD_INTEN_T INTEN;
  1610. USBD_INTSTS_T INTSTS;
  1611. USBD_FADDR_T FADDR;
  1612. USBD_EPSTS_T EPSTS;
  1613. USBD_ATTR_T ATTR;
  1614. USBD_FLDET_T FLDET;
  1615. USBD_BUFSEG_T BUFSEG;
  1616. uint32_t RESERVE0;
  1617. union{
  1618. USBD_EP_T EP[6];
  1619. struct{
  1620. USBD_EP_T EP0;
  1621. USBD_EP_T EP1;
  1622. USBD_EP_T EP2;
  1623. USBD_EP_T EP3;
  1624. USBD_EP_T EP4;
  1625. USBD_EP_T EP5;
  1626. };
  1627. };
  1628. uint32_t RESERVE1[4];
  1629. USBD_DRVSE0_T DRVSE0;
  1630. uint32_t RESERVE2[4];
  1631. USBD_PDMA_T PDMA;
  1632. }NU_USBD_T;

  1633. //----------------------------------------------------//
  1634. #define USBDs (*((NU_USBD_T *) USBD_BASE))//定位全局结构变量USBDs
  1635. //----------------------------------------------------//
  1636. #define USBDx ((NU_USBD_T *) USBD_BASE)
  1637. //----------------------------------------------------//
  1638. typedef struct
  1639. {
  1640. I2S_CON_T CON;
  1641. I2S_CLKDIV_T CLKDIV;
  1642. I2S_IE_T IE;
  1643. I2S_STATUS_T STATUS;
  1644. I2S_TXFIFO_T TXFIFO;
  1645. I2S_RXFIFO_T RXFIFO;
  1646. }NU_I2S_T;

  1647. //----------------------------------------------------//
  1648. #define I2Ss (*((NU_I2S_T *) I2S_BASE))//定位全局结构变量I2Ss
  1649. //----------------------------------------------------//
  1650. #define I2Sx ((NU_I2S_T *) I2S_BASE)
  1651. //----------------------------------------------------//
  1652. typedef struct
  1653. {
  1654. EBI_CON_T CON;
  1655. EBI_TIME_T TIME;
  1656. }NU_EBI_T;

  1657. //----------------------------------------------------//
  1658. #define EBIs (*((NU_EBI_T *) EBI_BASE))//定位全局结构变量EBIs
  1659. //----------------------------------------------------//
  1660. #define EBIx ((NU_EBI_T *) EBI_BASE)
  1661. //----------------------------------------------------//
  1662. typedef struct
  1663. {
  1664. __I NU_REG_BITs ISER;//IRQ0~IRQ31设置使能控制寄存器
  1665. __I NU_REG RESERVED0[31];
  1666. __I NU_REG_BITs ICER;//IRQ0~IRQ31清使能控制寄存器
  1667. __I NU_REG RSERVED1[31];
  1668. __I NU_REG_BITs ISPR;//IRQ0~IRQ31设置挂起控制寄存器
  1669. __I NU_REG RESERVED2[31];
  1670. __I NU_REG_BITs ICPR;//IRQ0~IRQ31清挂起控制寄存器
  1671. __I NU_REG RESERVED3[31];
  1672. __I NU_REG RESERVED4[64];
  1673. union{
  1674. __I NU_REG_BITs IPR[8];//IRQ0~IRQ31优先级控制寄存器
  1675. struct{
  1676. __I NU_REG_BITs IPR0;//IRQ0~IRQ3优先级控制寄存器
  1677. __I NU_REG_BITs IPR1;//IRQ4~IRQ7优先级控制寄存器
  1678. __I NU_REG_BITs IPR2;//IRQ8~IRQ11优先级控制寄存器
  1679. __I NU_REG_BITs IPR3;//IRQ12~IRQ15优先级控制寄存器
  1680. __I NU_REG_BITs IPR4;//IRQ16~IRQ19优先级控制寄存器
  1681. __I NU_REG_BITs IPR5;//IRQ20~IRQ23优先级控制寄存器
  1682. __I NU_REG_BITs IPR6;//IRQ24~IRQ27优先级控制寄存器
  1683. __I NU_REG_BITs IPR7;//IRQ28~IRQ31优先级控制寄存器
  1684. };
  1685. };
  1686. }NU_NVIC_Type;
  1687. //----------------------------------------------------//
  1688. #define NVICs (*((NU_NVIC_Type *) NVIC_BASE))//定位全局结构变量NVICs
  1689. //----------------------------------------------------//
  1690. #define NVICx ((NU_NVIC_Type *) NVIC_BASE)
  1691. //----------------------------------------------------//
  1692. typedef enum
  1693. {
  1694. SCB_CPUID_REVISION = 0,//值为0x0
  1695. SCB_CPUID_PARTNO = 4,//值为0xC20
  1696. SCB_CPUID_PART = 16,//ARMv6-M值为0xC
  1697. SCB_CPUID_IMPLEMENTER = 24,//由ARM分配执行码(ARM=0x41)
  1698. }NU_SCB_CPUID_ENUM;

  1699. typedef struct
  1700. {
  1701. __I NU_REG REVISION:4;
  1702. __I NU_REG PARTNO:12;
  1703. __I NU_REG PART:4;
  1704. __I NU_REG RESERVE:4;
  1705. __I NU_REG IMPLEMENTER:8;
  1706. }SCB_CPUID_T;

  1707. typedef volatile union
  1708. {
  1709. NU_REG Regs;
  1710. SCB_CPUID_T Bits;
  1711. }NU_SCB_CPUID_T;

  1712. typedef enum
  1713. {
  1714. SCB_ICSR_VECTACTIVE = 0,//0:线程模式 value > 1: 当前执行异常处理的数目
  1715. SCB_ICSR_VECTPENDING = 12,//表示最高优先级挂起异常的数目
  1716. SCB_ICSR_ISRPENDING = 22,//表示外部配置中断是否挂起
  1717. SCB_ICSR_ISRPREEMPT = 23,//如果置位,挂起异常生效,由调试停止状态退出
  1718. SCB_ICSR_PENDSTCLR = 25,//写1清除挂起SysTick
  1719. SCB_ICSR_PENDSTSET = 26,//设置挂起SysTick.由当前状态读回(1 if Pending,0 if not)
  1720. SCB_ICSR_PENDSVCLR = 27,//写1清PendSV中断
  1721. SCB_ICSR_PENDSVSET = 28,//设置PendSV 中断.通常用于请求内容切换.由当前状态读回(1 if Pending, 0 if not)
  1722. SCB_ICSR_NMIPENDSET = 31//
  1723. }NU_SCB_ICSR_ENUM;

  1724. typedef struct
  1725. {
  1726. __I NU_REG VECTACTIVE:9;
  1727. __I NU_REG VECTPENDING:9;
  1728. __I NU_REG ISRPENDING:1;
  1729. __I NU_REG ISRPREEMPT:1;
  1730. __I NU_REG RESERVE1:1;
  1731. __O NU_REG PENDSTCLR:1;
  1732. __IO NU_REG PENDSTSET:1;
  1733. __I NU_REG PENDSVCLR:1;
  1734. __IO NU_REG PENDSVSET:1;
  1735. __I NU_REG RESERVE2:2;
  1736. __IO NU_REG NMIPENDSET:1;
  1737. }SCB_ICSR_T;

  1738. typedef volatile union
  1739. {
  1740. NU_REG Regs;
  1741. SCB_ICSR_T Bits;
  1742. }NU_SCB_ICSR_T;

  1743. typedef enum
  1744. {
  1745. SCB_SCR_SLEEPONEXIT = 1,//设置为1,在异常返回到线程模式时,内核进入休眠状态
  1746. SCB_SCR_SLEEPDEEP = 2,//提示从休眠中唤醒需要较长时间
  1747. SCB_SCR_SEVONPEND = 4 //当使能时,中断由不活动到挂起,包括了唤醒事件(WFE指令)
  1748. }NU_SCB_SCR_ENUM;

  1749. typedef struct
  1750. {
  1751. __I NU_REG RESERVE0:1;
  1752. __I NU_REG SLEEPONEXIT:1;
  1753. __I NU_REG SLEEPDEEP:1;
  1754. __I NU_REG RESERVE1:1;
  1755. __O NU_REG SEVONPEND:1;
  1756. __I NU_REG RESERVE2:27;
  1757. }SCB_SCR_T;

  1758. typedef volatile union
  1759. {
  1760. NU_REG Regs;
  1761. SCB_ICSR_T Bits;
  1762. }NU_SCB_SCR_T;

  1763. typedef struct
  1764. {
  1765. __I NU_SCB_CPUID_T CPUID;//CPUID Base 寄存器
  1766. __IO NU_SCB_ICSR_T ICSR;//中断控制状态寄存器
  1767. __I NU_REG RESERVED0;
  1768. __IO NU_REG_BITs AIRCR;
  1769. __IO NU_SCB_SCR_T SCR;//系统控制寄存器
  1770. __IO NU_REG_BITs CCR;
  1771. __I NU_REG RESERVED1;
  1772. union{
  1773. __IO NU_REG_BITs SHP[2];//系统处理器优先级寄存器2和3
  1774. struct{
  1775. __IO NU_REG_BITs SHP2;//系统处理器优先级寄存器2
  1776. __IO NU_REG_BITs SHP3;//系统处理器优先级寄存器3
  1777. };
  1778. };
  1779. __IO NU_REG_BITs SHCSR;
  1780. __I NU_REG RESERVED2[2];
  1781. __IO NU_REG_BITs DFSR;
  1782. }NU_SCB_Type;
  1783. //----------------------------------------------------//
  1784. #define SCBs (*((NU_SCB_Type *) SCB_BASE))//定位全局结构变量SCBs
  1785. //----------------------------------------------------//
  1786. #define SCBx ((NU_SCB_Type *) SCB_BASE)
  1787. //----------------------------------------------------//
  1788. typedef enum
  1789. {
  1790. SysTick_CTRL_TICKENABLE = 0,//
  1791. SysTick_CTRL_TICKINT = 1,//
  1792. SysTick_CTRL_CLKSRC = 2,//
  1793. SysTick_CTRL_COUNTFLAG = 16//
  1794. }NU_SysTick_CTRL_ENUM;

  1795. typedef struct
  1796. {
  1797. __IO NU_REG TICKENABLE:1;
  1798. __IO NU_REG TICKINT:1;
  1799. __IO NU_REG CLKSRC:1;
  1800. __IO NU_REG RESERVE0:13;
  1801. __IO NU_REG COUNTFLAG:1;
  1802. __IO NU_REG RESERVE1:15;
  1803. }SysTick_CTRL_T;

  1804. typedef volatile union
  1805. {
  1806. NU_REG Regs;
  1807. SysTick_CTRL_T Bits;
  1808. }NU_SysTick_CTRL_T;

  1809. typedef enum
  1810. {
  1811. SysTick_LOAD_RELOAD = 0,//当计数器达到0时,值加载到当前值寄存器
  1812. }NU_SysTick_LOAD_ENUM;

  1813. typedef struct
  1814. {
  1815. __IO NU_REG RELOAD:24;
  1816. __IO NU_REG RESERVE:8;
  1817. }SysTick_LOAD_T;

  1818. typedef volatile union
  1819. {
  1820. NU_REG Regs;
  1821. SysTick_LOAD_T Bits;
  1822. }NU_SysTick_LOAD_T;

  1823. typedef enum
  1824. {
  1825. SysTick_VAL_CURRENT = 0,//当前计数值,为采样时刻的计数器的值
  1826. }NU_SysTick_VAL_ENUM;

  1827. typedef struct
  1828. {
  1829. __IO NU_REG CURRENT:24;
  1830. __IO NU_REG RESERVE:8;
  1831. }SysTick_VAL_T;

  1832. typedef volatile union
  1833. {
  1834. NU_REG Regs;
  1835. SysTick_VAL_T Bits;
  1836. }NU_SysTick_VAL_T;

  1837. typedef struct
  1838. {
  1839. __IO NU_SysTick_CTRL_T CTRL;//SysTick控制与状态
  1840. __IO NU_SysTick_LOAD_T LOAD;//SysTick重新加载值
  1841. __IO NU_SysTick_VAL_T VAL;//SysTick当前值
  1842. __I NU_REG_BITs CALIB;
  1843. }NU_SysTick_Type;
  1844. //----------------------------------------------------//
  1845. #define SysTicks (*((NU_SysTick_Type *) SysTick_BASE))//定位全局结构变量SysTicks
  1846. //----------------------------------------------------//
  1847. #define SysTickx ((NU_SysTick_Type *) SysTick_BASE)
  1848. //----------------------------------------------------//
  1849. typedef struct
  1850. {
  1851. __IO NU_REG_BITs DHCSR;
  1852. __O NU_REG_BITs DCRSR;
  1853. __IO NU_REG_BITs DCRDR;
  1854. __IO NU_REG_BITs DEMCR;
  1855. }NU_CoreDebug_Type;
  1856. //----------------------------------------------------//
  1857. #define CoreDebugs (*((NU_CoreDebug_Type *) CoreDebug_BASE))//定位全局结构变量CoreDebugs
  1858. //----------------------------------------------------//
  1859. #define CoreDebugx ((NU_CoreDebug_Type *) CoreDebug_BASE)
  1860. //----------------------------------------------------//



  1861. #ifdef __cplusplus
  1862. }
  1863. #endif

  1864. #endif /* __NUC1xxcfg_H__ */
 楼主| hotpower 发表于 2010-12-5 01:56 | 显示全部楼层
应用:Smpl_HIDTransfer.c

  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/
  6. #include <stdio.h>
  7. #include "NUC1xxcfg.h"

  8. #include "Driver\DrvGPIO.h"
  9. #include "Driver\DrvSYS.h"
  10. #include "Driver\DrvUART.h"
  11. #include "Driver\DrvUSB.h"
  12. #include "Driver\DrvSPI.h"
  13. #include "Driver\DrvPDMA.h"
  14. #define DEBUG 0

  15. #define        TEST_LENGTH        64        /* length */
  16. uint8_t SrcArray[TEST_LENGTH];
  17. uint8_t DestArray[TEST_LENGTH];

  18. extern int32_t HID_MainProcess(void);

  19. void Delay(uint32_t delayCnt)
  20. {
  21.     while(delayCnt--)
  22.     {
  23.         __NOP();
  24.         __NOP();
  25.     }
  26. }
  27. ///////////////////////////////////////////////////////////////////////////
  28. //SPIDMA初始化
  29. void SPIPDMAInit(void)
  30. {
  31. STR_PDMA_T sPDMA;  
  32. uint32_t  SPIPort;
  33.         /* -------------------------------------------- */
  34.     /* Configure PDMA Channel 0 to receive SPI2 Rx0 */
  35.         /* -------------------------------------------- */
  36.         /* SPI Port = SPI0 Rx0 */
  37. //        SPIPort = SPI0_BASE + 0x10;
  38.         SPIPort = (uint32_t)&SPI0s.RX[0].Regs;
  39.     /* PDMA Init */
  40.     DrvPDMA_Init();
  41.         /* PDMA Setting */
  42.         DrvPDMA_SetCHForAPBDevice(eDRVPDMA_CHANNEL_0, eDRVPDMA_SPI0, eDRVPDMA_READ_APB);
  43.         /* CH0 RX Setting */
  44.         sPDMA.sSrcCtrl.u32Addr                         = SPIPort;
  45.     sPDMA.sDestCtrl.u32Addr                 = (uint32_t)DestArray;   
  46.         sPDMA.u8TransWidth                                 = eDRVPDMA_WIDTH_8BITS;
  47.         sPDMA.u8Mode                                         = eDRVPDMA_MODE_APB2MEM;//SPI->RAM
  48.         sPDMA.sSrcCtrl.eAddrDirection         = eDRVPDMA_DIRECTION_FIXED;
  49.         sPDMA.sDestCtrl.eAddrDirection         = eDRVPDMA_DIRECTION_INCREMENTED;
  50.         sPDMA.i32ByteCnt                = TEST_LENGTH;  
  51.         DrvPDMA_Open(eDRVPDMA_CHANNEL_0, &sPDMA);
  52.        
  53.     /* -------------------------------------------- */
  54.     /* Configure PDMA Channel 1 to receive SPI2 Tx0 */
  55.         /* -------------------------------------------- */
  56.         /* SPI Port = SPI0 Tx0 */
  57. //        SPIPort = SPI0_BASE + 0x20;
  58.         SPIPort = (uint32_t)&SPI0s.TX[0].Regs;
  59.         /* PDMA Setting */
  60.         DrvPDMA_SetCHForAPBDevice(eDRVPDMA_CHANNEL_1, eDRVPDMA_SPI0, eDRVPDMA_WRITE_APB);
  61.         /* CH0 TX Setting */
  62.         sPDMA.sSrcCtrl.u32Addr                         = (uint32_t)SrcArray;
  63.     sPDMA.sDestCtrl.u32Addr                 = SPIPort;   
  64.         sPDMA.u8TransWidth                                 = eDRVPDMA_WIDTH_8BITS;
  65.         sPDMA.u8Mode                                         = eDRVPDMA_MODE_MEM2APB;//RAM->SPI
  66.         sPDMA.sSrcCtrl.eAddrDirection         = eDRVPDMA_DIRECTION_INCREMENTED;
  67.         sPDMA.sDestCtrl.eAddrDirection         = eDRVPDMA_DIRECTION_FIXED;
  68.         sPDMA.i32ByteCnt                = TEST_LENGTH;  
  69.         DrvPDMA_Open(eDRVPDMA_CHANNEL_1, &sPDMA);
  70. }

  71. //SPI接口初始化
  72. void SPIInit(void)
  73. {
  74.     DrvSYS_SetIPClock(E_SYS_SPI0_CLK,1);
  75.     DrvGPIO_InitFunction(E_FUNC_SPI0); // enable SPI funztion and pin
  76.         DrvSPI_Open(eDRVSPI_PORT0, eDRVSPI_MASTER, eDRVSPI_TYPE2, 8,FALSE);
  77.         DrvSPI_SetSlaveSelectActiveLevel(eDRVSPI_PORT0, eDRVSPI_ACTIVE_HIGH_RISING);
  78.         DrvSPI_SetEndian(eDRVSPI_PORT0, eDRVSPI_MSB_FIRST);
  79. //        DrvSPI_DisableAutoSS(eDRVSPI_PORT0);
  80.         DrvSPI_EnableAutoSS(eDRVSPI_PORT0, eDRVSPI_SS0);
  81. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0,  80000,  80000);
  82. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 120000, 120000);
  83.         DrvSPI_SetClockFreq(eDRVSPI_PORT0, 180000, 180000);
  84. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 200000, 200000);
  85. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 220000, 220000);
  86. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 240000, 240000);
  87. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 300000, 300000);
  88. }

  89. //SPI接口读写数据
  90. uint32_t SPIReadWrite(uint32_t TxData)
  91. {
  92. uint32_t RxData;
  93. //        DrvSPI_SetSS(eDRVSPI_PORT0, eDRVSPI_SS0);
  94. //    SPI0s.SSR.Bits.SSR = eDRVSPI_SS0;

  95. //        DrvSPI_SingleWrite(eDRVSPI_PORT0, &TxData);
  96. //        SPI0s.TX[0].Regs = TxData;
  97.         SPI0s.TX0.Regs = TxData;
  98.         SPI0s.CNTRL.Bits.GO_BUSY = 1;

  99. //        while (DrvSPI_IsBusy(eDRVSPI_PORT0)) {}
  100.         while(SPI0s.CNTRL.Bits.GO_BUSY);


  101. //        DrvSPI_ClrSS(eDRVSPI_PORT0, eDRVSPI_SS0);        
  102. //        SPI0s.SSR.Bits.SSR = eDRVSPI_NONE;
  103.        
  104. //        DrvSPI_DumpRxRegister(eDRVSPI_PORT0, &RxData, 1);
  105. //        RxData = SPI0s.RX[0].Regs;
  106.         RxData = SPI0s.RX0.Regs;
  107.         return RxData;
  108. }

  109. //SPI接口系统初始化
  110. uint32_t SPISysInit(void)
  111. {
  112. uint32_t i, flag = 0;
  113.         for (i = 0; i < 8; i++)
  114.         {
  115.                 SPIReadWrite(250);       
  116.         }

  117.         for (i = 0; i < 250; i++)
  118.         {
  119.                 if (SPIReadWrite(0x88) == 0x88)
  120.                 {
  121.                         flag = 1;
  122.                         break;
  123.                 }
  124.         }
  125.         return flag;
  126. }

  127. //SPI接口读出FLASH命令
  128. uint32_t SPIReadFlashCommand(uint32_t num)
  129. {
  130. uint32_t i, flag = 0;
  131. uint8_t str[] = "\x55\xaa\x40";
  132.         str[2] |= num;
  133.         for (i = 0; i < 3; i ++)
  134.         {
  135.                 SPIReadWrite((uint32_t)str[i]);
  136.         }
  137.         if (SPIReadWrite(0x55) == 0xaa)
  138.         {
  139.                 flag = 1;
  140.         }
  141.         return flag;
  142. }

  143. //SPI接口读出FLASH命令
  144. void SPIReadFlashData(uint8_t *data)
  145. {
  146. uint32_t i;
  147.         for (i = 0; i < 64; i ++)
  148.         {
  149.                 data[i] = SPIReadWrite(0x55555555);
  150.         }
  151.         return;
  152. }

  153. //SPI接口PDMA读出FLASH命令
  154. void SPIDMAReadFlashData(uint8_t *data)
  155. {

  156. //        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_0));
  157.         while(PDMA0s.CSR.Bits.TRIG_EN);
  158. //        PDMA0->DAR = (uint32_t)data;
  159.         PDMA0s.DAR.Regs = (uint32_t)data;

  160.         /* Trigger PDMA specified Channe0 */
  161. //        DrvPDMA_CHEnableTransfer(eDRVPDMA_CHANNEL_0);
  162.     PDMA0s.CSR.Regs |= (1 << PDMA_CSR_PDMACEN) | (1 << PDMA_CSR_TRIG_EN);


  163.           // enable SPI PDMA
  164. //        DrvSPI_SetPDMA(eDRVSPI_PORT0, eDRVSPI_RX_DMA, TRUE);
  165. //        SPI0s.DMA.Bits.RX_DMA_GO = TRUE;

  166. //        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_1));
  167.         while(PDMA1s.CSR.Bits.TRIG_EN);

  168. //        PDMA1->SAR = (uint32_t)SrcArray;
  169.         PDMA1s.SAR.Regs = (uint32_t)SrcArray;

  170.         /* Trigger PDMA specified Channel */
  171. //        DrvPDMA_CHEnableTransfer(eDRVPDMA_CHANNEL_1);
  172.     PDMA1s.CSR.Regs |= (1 << PDMA_CSR_PDMACEN) | (1 << PDMA_CSR_TRIG_EN);

  173.           // enable SPI PDMA
  174. //        DrvSPI_SetPDMA(eDRVSPI_PORT0, eDRVSPI_TX_DMA, TRUE);
  175. //        SPI0s.DMA.Bits.TX_DMA_GO = TRUE;

  176.         SPI0s.DMA.Regs = (1 << SPI_DMA_TX_DMA_GO) | (1 << SPI_DMA_RX_DMA_GO);
  177. ///        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_0));
  178.         return;
  179. }

  180. //SPI接口写入FLASH命令
  181. uint32_t SPIWriteFlashCommand(uint32_t num)
  182. {
  183. uint32_t i, flag = 0;
  184. uint8_t str[] = "\x55\xaa\x80";
  185. uint8_t ch;
  186.         str[2] |= num;
  187.         for (i = 0; i < 3; i ++)
  188.         {
  189.                 ch = SPIReadWrite((uint32_t)str[i]);
  190.         }
  191.         if (ch == 0x55)
  192.         {
  193.                 flag = 1;
  194.         }
  195.         return flag;
  196. }


  197. //SPI接口写入FLASH命令
  198. void SPIWriteFlashData(uint8_t *data)
  199. {
  200. uint32_t i;
  201.         for (i = 0; i < 64; i ++)
  202.         {
  203.                 SPIReadWrite((uint32_t)data[i]);
  204.         }
  205.         return;
  206. }

  207. //SPI接口PDMA写入FLASH命令
  208. void SPIDMAWriteFlashData(uint8_t *data)
  209. {
  210. //        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_1));
  211.         while(PDMA1s.CSR.Bits.TRIG_EN);

  212. //        PDMA1->SAR = (uint32_t)data;
  213.         PDMA1s.SAR.Regs = (uint32_t)data;

  214.         /* Trigger PDMA specified Channel */
  215. //        DrvPDMA_CHEnableTransfer(eDRVPDMA_CHANNEL_1);
  216.     PDMA1s.CSR.Regs |= (1 << PDMA_CSR_PDMACEN) | (1 << PDMA_CSR_TRIG_EN);

  217.           // enable SPI PDMA
  218. //        DrvSPI_SetPDMA(eDRVSPI_PORT0, eDRVSPI_TX_DMA, TRUE);
  219.         SPI0s.DMA.Bits.TX_DMA_GO = TRUE;

  220. //        DrvSPI_SetGo(eDRVSPI_PORT0);
  221. ///        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_1));

  222.         return;
  223. }

  224. //SPI接口擦除FLASH
  225. uint32_t SPIEraseFlash(uint32_t num)//0~31,32,0x30,0x3f
  226. {
  227. uint32_t i, flag = 0;
  228. uint8_t str[] = "\x55\xaa\x00";
  229.         if (num <= 0x3f)
  230.         {
  231.                 str[2] = (uint8_t)num;
  232.                 for (i = 0; i < 3; i ++)
  233.                 {
  234.                         SPIReadWrite((uint32_t)str[i]);
  235.                 }
  236.                 for (i = 0; i < 250; i++)
  237.                 {
  238.                         if (SPIReadWrite(0x99) >= 0xc0)
  239.                         {
  240.                                 for (i = 0; i < 2500; i++)//等待擦除结束
  241.                                 {
  242.                                         if (SPIReadWrite(0x99) < 0x80)
  243.                                         {
  244.                                                 for (i = 0; i < 250; i++)
  245.                                                 {
  246.                                                         if (SPIReadWrite(0x66) == str[2])
  247.                                                         {
  248.                                                                 flag = 1;
  249.                                                                 break;
  250.                                                         }
  251.                                                 }
  252.                                                 break;
  253.                                         }
  254.                                 }
  255.                                 break;
  256.                         }
  257.                 }
  258.         }
  259.         return flag;
  260. }

  261. //SPI接口芯片测试
  262. uint32_t SPIChipTest(void)
  263. {
  264. uint32_t i, flag = 0;
  265.         for (i = 0; i < 8; i ++)
  266.         {
  267.                 if (SPIReadWrite(0xcc) == 0x03)
  268.                 {
  269.                         flag = 1;
  270.                         break;
  271.                 }
  272.         }
  273.         return flag;
  274. }

  275. ///////////////////////////////////////////////////////////////////////////

  276. /*---------------------------------------------------------------------------------------------------------*/
  277. /*  Main Function                                                                                                                                              */
  278. /*---------------------------------------------------------------------------------------------------------*/
  279. int32_t main (void)
  280. {
  281.         extern uint32_t SystemFrequency;
  282.         uint32_t i;//, j;
  283.         uint8_t FlashData[64];

  284. #ifdef DEBUG
  285.         STR_UART_T sParam;

  286.         /* Set UART Pin */
  287.         DrvGPIO_InitFunction(E_FUNC_UART0);
  288.        
  289.         /* UART Setting */
  290.     sParam.u32BaudRate                 = 115200;
  291.     sParam.u8cDataBits                 = DRVUART_DATABITS_8;
  292.     sParam.u8cStopBits                 = DRVUART_STOPBITS_1;
  293.     sParam.u8cParity                 = DRVUART_PARITY_NONE;
  294.     sParam.u8cRxTriggerLevel= DRVUART_FIFO_1BYTES;

  295.         /* Select UART Clock Source From 12Mhz*/
  296.         DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC,0);

  297.         /* Set UART Configuration */
  298.         DrvUART_Open(UART_PORT0,&sParam);
  299. #endif

  300.     UNLOCKREG();

  301.     SYSCLK->PWRCON.XTL12M_EN = 1;
  302.    
  303.     /* Waiting for XTAL stable */
  304.     Delay(1000);

  305.     /* Enable PLL */
  306.         SYSCLK->PLLCON.OE = 0;
  307.     DrvSYS_SetPLLMode(0);
  308.         Delay(1000);

  309.         /* Switch to PLL clock */
  310.         DrvSYS_SelectHCLKSource(2);   

  311.     Delay(100);

  312.     /* The PLL must be 48MHz x N times when using USB */
  313. //    SystemCoreClockUpdate();
  314.         for (i = 0; i < sizeof(SrcArray); i ++)
  315.         {
  316.                 SrcArray[i] = 0x55;
  317.         }
  318.         SPIInit();
  319.         if (SPISysInit())
  320.         {
  321.                 __NOP();
  322.         }
  323.         SPIPDMAInit();
  324. /*
  325. while(1)
  326. {
  327. for (i = 0; i < sizeof(SrcArray); i ++)
  328. {
  329.         SrcArray[i] = i;
  330.         FlashData[i] = 0;
  331. }
  332. SPIDMAReadFlashData(FlashData);
  333. __NOP();
  334. }
  335. */
  336. #ifdef DEBUG   
  337.     printf("NUC100 USB HID\n");
  338. #endif
  339.        
  340.     /* Execute HID process */
  341.         HID_MainProcess();

  342. ////
  343. /*
  344.         while(1)
  345.         {
  346.                 if (SPISysInit())
  347.                 {
  348.                         __NOP();
  349.                 }
  350.                 if  (SPIEraseFlash(0x30))
  351.                 {
  352.                         __NOP();
  353.                 }
  354.                 if (SPISysInit())
  355.                 {
  356.                         __NOP();
  357.                 }
  358.                 if (SPIReadFlashCommand(0x30))
  359.                 {
  360.                   __NOP();
  361.                 }
  362.                 SPIDMAReadFlashData(FlashData);
  363.             __NOP();
  364.                 for (i = 0; i < sizeof(FlashData); i ++)
  365.                 {
  366.                         FlashData[i] = i;
  367.                 }
  368.                 if (SPISysInit())
  369.                 {
  370.                         __NOP();
  371.                 }
  372.                 if (SPIWriteFlashCommand(0x30))
  373.                 {
  374.                   __NOP();
  375.                 }
  376.                 SPIDMAWriteFlashData(FlashData);
  377.             __NOP();
  378.                 if (SPISysInit())
  379.                 {
  380.                         __NOP();
  381.                 }
  382.                 if (SPIReadFlashCommand(0x30))
  383.                 {
  384.                   __NOP();
  385.                 }
  386.                 SPIDMAReadFlashData(FlashData);
  387.             __NOP();
  388.         }

  389.         SPIInit();
  390.         if (SPISysInit())
  391.         {
  392.                 __NOP();
  393.         }
  394.         SPIPDMAInit();
  395.         if  (SPIChipTest())
  396.         {
  397.                 __NOP();
  398.         }
  399.         for (i = 0; i < sizeof(SrcArray); i ++)
  400.         {
  401.                 SrcArray[i] = 0x55;
  402.         }
  403.         for (i = 0; i < sizeof(FlashData); i ++)
  404.         {
  405.                 FlashData[i] = i + 0x30;
  406.         }
  407.         if  (SPIEraseFlash(0))
  408.         {
  409.                 __NOP();
  410.         }
  411.         if (SPIChipTest())
  412.         {
  413.                 __NOP();
  414.         }
  415.         SPIWriteFlashCommand(0);
  416.         SPIDMAWriteFlashData(FlashData);
  417. //        SPIWriteFlashData(FlashData);
  418.         if (SPISysInit())
  419.         {
  420.                 __NOP();
  421.         }
  422.         if (SPIChipTest())
  423.         {
  424.                 __NOP();
  425.         }
  426.         __NOP();
  427.         __NOP();
  428.         __NOP();

  429. */
  430. /*
  431.         for (i = 0; i < sizeof(FlashData); i ++)
  432.         {
  433.                 FlashData[i] = i + 0x30;
  434.         }
  435.         if (SPIChipTest())
  436.         {
  437.                 __NOP();
  438.         }
  439.         if (SPIWriteFlashCommand(0x3f))
  440.         {
  441.                 for (i = 0; i < 512; i ++)
  442.                 {
  443.                         SPIWriteFlashData(FlashData);
  444.                 }
  445.                 __NOP();
  446.         }
  447.         if (SPIChipTest())
  448.         {
  449.                 __NOP();
  450.         }
  451.         if (SPIReadFlashCommand(0x3f))
  452.         {
  453.                 for (i = 0; i < 512; i ++)
  454.                 {
  455.                         SPIReadFlashData(FlashData);
  456.                 }
  457.                 __NOP();
  458.         }
  459. */
  460. /*
  461.         if  (SPIEraseFlash(0x30))
  462.         {
  463.                 __NOP();
  464.         }
  465.         if  (SPIEraseFlash(0x3f))
  466.         {
  467.                 __NOP();
  468.         }

  469.         for (i = 0; i < 33; i ++)
  470.         {
  471.                 if  (SPIEraseFlash(i))
  472.                 {
  473.                         __NOP();
  474.                 }
  475.         }

  476.         if (SPISysInit())
  477.         {
  478.                 __NOP();
  479.         }
  480.         if  (SPIEraseFlash(0x3f))
  481.         {
  482.                 __NOP();
  483.         }
  484.         if (SPIWriteFlashCommand(0x3f))
  485.         {
  486.                 for (i = 0; i < 512; i ++)
  487.                 {
  488.                         SPIWriteFlashData(FlashData);
  489.                 }
  490.         }
  491.         if (SPISysInit())
  492.         {
  493.                 __NOP();
  494.         }
  495.         if  (SPIEraseFlash(0x30))
  496.         {
  497.                 __NOP();
  498.         }
  499.         for (i = 0; i < 13; i ++)
  500.         {
  501.                 if (SPIWriteFlashCommand(i + 0x30))
  502.                 {
  503.                         for (j = 0; j < 96; j ++)
  504.                         {
  505.                                 SPIWriteFlashData(FlashData);
  506.                         }
  507.                         __NOP();
  508.                 }
  509.         }
  510.         for (i = 0; i < 33; i ++)
  511.         {
  512.                 if (SPISysInit())
  513.                 {
  514.                         __NOP();
  515.                 }
  516.                 if  (SPIEraseFlash(i))
  517.                 {
  518.                         __NOP();
  519.                 }
  520.                 if (SPIWriteFlashCommand(i))
  521.                 {
  522.                         for (j = 0; j < 8192; j ++)
  523.                         {
  524.                                 SPIWriteFlashData(FlashData);
  525.                         }
  526.                         __NOP();
  527.                 }
  528.         }
  529.         if (SPIChipTest())
  530.         {
  531.                 __NOP();
  532.         }
  533.         if (SPIReadFlashCommand(0x3f))
  534.         {
  535.                 for (i = 0; i < 512; i ++)
  536.                 {
  537.                         SPIReadFlashData(FlashData);
  538.                 }
  539.         }
  540.         if (SPISysInit())
  541.         {
  542.                 __NOP();
  543.         }
  544.         for (i = 0; i < 13; i ++)
  545.         {
  546.                 if (SPIReadFlashCommand(i + 0x30))
  547.                 {
  548.                         for (j = 0; j < 96; j ++)
  549.                         {
  550.                                 SPIReadFlashData(FlashData);
  551.                         }
  552.                         __NOP();
  553.                 }
  554.         }
  555.         if (SPISysInit())
  556.         {
  557.                 __NOP();
  558.         }
  559.         for (i = 0; i < 33; i ++)
  560.         {
  561.                 if (SPIReadFlashCommand(i))
  562.                 {
  563.                         for (j = 0; j < 8192; j ++)
  564.                         {
  565.                                 SPIReadFlashData(FlashData);
  566.                         }
  567.                         __NOP();
  568.                 }
  569.         }
  570. */
  571. #ifdef DEBUG   
  572.     printf("NUC100 USB HID\n");
  573. #endif
  574.        
  575.     /* Execute HID process */
  576.         HID_MainProcess();


  577. }





kyzb001 发表于 2010-12-5 16:15 | 显示全部楼层
:D  沙发哇。  我勒个去, 太棒了。:)
crestxa 发表于 2010-12-5 20:08 | 显示全部楼层
支持,学习,能提供包下载就最好了,
zjw5000 发表于 2010-12-5 20:15 | 显示全部楼层
大叔,给个整个工程的
 楼主| hotpower 发表于 2010-12-5 20:57 | 显示全部楼层
哈哈,这不是正式版…
dong_abc 发表于 2010-12-5 22:34 | 显示全部楼层
又一个红杏!
mcu9999 发表于 2010-12-6 07:44 | 显示全部楼层
可以尝试玩玩
kyzb001 发表于 2010-12-6 08:10 | 显示全部楼层
更新了?
mtwumtwu 发表于 2010-12-6 09:22 | 显示全部楼层
TKS for updating
 楼主| hotpower 发表于 2010-12-6 10:20 | 显示全部楼层
先不准备发布,先自己欣赏之…
火箭球迷 发表于 2010-12-6 16:55 | 显示全部楼层
啥时候出个正式版:lol
 楼主| hotpower 发表于 2012-1-6 09:23 | 显示全部楼层
kyzb001 发表于 2012-1-6 11:44 | 显示全部楼层
这个我是沙发 ,哈哈!!!
panchaoran 发表于 2012-1-6 15:40 | 显示全部楼层
这个。。 好长啊
 楼主| hotpower 发表于 2012-1-6 17:12 | 显示全部楼层
写了四天呀,手都累了。
呆板书生 发表于 2012-1-7 08:13 | 显示全部楼层
菜农辛苦辛苦,学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21617

帖子

508

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