[应用方案] ARM Cortex™-M0 单片机 > NUC100 / 200 系列

[复制链接]
 楼主| 270382236 发表于 2016-3-22 14:27 | 显示全部楼层 |阅读模式
NUC200为Cortex™-M0 32位微控制器系列,其特点为宽电压工作范围2.5V至5.5V与-40℃ ~ 85℃工作温度、内建22.1184 MHz高精度RC晶振(±1%精确度,25℃ 5V)、并内建Data Flash、欠压检测、丰富周边、整合多种多组串行传输接口、高抗干扰能力(8KV ESD/4KV EFT)、支持在线系统更新(ISP)、在线电路更新(ICP)与在线应用程序更新(IAP),提供封装有LQFP48、LQFP64与LQFP100。
应用领域 :
门禁系统/警报器、消费性产品、工业控制应用等等
关键特性 :
内核(Core)
- Cortex™-M0 32位微处理器
- 工作频率可达 50 MHz
- 工作电压:2.5V to 5.5V
- 工作温度:-40℃ ~ 85℃
内存(Memory)
- 128 KB应用程序
- 内嵌16 KB SRAM
- 内嵌4 KB Data Flash
      - 在线系统更新ISP
(In-System Programming)
      - 在线电路更新ICP
(In-Circuit Programming)
      - 在线应用程序更新 IAP
(In-Application Programming)
模拟转数字转换器(ADC)
- 提供8通道
- 12位分辨率
- 每秒采样率可达 800kSPS
- PWM输出可以触发A/D转换
- 提供误差±1℃温度传感器

脉波宽度调变(PWM)
- 最多8通道PWM输出或互补式PWM输出
- PWM时间与周期可触发A/D转换
通讯接口(Connectivity)
- 提供最多四组SPI(可达36 MHz)
- 提供最多二组I²C(可达 400 kHz)
- 提供最多三组UART
- 提供最多三组ISO-7816-3接口
- 提供一组16/8位外扩接口(EBI)
时钟控制(Clock control)
- 外部晶振4 to 24 MHz
      - 内置22.1184 MHz高精度RC
晶振,常温5V下±1%误差。
zhuomuniao110 发表于 2016-3-22 17:07 | 显示全部楼层
  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;


zhuomuniao110 发表于 2016-3-22 17:10 | 显示全部楼层
  1. #define NU_BASE_GPIO ((NUPS_GPIO) GPIOA_BASE)//定义硬件结构指针(硬件地址)
  2. #define GPIOs (*NU_BASE_GPIO)//定位全局结构变量GPIOs
  3. //----------------------------------------------------//
  4. #define GPIOAs (*((NU_GPIO_T *) GPIOA_BASE))//定位全局结构变量GPIOAs
  5. #define GPIOBs (*((NU_GPIO_T *) GPIOB_BASE))//定位全局结构变量GPIOBs
  6. #define GPIOCs (*((NU_GPIO_T *) GPIOC_BASE))//定位全局结构变量GPIOCs
  7. #define GPIODs (*((NU_GPIO_T *) GPIOD_BASE))//定位全局结构变量GPIODs
  8. #define GPIOEs (*((NU_GPIO_T *) GPIOE_BASE))//定位全局结构变量GPIOEs
  9. //----------------------------------------------------//

  10. #define GPIOx(x) ((NU_GPIO_T *) GPIOA_BASE + (x * 0x0040))
  11. #define Px(x) ((NU_GPIO_T *) GPIOA_BASE + (x * 0x0040))
  12. //----------------------------------------------------//

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

  30. typedef enum
  31. {
  32. SPI_SSR_SSR = 0,//从机选择寄存器(主机模式)
  33. SPI_SSR_SS_LVL = 2,//从机选择触发电平选择
  34. SPI_SSR_AUTOSS = 3,//自动从机选择(主机模式)
  35. SPI_SSR_SS_LTRIG = 4,//从机电平触发选择(从机模式)
  36. SPI_SSR_LTRIG_FLAG = 5//电平触发标志
  37. }NU_SPI_SSR_ENUM;

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

  43. typedef volatile union
  44. {
  45. NU_REG Regs;
  46. SPI_CNTRL_T Bits;
  47. }NU_SPI_CNTRL_T;

  48. typedef volatile union
  49. {
  50. NU_REG Regs;
  51. SPI_SSR_T Bits;
  52. }NU_SPI_SSR_T;

  53. typedef volatile union
  54. {
  55. NU_REG Regs;
  56. SPI_DIVIDER_T Bits;
  57. }NU_SPI_DIVIDER_T;

  58. typedef volatile union
  59. {
  60. NU_REG Regs;
  61. SPI_DMA_T Bits;
  62. }NU_SPI_DMA_T;

  63. typedef struct
  64. {
  65. NU_SPI_CNTRL_T CNTRL;//控制及状态寄存器
  66. NU_SPI_DIVIDER_T DIVIDER;//时钟除频寄存器
  67. NU_SPI_SSR_T SSR;//从机选择寄存器
  68. NU_REG RESERVE0;//保留
  69. union{
  70. NU_REG_BITs RX[2];//接收数据寄存器数组
  71. struct{
  72. NU_REG_BITs RX0;//接收数据寄存器低32位
  73. NU_REG_BITs RX1;//接收数据寄存器高32位
  74. };
  75. };
  76. NU_REG RESERVE1[2];//保留
  77. union{
  78. NU_REG_BITs TX[2];//数据发送寄存器数组
  79. struct{
  80. NU_REG_BITs TX0;//数据发送寄存器低32位
  81. NU_REG_BITs TX1;//数据发送寄存器高32位
  82. };
  83. };
  84. NU_REG RESERVE2[3];//保留
  85. NU_REG_BITs VARCLK;
  86. NU_SPI_DMA_T DMA;//SPIDMA控制寄存器
  87. }NU_SPI_T;


zhuomuniao110 发表于 2016-3-22 17:10 | 显示全部楼层
  1. //----------------------------------------------------//
  2. #define SPI0s (*((NU_SPI_T *) SPI0_BASE))//定位全局结构变量SPI0s
  3. #define SPI1s (*((NU_SPI_T *) SPI1_BASE))//定位全局结构变量SPI1s
  4. #define SPI2s (*((NU_SPI_T *) SPI2_BASE))//定位全局结构变量SPI2s
  5. #define SPI3s (*((NU_SPI_T *) SPI3_BASE))//定位全局结构变量SPI3s
  6. //----------------------------------------------------//
  7. #define SPIx(x) ((NU_SPI_T *) SPI0_BASE + ((x & 1) * 0x4000) + ((x >> 1) * 0x100000))
  8. //----------------------------------------------------//
  9. typedef volatile union
  10. {
  11. NU_REG Regs;
  12. PDMA_CSR_T Bits;
  13. }NU_PDMA_CSR_T;


  14. typedef volatile union
  15. {
  16. NU_REG Regs;
  17. PDMA_CBCR_T Bits;
  18. }NU_PDMA_CBCR_T;

  19. typedef volatile union
  20. {
  21. NU_REG Regs;
  22. PDMA_IER_T Bits;
  23. }NU_PDMA_IER_T;

  24. typedef volatile union
  25. {
  26. NU_REG Regs;
  27. PDMA_ISR_T Bits;
  28. }NU_PDMA_ISR_T;

  29. typedef enum
  30. {
  31. PDMA_CSR_PDMACEN = 0,//PDMA通道使能
  32. PDMA_CSR_SW_RST = 1,//软件产生复位
  33. PDMA_CSR_MODE_SEL = 2,//PDMA模式选择
  34. PDMA_CSR_SAD_SEL = 4,//传输源地址方向选择
  35. PDMA_CSR_DAD_SEL = 6,//传输目的地址方向选择
  36. PDMA_CSR_WAR_BCR_SEL = 12,
  37. PDMA_CSR_APB_TWS = 19,//外设传输宽度选择
  38. PDMA_CSR_TRIG_EN = 23//PDMA数据读写传输使能(当PDMA传输完成, 该位自动清除.)
  39. }NU_PDMA_CSR_ENUM;

  40. typedef enum
  41. {
  42. PDMA_CBCR_CBCR = 0
  43. }NU_PDMA_CBCR_ENUM;

  44. typedef enum
  45. {
  46. PDMA_IER_TABORT_IE = 0,//读写异常使能
  47. PDMA_IER_BLKD_IE = 1,//Transfer Done中断使能
  48. PDMA_IER_WAR_IE = 2//Wrap Around中断使能
  49. }NU_PDMA_IER_ENUM;

  50. typedef enum
  51. {
  52. PDMA_ISR_TABORT_IF = 0,//PDMA 读/写 目标异常中断标志位
  53. PDMA_ISR_BLKD_IF = 1,//Block 传递完成 中断标志位
  54. PDMA_ISR_WAR_BCR_IF= 8,//Wrap around传递字节计时器中断标志位
  55. PDMA_ISR_INTR = 31//中断管脚状态(只读)
  56. }NU_PDMA_ISR_ENUM;

  57. typedef struct
  58. {
  59. NU_PDMA_CSR_T CSR;//控制寄存器
  60. NU_REG_BITs SAR;//源地址寄存器
  61. NU_REG_BITs DAR;//目的地址寄存器
  62. NU_REG_BITs BCR;//发送字节计数寄存器
  63. NU_REG_BITs POINT;//内部数据指示器
  64. NU_REG_BITs CSAR;//当前源目的地址
  65. NU_REG_BITs CDAR;//当前目的地址寄存器
  66. NU_PDMA_CBCR_T CBCR;//当前传输字节计数寄存器
  67. NU_PDMA_IER_T IER;//中断使能寄存器
  68. NU_PDMA_ISR_T ISR;//中断状态寄存器
  69. union{
  70. NU_REG_BITs SBUF[4];//共享缓冲FIFO
  71. struct{
  72. NU_REG_BITs SBUF0;//共享缓冲FIFO
  73. NU_REG_BITs SBUF1;//共享缓冲FIFO
  74. NU_REG_BITs SBUF2;//共享缓冲FIFO
  75. NU_REG_BITs SBUF3;//共享缓冲FIFO
  76. };
  77. };
  78. }NU_PDMA_T;

  79. typedef struct {
  80. union {
  81. __IO NU_PDMA_T CHx[16];
  82. struct {
  83. __IO NU_PDMA_T CH0;
  84. __IO NU_PDMA_T CH1;
  85. __IO NU_PDMA_T CH2;
  86. __IO NU_PDMA_T CH3;
  87. __IO NU_PDMA_T CH4;
  88. __IO NU_PDMA_T CH5;
  89. __IO NU_PDMA_T CH6;
  90. __IO NU_PDMA_T CH7;
  91. __IO NU_PDMA_T CH8;
  92. __IO NU_PDMA_T RESERVE[7];
  93. };
  94. };
  95. }NUS_PDMA, *NUPS_PDMA;


zhuomuniao110 发表于 2016-3-22 17:12 | 显示全部楼层
  1. #define NU_BASE_PDMA ((NUPS_PDMA) PDMA0_BASE)//定义硬件结构指针(硬件地址)
  2. #define PDMAs (*NU_BASE_PDMA)//定位全局结构变量PDMAs
  3. //----------------------------------------------------//
  4. #define PDMA0s (*((NU_PDMA_T *) PDMA0_BASE))//定位全局结构变量PDMA0s
  5. #define PDMA1s (*((NU_PDMA_T *) PDMA1_BASE))//定位全局结构变量PDMA1s
  6. #define PDMA2s (*((NU_PDMA_T *) PDMA2_BASE))//定位全局结构变量PDMA2s
  7. #define PDMA3s (*((NU_PDMA_T *) PDMA3_BASE))//定位全局结构变量PDMA3s
  8. #define PDMA4s (*((NU_PDMA_T *) PDMA4_BASE))//定位全局结构变量PDMA4s
  9. #define PDMA5s (*((NU_PDMA_T *) PDMA5_BASE))//定位全局结构变量PDMA5s
  10. #define PDMA6s (*((NU_PDMA_T *) PDMA6_BASE))//定位全局结构变量PDMA6s
  11. #define PDMA7s (*((NU_PDMA_T *) PDMA7_BASE))//定位全局结构变量PDMA7s
  12. #define PDMA8s (*((NU_PDMA_T *) PDMA8_BASE))//定位全局结构变量PDMA8s
  13. //----------------------------------------------------//
  14. #define PDMAx(x) ((NU_PDMA_T *) PDMA0_BASE + (x * 0x0100))
  15. //----------------------------------------------------//
  16. typedef enum
  17. {
  18. TIMER_TCSR_PRESCALE = 0,//预分频计数器
  19. TIMER_TCSR_TDR_EN = 16,//数据锁存使能
  20. TIMER_TCSR_COUNTER_EN = 24,//
  21. TIMER_TCSR_CACT = 25,//定时器工作状态
  22. TIMER_TCSR_CRST = 26,//计数器重置
  23. TIMER_TCSR_MODE = 27,//定时器工作模式
  24. TIMER_TCSR_TMR_IE = 29,//中断使能
  25. TIMER_TCSR_CEN = 30,//计数器使能位
  26. TIMER_TCSR_nDBGACK_EN = 31
  27. }NU_TIMER_TCSR_ENUM;

  28. typedef volatile union
  29. {
  30. NU_REG Regs;
  31. TIMER_TCSR_T Bits;
  32. }NU_TIMER_TCSR_T;

  33. typedef enum
  34. {
  35. TIMER_TISR_TIF = 0//定时器中断标志
  36. }NU_TIMER_TISR_T_ENUM;

  37. typedef volatile union
  38. {
  39. NU_REG Regs;
  40. TIMER_TISR_T Bits;
  41. }NU_TIMER_TISR_T;

  42. typedef struct
  43. {
  44. __IO NU_TIMER_TCSR_T TCSR;//控制与状态寄存器
  45. __IO NU_REG_BITs TCMPR;//比较寄存器
  46. __IO NU_TIMER_TISR_T TISR;//中断状态寄存器
  47. __IO NU_REG_BITs TDR;//数据寄存器
  48. }NU_TIMER_T;


  1. //----------------------------------------------------//
  2. #define TIMER0s (*((NU_TIMER_T *) TIMER0_BASE))//定位全局结构变量TIMER0s
  3. #define TIMER1s (*((NU_TIMER_T *) TIMER1_BASE))//定位全局结构变量TIMER1s
  4. #define TIMER2s (*((NU_TIMER_T *) TIMER2_BASE))//定位全局结构变量TIMER2s
  5. #define TIMER3s (*((NU_TIMER_T *) TIMER3_BASE))//定位全局结构变量TIMER3s
  6. //----------------------------------------------------//
  7. #define TIMERx(x) ((NU_TIMER_T *)TIMER0_BASE + ((x & 1) * 0x0020) + ((x >> 1) * 0x100000))
  8. //----------------------------------------------------//
  9. typedef enum
  10. {
  11. I2C_CON_AA = 2,//I2C接收应答标志位
  12. I2C_CON_SI = 3,//I2C中断标志位
  13. I2C_CON_STO = 4,//I2C停止标志
  14. I2C_CON_STA = 5,//I2C起始标志
  15. I2C_CON_ENSI = 6,//I2C控制使能/禁止
  16. I2C_CON_EI = 7 //使能中断
  17. }NU_I2C_CON_ENUM;

  18. typedef volatile union
  19. {
  20. NU_REG Regs;
  21. I2C_CON_T Bits;
  22. }NU_I2C_CON_T;

  23. typedef enum
  24. {
  25. I2C_ADDR_GC = 0,//全呼功能
  26. I2C_ADDR_ADDR = 1 //I2C地址寄存器
  27. }NU_I2C_ADDR_ENUM;

  28. typedef volatile union
  29. {
  30. NU_REG Regs;
  31. I2C_ADDR_T Bits;
  32. }NU_I2C_ADDR_T;

  33. typedef enum
  34. {
  35. I2C_ADRM_ADM = 1 //I2C隐藏地址寄存器
  36. }NU_I2C_ADRM_ENUM;

  37. typedef volatile union
  38. {
  39. NU_REG Regs;
  40. I2C_ADRM_T Bits;
  41. }NU_I2C_ADRM_T;

  42. typedef enum
  43. {
  44. I2C_TOC_TIF = 0,//超时标志
  45. I2C_TOC_DIV4 = 1,//超时计数输入时钟除4
  46. I2C_TOC_ENTI = 2 //超时计数使能/禁止
  47. }NU_I2C_TOC_NUM;

  48. typedef volatile union
  49. {
  50. NU_REG Regs;
  51. I2C_TOC_T Bits;
  52. }NU_I2C_TOC_T;

  53. typedef struct
  54. {
  55. __IO NU_I2C_CON_T CON;//I2C控制寄存器
  56. __IO NU_I2C_ADDR_T ADDR0;//I2C从机地址寄存器0
  57. __IO NU_REG_BITs DATA;//I2C数据寄存器
  58. __IO NU_REG_BITs STATUS;//I2C状态寄存器
  59. __IO NU_REG_BITs CLK;//I2C时钟时钟分频寄存器
  60. __IO NU_I2C_TOC_T TOC;//I2C超时控制寄存器
  61. __IO NU_I2C_ADDR_T ADDR1;//从机地址寄存器1
  62. __IO NU_I2C_ADDR_T ADDR2;//从机地址寄存器2
  63. __IO NU_I2C_ADDR_T ADDR3;//从机地址寄存器3
  64. __IO NU_I2C_ADRM_T ADRM0;//从机隐藏地址寄存器0
  65. __IO NU_I2C_ADRM_T ADRM1;//从机隐藏地址寄存器1
  66. __IO NU_I2C_ADRM_T ADRM2;//从机隐藏地址寄存器2
  67. __IO NU_I2C_ADRM_T ADRM3;//从机隐藏地址寄存器3
  68. __IO NU_REG RESERVE[((I2C1_BASE - I2C0_BASE) - sizeof(I2C_T)) / sizeof(NU_REG)];
  69. }NU_I2C_T;
  70. //----------------------------------------------------//
  71. typedef struct {
  72. union {
  73. __IO NU_I2C_T PORT[2];
  74. struct {
  75. __IO NU_I2C_T PORT0;
  76. __IO NU_I2C_T PORT1;
  77. };
  78. };
  79. }NUS_I2C, *NUPS_I2C;
  1. #define NU_BASE_I2C ((NUPS_I2C) I2C0_BASE)//定义硬件结构指针(硬件地址)
  2. #define I2Cs (*NU_BASE_I2C)//定位全局结构变量I2Cs
  3. //----------------------------------------------------//
  4. #define I2C0s (*((NU_I2C_T *) I2C0_BASE))//定位全局结构变量I2C0s
  5. #define I2C1s (*((NU_I2C_T *) I2C1_BASE))//定位全局结构变量I2C0s
  6. //----------------------------------------------------//
  7. #define I2Cx(x) ((NU_I2C_T *) I2C0_BASE + (x * 0x100000))
  8. //----------------------------------------------------//
  9. typedef volatile union
  10. {
  11. NU_REG Regs;
  12. PWM_PPR_T Bits;
  13. }NU_PWM_PPR_T;

  14. typedef volatile union
  15. {
  16. NU_REG Regs;
  17. PWM_CSR_T Bits;
  18. }NU_PWM_CSR_T;

  19. typedef volatile union
  20. {
  21. NU_REG Regs;
  22. PWM_PCR_T Bits;
  23. }NU_PWM_PCR_T;

  24. typedef volatile union
  25. {
  26. NU_REG Regs;
  27. PWM_PBCR_T Bits;
  28. }NU_PWM_PBCR_T;

  29. typedef volatile union
  30. {
  31. NU_REG Regs;
  32. PWM_PIER_T Bits;
  33. }NU_PWM_PIER_T;

  34. typedef volatile union
  35. {
  36. NU_REG Regs;
  37. PWM_PIIR_T Bits;
  38. }NU_PWM_PIIR_T;

  39. typedef volatile union
  40. {
  41. NU_REG Regs;
  42. PWM_CCR0_T Bits;
  43. }NU_PWM_CCR0_T;

  44. typedef volatile union
  45. {
  46. NU_REG Regs;
  47. PWM_CCR2_T Bits;
  48. }NU_PWM_CCR2_T;

  49. typedef volatile union
  50. {
  51. NU_REG Regs;
  52. PWM_POE_T Bits;
  53. }NU_PWM_POE_T;

  54. typedef struct
  55. {
  56. __IO NU_PWM_PPR_T PPR;//PWM0~3或PWM4~7预分频寄存器
  57. __IO NU_PWM_CSR_T CSR;//PWM0~3或PWM4~7时钟选择寄存器
  58. __IO NU_PWM_PCR_T PCR;//PWM0~3或PWM4~7控制寄存器
  59. __IO NU_REG_BITs CNR0;//PWM0或PWM4计数器寄存器
  60. __IO NU_REG_BITs CMR0;//PWM0或PWM4比较寄存器
  61. __IO NU_REG_BITs PDR0;//PWM0或PWM4数据寄存器
  62. __IO NU_REG_BITs CNR1;//PWM1或PWM5计数器寄存器
  63. __IO NU_REG_BITs CMR1;//PWM1或PWM5比较寄存器
  64. __IO NU_REG_BITs PDR1;//PWM1或PWM5数据寄存器
  65. __IO NU_REG_BITs CNR2;//PWM2或PWM6计数器寄存器
  66. __IO NU_REG_BITs CMR2;//PWM2或PWM6比较寄存器
  67. __IO NU_REG_BITs PDR2;//PWM2或PWM6数据寄存器
  68. __IO NU_REG_BITs CNR3;//PWM3或PWM7计数器寄存器
  69. __IO NU_REG_BITs CMR3;//PWM3或PWM7比较寄存器
  70. __IO NU_REG_BITs PDR3;//PWM3或PWM7数据寄存器
  71. __IO NU_PWM_PBCR_T PBCR;
  72. __IO NU_PWM_PIER_T PIER;//PWM0~3或PWM4~7中断使能寄存器
  73. __IO NU_PWM_PIIR_T PIIR;
  74. __I NU_REG RESERVE1[2];
  75. __IO NU_PWM_CCR0_T CCR0;
  76. __IO NU_PWM_CCR2_T CCR2;
  77. __IO NU_REG_BITs CRLR0;
  78. __IO NU_REG_BITs CFLR0;
  79. __IO NU_REG_BITs CRLR1;
  80. __IO NU_REG_BITs CFLR1;
  81. __IO NU_REG_BITs CRLR2;
  82. __IO NU_REG_BITs CFLR2;
  83. __IO NU_REG_BITs CRLR3;
  84. __IO NU_REG_BITs CFLR3;
  85. __IO NU_REG_BITs CAPENR;
  86. __IO NU_PWM_POE_T POE;
  87. }NU_PWM_T;
  1. //----------------------------------------------------//
  2. #define PWM03s (*((NU_PWM_T *) PWMA_BASE))//定位全局结构变量PWM03s
  3. #define PWM47s (*((NU_PWM_T *) PWMB_BASE))//定位全局结构变量PWM47s
  4. //----------------------------------------------------//
  5. #define PWMx(x) ((NU_PWM_T *) PWMA_BASE + (x * 0x100000))
  6. //----------------------------------------------------//
  7. typedef volatile union
  8. {
  9. NU_REG Regs;
  10. UART_IER_T Bits;
  11. }NU_UART_IER_T;

  12. typedef volatile union
  13. {
  14. NU_REG Regs;
  15. UART_FCR_T Bits;
  16. }NU_UART_FCR_T;

  17. typedef volatile union
  18. {
  19. NU_REG Regs;
  20. UART_LCR_T Bits;
  21. }NU_UART_LCR_T;

  22. typedef volatile union
  23. {
  24. NU_REG Regs;
  25. UART_MCR_T Bits;
  26. }NU_UART_MCR_T;

  27. typedef volatile union
  28. {
  29. NU_REG Regs;
  30. UART_MSR_T Bits;
  31. }NU_UART_MSR_T;

  32. typedef volatile union
  33. {
  34. NU_REG Regs;
  35. UART_FSR_T Bits;
  36. }NU_UART_FSR_T;

  37. typedef volatile union
  38. {
  39. NU_REG Regs;
  40. UART_ISR_T Bits;
  41. }NU_UART_ISR_T;

  42. typedef volatile union
  43. {
  44. NU_REG Regs;
  45. UART_TOR_T Bits;
  46. }NU_UART_TOR_T;

  47. typedef volatile union
  48. {
  49. NU_REG Regs;
  50. UART_BAUD_T Bits;
  51. }NU_UART_BAUD_T;

  52. typedef volatile union
  53. {
  54. NU_REG Regs;
  55. UART_IRCR_T Bits;
  56. }NU_UART_IRCR_T;

  57. typedef volatile union
  58. {
  59. NU_REG Regs;
  60. UART_ALTCON_T Bits;
  61. }NU_UART_ALTCON_T;

  62. typedef volatile union
  63. {
  64. NU_REG Regs;
  65. UART_FUNSEL_T Bits;
  66. }NU_UART_FUNSEL_T;

  67. typedef struct
  68. {
  69. union{
  70. __IO NU_REG_BITs DATA;//接收发送数据
  71. __I NU_REG_BITs RBR;//接收数据缓存寄存器
  72. __O NU_REG_BITs THR;//发送保持寄存器
  73. };
  74. __IO NU_UART_IER_T IER;//中断使能寄存器
  75. __IO NU_UART_FCR_T FCR;//FIFO控制寄存器
  76. __IO NU_UART_LCR_T LCR;//Line控制寄存器
  77. __IO NU_UART_MCR_T MCR;//Modem控制寄存器
  78. __IO NU_UART_MSR_T MSR;//Modem状态寄存器
  79. __IO NU_UART_FSR_T FSR;//FIFO状态寄存器
  80. __IO NU_UART_ISR_T ISR;//中断状态寄存器
  81. __IO NU_UART_TOR_T TOR;//定时溢出寄存器
  82. __IO NU_UART_BAUD_T BAUD;//波特率分频寄存器
  83. __IO NU_UART_IRCR_T IRCR;//IrDA控制寄存器
  84. __IO NU_UART_ALTCON_T ALTCON;//LIN Break失败计数寄存器
  85. __IO NU_UART_FUNSEL_T FUNSEL;//功能选择寄存器
  86. }NU_UART_T;


zhuomuniao110 发表于 2016-3-22 17:15 | 显示全部楼层
  1. //----------------------------------------------------//
  2. #define UART0s (*((NU_UART_T *) UART0_BASE))//定位全局结构变量UART0s
  3. #define UART1s (*((NU_UART_T *) UART1_BASE))//定位全局结构变量UART0s
  4. #define UART2s (*((NU_UART_T *) UART2_BASE))//定位全局结构变量UART0s
  5. #define UART3s (*((NU_UART_T *) UART3_BASE))//定位全局结构变量UART0s
  6. //----------------------------------------------------//
  7. #define UARTx(x) ((NU_UART_T *) UART0_BASE + ((x & 1) * 0x100000) + ((x >> 1) * 0x104000))
  8. #define Ux(x) ((NU_UART_T *) UART0_BASE + ((x & 1) * 0x100000) + ((x >> 1) * 0x104000))
  9. //----------------------------------------------------//
  10. typedef enum
  11. {
  12. ADC_ADDR_RSLT = 0,//A/D转换结果
  13. ADC_ADDR_OVERRUN = 16,//结束运行标志位
  14. ADC_ADDR_VALID = 17//有效标志位
  15. }NU_ADC_ADDR_ENUM;

  16. typedef volatile union
  17. {
  18. NU_REG Regs;
  19. ADC_ADDR_T Bits;
  20. }NU_ADC_ADDR_T;

  21. typedef enum
  22. {
  23. ADC_ADCR_ADEN = 0,//A/D转换使能
  24. ADC_ADCR_ADIE = 1,//A/D中断使能
  25. ADC_ADCR_ADMD = 2,//A/D转换操作模式
  26. ADC_ADCR_TRGS = 4,//硬件触发源
  27. ADC_ADCR_TRGCOND = 6,//外部触发条件
  28. ADC_ADCR_TRGEN = 8,//外部触发使能
  29. ADC_ADCR_PTEN = 9,//PDMA 传送使能
  30. ADC_ADCR_DIFFEN = 10,//A/D差分输入模式使能
  31. ADC_ADCR_ADST = 11,//A/D转换开始
  32. ADC_ADCR_DMOF = 31
  33. }NU_ADC_ADCR_ENUM;

  34. typedef volatile union
  35. {
  36. NU_REG Regs;
  37. ADC_ADCR_T Bits;
  38. }NU_ADC_ADCR_T;

  39. typedef enum
  40. {
  41. ADC_ADCHER_CHEN0 = 0,//模拟输入通道0
  42. ADC_ADCHER_CHEN1 = 1,//模拟输入通道1
  43. ADC_ADCHER_CHEN2 = 2,//模拟输入通道2
  44. ADC_ADCHER_CHEN3 = 3,//模拟输入通道3
  45. ADC_ADCHER_CHEN4 = 4,//模拟输入通道4
  46. ADC_ADCHER_CHEN5 = 5,//模拟输入通道5
  47. ADC_ADCHER_CHEN6 = 6,//模拟输入通道6
  48. ADC_ADCHER_CHEN7 = 7,//模拟输入通道7
  49. ADC_ADCHER_PRESEL = 8 //模拟输入通道7选择位
  50. //00:模拟输入通道7 01:Bandgap(VBG)模拟输入
  51. //10:VTEMP模拟输入 11:模拟地
  52. }NU_ADC_ADCHER_ENUM;

  53. typedef volatile union
  54. {
  55. NU_REG Regs;
  56. ADC_ADCHER_T Bits;
  57. }NU_ADC_ADCHER_T;

  58. typedef enum
  59. {
  60. ADC_ADCMPR_CMPEN = 0, //比较使能
  61. ADC_ADCMPR_CMPIE = 1, //比较中断使能
  62. ADC_ADCMPR_CMPCOND = 2, //比较条件
  63. ADC_ADCMPR_CMPCH = 3, //Compare通道选择(000=选择通道0转换结果,111=选择通道7转换结果)
  64. ADC_ADCMPR_CMPMATCNT = 8, //比较匹配值
  65. ADC_ADCMPR_CMPD = 16 //比较数值
  66. }NU_ADC_ADCMPR_ENUM;

  67. typedef volatile union
  68. {
  69. NU_REG Regs;
  70. ADC_ADCMPR_T Bits;
  71. }NU_ADC_ADCMPR_T;

  72. typedef enum
  73. {
  74. ADC_ADSR_ADF = 0,//A/D转换结束标志位
  75. ADC_ADSR_CMPF0 = 1,//比较标志位
  76. ADC_ADSR_CMPF1 = 2,//较标志位
  77. ADC_ADSR_BUSY = 3,//BUSY/IDLE
  78. ADC_ADSR_CHANNEL = 4,//当前转换通道
  79. ADC_ADSR_VALID = 8,//数据有效标志位
  80. ADC_ADSR_OVERRUN = 16//结束运行标志位
  81. }NU_ADC_ADSR_ENUM;

  82. typedef volatile union
  83. {
  84. NU_REG Regs;
  85. ADC_ADSR_T Bits;
  86. }NU_ADC_ADSR_T;

  87. typedef enum
  88. {
  89. ADC_ADCALR_CALEN = 0,//自身校准功能使能
  90. ADC_ADCALR_CALDONE = 1 //校准完成标志(只读)
  91. }NU_ADC_ADCALR_ENUM;

  92. typedef volatile union
  93. {
  94. NU_REG Regs;
  95. ADC_ADCALR_T Bits;
  96. }NU_ADC_ADCALR_T;

  97. typedef enum
  98. {
  99. ADC_ADPDMA_AD_PDMA = 0 //ADC PDMA当前数据传输寄存器
  100. }NU_ADC_ADPDMA_ENUM;

  101. typedef volatile union
  102. {
  103. NU_REG Regs;
  104. ADC_ADPDMA_T Bits;
  105. }NU_ADC_ADPDMA_T;

  106. typedef struct
  107. {
  108. union{
  109. __I NU_ADC_ADDR_T ADDR[8];//A/D数据寄存器0~7
  110. struct{
  111. __I NU_ADC_ADDR_T ADDR0;//A/D数据寄存器0
  112. __I NU_ADC_ADDR_T ADDR1;//A/D数据寄存器1
  113. __I NU_ADC_ADDR_T ADDR2;//A/D数据寄存器2
  114. __I NU_ADC_ADDR_T ADDR3;//A/D数据寄存器3
  115. __I NU_ADC_ADDR_T ADDR4;//A/D数据寄存器4
  116. __I NU_ADC_ADDR_T ADDR5;//A/D数据寄存器5
  117. __I NU_ADC_ADDR_T ADDR6;//A/D数据寄存器6
  118. __I NU_ADC_ADDR_T ADDR7;//A/D数据寄存器7
  119. };
  120. };
  121. __IO NU_ADC_ADCR_T ADCR;//ADC控制寄存器
  122. __IO NU_ADC_ADCHER_T ADCHER;//A/D 通道使能
  123. union{
  124. __IO NU_ADC_ADCMPR_T ADCMPR[2];//A/D比较寄存器0,1
  125. struct{
  126. __IO NU_ADC_ADCMPR_T ADCMPR0;//A/D比较寄存器0
  127. __IO NU_ADC_ADCMPR_T ADCMPR1;//A/D比较寄存器1
  128. };
  129. };
  130. __IO NU_ADC_ADSR_T ADSR;//ADC状态寄存器
  131. __IO NU_ADC_ADCALR_T ADCALR;//A/D校准寄存器
  132. __I NU_REG RESERVE0;
  133. __I NU_REG RESERVE1;
  134. __IO NU_ADC_ADPDMA_T ADPDMA;//A/D PDMA当前数据传输寄存器
  135. }NU_ADC_T;
zhuomuniao110 发表于 2016-3-22 17:15 | 显示全部楼层
  1. //----------------------------------------------------//
  2. #define ADCs (*((NU_ADC_T *) ADC_BASE))//定位全局结构变量ADCs
  3. //----------------------------------------------------//
  4. #define ADCx ((NU_ADC_T *) ADC_BASE)
  5. //----------------------------------------------------//
  6. typedef enum
  7. {
  8. SYSCLK_PWRCON_XTL12M_EN = 0,//外部12MHz晶振控制
  9. SYSCLK_PWRCON_XTL32K_EN = 1,//外部32.768KHz晶振控制
  10. SYSCLK_PWRCON_OSC22M_EN = 2,//内部22MHz振荡器控制
  11. SYSCLK_PWRCON_OSC10K_EN = 3,//内部10KHz振荡器控制
  12. SYSCLK_PWRCON_PD_WU_DLY = 4,//使能唤醒延时计数器
  13. SYSCLK_PWRCON_PD_WU_INT_EN = 5,//掉电模式唤醒的中断使能
  14. SYSCLK_PWRCON_PD_WU_STS = 6,//芯片掉电唤醒状态标志
  15. SYSCLK_PWRCON_PWR_DOWN = 7,//激活或使能系统掉电模式
  16. SYSCLK_PWRCON_PD_WAIT_CPU = 8 //控制进入掉电模式的条件
  17. }NU_SYSCLK_PWRCON_ENUM;

  18. typedef volatile union
  19. {
  20. NU_REG Regs;
  21. SYSCLK_PWRCON_T Bits;
  22. }NU_SYSCLK_PWRCON_T;

  23. typedef enum
  24. {
  25. SYSCLK_AHBCLK_PDMA_EN = 1,//PDMA控制器时钟使能控制
  26. SYSCLK_AHBCLK_ISP_EN = 2,//Flash ISP控制器时钟使能控制
  27. SYSCLK_AHBCLK_EBI_EN = 3 //
  28. }NU_SYSCLK_AHBCLK_ENUM;

  29. typedef volatile union
  30. {
  31. NU_REG Regs;
  32. SYSCLK_AHBCLK_T Bits;
  33. }NU_SYSCLK_AHBCLK_T;

  34. typedef enum
  35. {
  36. SYSCLK_APBCLK_WDT_EN = 0,//Watch Dog时钟使能
  37. SYSCLK_APBCLK_RTC_EN = 1,//Real-Time-Clock APB接口时钟控制
  38. SYSCLK_APBCLK_TMR0_EN = 2,//Timer0时钟使能控制
  39. SYSCLK_APBCLK_TMR1_EN = 3,//Timer1时钟使能控制
  40. SYSCLK_APBCLK_TMR2_EN = 4,//Timer2时钟使能控制
  41. SYSCLK_APBCLK_TMR3_EN = 5,//Timer3时钟使能控制
  42. SYSCLK_APBCLK_FDIV_EN = 6,//分频器输出时钟使能控制
  43. SYSCLK_APBCLK_I2C0_EN = 8,//I2C0时钟使能控制
  44. SYSCLK_APBCLK_I2C1_EN = 9,//I2C1时钟使能控制
  45. SYSCLK_APBCLK_SPI0_EN = 12,//SPI0时钟使能控制
  46. SYSCLK_APBCLK_SPI1_EN = 13,//SPI1时钟使能控制
  47. SYSCLK_APBCLK_SPI2_EN = 14,//SPI2时钟使能控制
  48. SYSCLK_APBCLK_SPI3_EN = 15,//SPI3时钟使能控制
  49. SYSCLK_APBCLK_UART0_EN = 16,//UART0时钟使能控制
  50. SYSCLK_APBCLK_UART1_EN = 17,//UART1时钟使能控制
  51. SYSCLK_APBCLK_UART2_EN = 18,//UART2时钟使能控制
  52. SYSCLK_APBCLK_PWM01_EN = 20,//PWM_01时钟使能控制
  53. SYSCLK_APBCLK_PWM23_EN = 21,//PWM_23时钟使能控制
  54. SYSCLK_APBCLK_PWM45_EN = 22,//PWM_45时钟使能控制
  55. SYSCLK_APBCLK_PWM67_EN = 23,//PWM_67时钟使能控制
  56. SYSCLK_APBCLK_CAN0_EN = 24,//使能CAN线控制器0时钟控制
  57. SYSCLK_APBCLK_USBD_EN = 27,//USB FS设备控制器时钟使能控制
  58. SYSCLK_APBCLK_ADC_EN = 28,//使能ADC时钟控制
  59. SYSCLK_APBCLK_I2S_EN = 29,//I2S时钟使能控制
  60. SYSCLK_APBCLK_ACMP_EN = 30,//模拟比较器时钟使能控制
  61. SYSCLK_APBCLK_PS2_EN = 31//PS2时钟使能控制
  62. }NU_SYSCLK_APBCLK_ENUM;

  63. typedef volatile union
  64. {
  65. NU_REG Regs;
  66. SYSCLK_APBCLK_T Bits;
  67. }NU_SYSCLK_APBCLK_T;

  68. typedef enum
  69. {
  70. SYSCLK_CLKSTATUS_XTL12M_STB = 0,
  71. SYSCLK_CLKSTATUS_XTL32K_STB = 1,
  72. SYSCLK_CLKSTATUS_PLL_STB = 2,
  73. SYSCLK_CLKSTATUS_OSC10K_STB = 3,
  74. SYSCLK_CLKSTATUS_OSC22M_STB = 4,
  75. SYSCLK_CLKSTATUS_RESERVE0 = 5,
  76. SYSCLK_CLKSTATUS_CLK_SW_FAIL = 7
  77. }NU_SYSCLK_CLKSTATUS_ENUM;

  78. typedef volatile union
  79. {
  80. NU_REG Regs;
  81. SYSCLK_CLKSTATUS_T Bits;
  82. }NU_SYSCLK_CLKSTATUS_T;

  83. typedef enum
  84. {
  85. SYSCLK_CLKSEL0_HCLK_S = 0,
  86. SYSCLK_CLKSEL0_STCLK_S = 3
  87. }NU_SYSCLK_CLKSEL0_ENUM;

  88. typedef volatile union
  89. {
  90. NU_REG Regs;
  91. SYSCLK_CLKSEL0_T Bits;
  92. }NU_SYSCLK_CLKSEL0_T;

  93. typedef enum
  94. {
  95. SYSCLK_CLKSEL1_WDT_S = 0,//WDGCLK时钟源选择
  96. SYSCLK_CLKSEL1_ADC_S = 1,//ADC时钟源选择
  97. SYSCLK_CLKSEL1_TMR0_S = 8,//TIMER0时钟源选择
  98. SYSCLK_CLKSEL1_TMR1_S = 12,//TIMER1时钟源选择
  99. SYSCLK_CLKSEL1_TMR2_S = 16,//TIMER2时钟源选择
  100. SYSCLK_CLKSEL1_TMR3_S = 20,//TIMER3时钟源选择
  101. SYSCLK_CLKSEL1_UART_S = 24,//UART时钟源选择
  102. SYSCLK_CLKSEL1_CAN_S = 26,//CAN时钟源选择
  103. SYSCLK_CLKSEL1_PWM01_S = 28,//PWM1与PWM0的时钟源选择
  104. SYSCLK_CLKSEL1_PWM23_S = 30 //PWM3与PWM2的时钟源选择.
  105. }NU_SYSCLK_CLKSEL1_ENUM;

  106. typedef volatile union
  107. {
  108. NU_REG Regs;
  109. SYSCLK_CLKSEL1_T Bits;
  110. }NU_SYSCLK_CLKSEL1_T;

  111. typedef enum
  112. {
  113. SYSCLK_CLKDIV_HCLK_N = 0,//HCLK时钟频率=(HCLK时钟源频率)/(HCLK_N+1)
  114. SYSCLK_CLKDIV_USB_N = 4,//USB时钟频率=(PLL频率)/(USB_N+1)
  115. SYSCLK_CLKDIV_UART_N = 8,//UART时钟频率=(UART时钟源频率)/(UART_N+1)
  116. SYSCLK_CLKDIV_CAN_N = 12,//APU时钟频率=(CAN时钟源频率)/(CAN_N+1)
  117. SYSCLK_CLKDIV_ADC_N = 16,//ADC时钟频率=ADC时钟源频率/(ADC_N+1)
  118. SYSCLK_CLKDIV_CAN_N_EXT = 24//
  119. }NU_SYSCLK_CLKDIV_ENUM;

  120. typedef volatile union
  121. {
  122. NU_REG Regs;
  123. SYSCLK_CLKDIV_T Bits;
  124. }NU_SYSCLK_CLKDIV_T;

  125. typedef enum
  126. {
  127. SYSCLK_CLKSEL2_I2S_S = 0,//I2S时钟源选择
  128. SYSCLK_CLKSEL2_FRQDIV_S = 2,//时钟分频器时钟源选择
  129. SYSCLK_CLKSEL2_PWM45_S = 4,//PWM4与PWM5的时钟源选择
  130. SYSCLK_CLKSEL2_PWM67_S = 6 //PWM6与PWM7的时钟源选择
  131. }NU_SYSCLK_CLKSEL2_ENUM;

  132. typedef volatile union
  133. {
  134. NU_REG Regs;
  135. SYSCLK_CLKSEL2_T Bits;
  136. }NU_SYSCLK_CLKSEL2_T;

  137. typedef enum
  138. {
  139. SYSCLK_PLLCON_FB_DV = 0,//PLL反馈分频控制引脚
  140. SYSCLK_PLLCON_IN_DV = 9,//PLL输入分频控制引脚
  141. SYSCLK_PLLCON_OUT_DV = 14,//PLL输出分频控制引脚
  142. SYSCLK_PLLCON_PD = 16,//掉电模式
  143. SYSCLK_PLLCON_BP = 17,//PLL旁路控制
  144. SYSCLK_PLLCON_OE = 18,//PLL OE(FOUT enable)引脚控制
  145. SYSCLK_PLLCON_PLL_SRC = 19 //PLL时钟源选择
  146. }NU_SYSCLK_PLLCON_ENUM;

  147. typedef volatile union
  148. {
  149. NU_REG Regs;
  150. SYSCLK_PLLCON_T Bits;
  151. }NU_SYSCLK_PLLCON_T;


  152. typedef enum
  153. {
  154. SYSCLK_FRQDIV_FSEL = 0,//分频器输出频率选择位
  155. SYSCLK_FRQDIV_FDIV_EN = 4 //频率分频器使能位
  156. }NU_SYSCLK_FRQDIV_ENUM;

  157. typedef volatile union
  158. {
  159. NU_REG Regs;
  160. SYSCLK_FRQDIV_T Bits;
  161. }NU_SYSCLK_FRQDIV_T;

  162. typedef struct
  163. {
  164. __IO NU_SYSCLK_PWRCON_T PWRCON;//系统掉电控制寄存器
  165. __IO NU_SYSCLK_AHBCLK_T AHBCLK;//AHB设备时钟使能控制寄存器
  166. __IO NU_SYSCLK_APBCLK_T APBCLK;//APB设备时钟使能控制寄存器
  167. __IO NU_SYSCLK_CLKSTATUS_T CLKSTATUS;
  168. __IO NU_SYSCLK_CLKSEL0_T CLKSEL0;//时钟源选择控制寄存器0
  169. __IO NU_SYSCLK_CLKSEL1_T CLKSEL1;//时钟源选择控制寄存器1
  170. __IO NU_SYSCLK_CLKDIV_T CLKDIV;//时钟分频寄存器
  171. __IO NU_SYSCLK_CLKSEL2_T CLKSEL2;//时钟源选择控制寄存器2
  172. __IO NU_SYSCLK_PLLCON_T PLLCON;//PLL 控制寄存器
  173. __IO NU_SYSCLK_FRQDIV_T FRQDIV;//频率分频器控制寄存器
  174. }NU_SYSCLK_T;
  175. //----------------------------------------------------//
  176. #define SYSCLKs (*((NU_SYSCLK_T *) SYSCLK_BASE))//定位全局结构变量SYSCLKs
  177. //----------------------------------------------------//
  178. #define SYSCLKx ((NU_SYSCLK_T *) SYSCLK_BASE)
  179. //----------------------------------------------------//
  180. typedef enum
  181. {
  182. GCR_RSTSRC_RSTS_POR = 0,//RSTS_POR标志位由POR模块的”复位信号”置1
  183. GCR_RSTSRC_RSTS_RESET = 1,//RSTS_PAD标志位由/RESET脚的”复位信号”置1
  184. GCR_RSTSRC_RSTS_WDT = 2,//RSTS_WDG标志位由看门狗模块的”复位信号”置1
  185. GCR_RSTSRC_RSTS_LVR = 3,//RSTS_LVR标志位由低压复位模块的”复位信号”置1
  186. GCR_RSTSRC_RSTS_BOD = 4,//RSTS_BOD标志位由欠压检测模块的”复位信号”置1
  187. GCR_RSTSRC_RSTS_MCU = 5,//RSTS_SYS由来自MCU Cortex_M0的“复位信号“置位
  188. GCR_RSTSRC_RSTS_CPU = 7 //RSTS_CPU标志由硬件置位
  189. }NU_GCR_RSTSRC_ENUM;

  190. typedef volatile union
  191. {
  192. NU_REG Regs;
  193. GCR_RSTSRC_T Bits;
  194. }NU_GCR_RSTSRC_T;

  195. typedef enum
  196. {
  197. GCR_IPRSTC1_CHIP_RST = 0,//CHIP复位
  198. GCR_IPRSTC1_CPU_RST = 1,//CPU内核复位
  199. GCR_IPRSTC1_PDMA_RST = 2,//PDMA控制器复位
  200. GCR_IPRSTC1_EBI_RST = 3 //EBI接口复位
  201. }NU_GCR_IPRSTC1_ENUM;

  202. typedef volatile union
  203. {
  204. NU_REG Regs;
  205. GCR_IPRSTC1_T Bits;
  206. }NU_GCR_IPRSTC1_T;

  207. typedef enum
  208. {
  209. GCR_IPRSTC2_GPIO_RST = 1,//GPIO控制器复位
  210. GCR_IPRSTC2_TMR0_RST = 2,//Timer0控制器复位
  211. GCR_IPRSTC2_TMR1_RST = 3,//Timer1控制器复位
  212. GCR_IPRSTC2_TMR2_RST = 4,//Timer2控制器复位
  213. GCR_IPRSTC2_TMR3_RST = 5,//Timer3控制器复位
  214. GCR_IPRSTC2_I2C0_RST = 8,//I2C0控制器复位
  215. GCR_IPRSTC2_I2C1_RST = 9,//I2C1控制器复位
  216. GCR_IPRSTC2_SPI0_RST = 12,//SPI0控制器复位
  217. GCR_IPRSTC2_SPI1_RST = 13,//SPI1控制器复位
  218. GCR_IPRSTC2_SPI2_RST = 14,//SPI2控制器复位
  219. GCR_IPRSTC2_SPI3_RST = 15,//SPI3控制器复位
  220. GCR_IPRSTC2_UART0_RST = 16,//UART0控制器复位
  221. GCR_IPRSTC2_UART1_RST = 17,//UART1控制器复位
  222. GCR_IPRSTC2_UART2_RST = 18,//UART2控制器复位
  223. GCR_IPRSTC2_PWM03_RST = 20,//PWM03控制器复位
  224. GCR_IPRSTC2_PWM47_RST = 21,//PWM47控制器复位
  225. GCR_IPRSTC2_ACMP_RST = 22,//模拟比较器控制器复位
  226. GCR_IPRSTC2_PS2_RST = 23,//PS2控制器复位
  227. GCR_IPRSTC2_CAN0_RST = 24,//CAN0控制器复位
  228. GCR_IPRSTC2_USBD_RST = 27,//USB设备控制器复位
  229. GCR_IPRSTC2_ADC_RST = 28,//ADC控制器复位
  230. GCR_IPRSTC2_I2S_RST = 29,//I2S控制器复位
  231. }NU_GCR_IPRSTC2_ENUM;

  232. typedef volatile union
  233. {
  234. NU_REG Regs;
  235. GCR_IPRSTC2_T Bits;
  236. }NU_GCR_IPRSTC2_T;

  237. typedef enum
  238. {
  239. GCR_CPR_HPE = 0 //CHIP复位
  240. }NU_GCR_CPR_ENUM;


  241. typedef volatile union
  242. {
  243. NU_REG Regs;
  244. GCR_CPR_T Bits;
  245. }NU_GCR_CPR_T;

  246. typedef enum
  247. {
  248. GCR_BODCR_BOD_EN = 0,//欠压检测使能
  249. GCR_BODCR_BOD_VL = 1,//欠压检测Threshold电压选择
  250. GCR_BODCR_BOD_RSTEN = 3,//欠压复位使能
  251. GCR_BODCR_BOD_INTF = 4,//欠压检测中断标志
  252. GCR_BODCR_BOD_LPM = 5,//低压模式下的欠压检测
  253. GCR_BODCR_BOD_OUT = 6,//欠压检测输出的状态位
  254. GCR_BODCR_LVR_EN = 7//低压复位使能
  255. }NU_GCR_BODCR_ENUM;

  256. typedef volatile union
  257. {
  258. NU_REG Regs;
  259. GCR_BODCR_T Bits;
  260. }NU_GCR_BODCR_T;

  261. typedef enum
  262. {
  263. GCR_TEMPCR_VTEMP_EN = 0,//温度传感器使能
  264. }NU_GCR_TEMPCR_ENUM;

  265. typedef struct
  266. {
  267. __IO uint32_t VTEMP_EN:1;//温度传感器使能
  268. __I uint32_t RESERVE1:31;
  269. }GCR_TEMPCR_Bits;

  270. typedef volatile union
  271. {
  272. NU_REG Regs;
  273. GCR_TEMPCR_Bits Bits;
  274. }NU_GCR_TEMPCR_T;


  275. typedef enum
  276. {
  277. GCR_GPAMFP_ADC0 = 0, //PA.0 Pin功能选择ADC0
  278. GCR_GPAMFP_ADC1_AD12 = 1, //PA.1 Pin功能选择ADC1
  279. GCR_GPAMFP_ADC2_AD11 = 2, //PA.2 Pin功能选择ADC2
  280. GCR_GPAMFP_ADC3_AD10 = 3, //PA.3 Pin功能选择ADC3
  281. GCR_GPAMFP_ADC4_AD9 = 4, //PA.4 Pin功能选择ADC4
  282. GCR_GPAMFP_ADC5_AD8 = 5, //PA.5 Pin功能选择ADC5
  283. GCR_GPAMFP_ADC6_AD7 = 6, //PA.6 Pin功能选择ADC6
  284. GCR_GPAMFP_ADC7_SS21_AD6 = 7,//PA.7 Pin功能选择ADC7
  285. GCR_GPAMFP_I2C0_SDA = 8, //PA.8 Pin功能选择I2C0_SDA
  286. GCR_GPAMFP_I2C0_SCL = 9, //PA.9 Pin功能选择I2C0_SCL
  287. GCR_GPAMFP_I2C1_SDA_nWR = 10,//PA.10 Pin功能选择I2C1_SDA
  288. GCR_GPAMFP_I2C1_SCL_nRD = 11,//PA.11 Pin功能选择I2C1_SCL
  289. GCR_GPAMFP_PWM0_AD13 = 12, //PA.12 Pin功能选择PWM0
  290. GCR_GPAMFP_PWM1_AD14 = 13, //PA.13 Pin功能选择PWM1
  291. GCR_GPAMFP_PWM2_AD15 = 14, //PA.14 Pin功能选择PWM2
  292. GCR_GPAMFP_PWM3_I2SMCLK = 15,//PA.15 Pin功能选择PWM3
  293. GCR_GPAMFP_SCHMITT = 16, //PA[15:0]I/O史密特触发输入使能
  294. }NU_GCR_GPAMFP_ENUM;

  295. typedef volatile union
  296. {
  297. NU_REG Regs;
  298. GCR_GPAMFP_T Bits;
  299. }NU_GCR_GPAMFP_T;

  300. typedef enum
  301. {
  302. GCR_GPBMFP_UART0_RX = 0,//PB.0 Pin功能选择
  303. GCR_GPBMFP_UART0_TX = 1,//PB.1 Pin功能选择
  304. GCR_GPBMFP_UART0_nRTS_nWRL = 2,//PB.2 Pin功能选择
  305. GCR_GPBMFP_UART0_nCTS_nWRH = 3,//PB.3 Pin功能选择
  306. GCR_GPBMFP_UART1_RX = 4,//PB.4 Pin功能选择
  307. GCR_GPBMFP_UART1_TX = 5,//PB.5 Pin功能选择
  308. GCR_GPBMFP_UART1_nRTS_ALE = 6,//PB.6 Pin功能选择
  309. GCR_GPBMFP_UART1_nCTS_nCS = 7,//PB.7 Pin功能选择
  310. GCR_GPBMFP_TM0 = 8,//PB.8 Pin功能选择
  311. GCR_GPBMFP_TM1_SS11 = 9,//PB.9 Pin功能选择
  312. GCR_GPBMFP_TM2_SS01 = 10,//PB.10 Pin功能选择
  313. GCR_GPBMFP_TM3_PWM4 = 11,//PB.11 Pin功能选择
  314. GCR_GPBMFP_CPO0_CLKO_AD0 = 12,//PB.12 Pin功能选择
  315. GCR_GPBMFP_CPO1_AD1 = 13,//PB.13 Pin功能选择
  316. GCR_GPBMFP_INT1_SS31 = 14,//PB.14 Pin功能选择
  317. GCR_GPBMFP_INT0 = 15,//PB.15 Pin功能选择
  318. GCR_GPBMFP_SCHMITT = 16//PB[15:0]I/O史密特触发输入使能
  319. }NU_GCR_GPBMFP_ENUM;

  320. typedef volatile union
  321. {
  322. NU_REG Regs;
  323. GCR_GPBMFP_T Bits;
  324. }NU_GCR_GPBMFP_T;


  325. typedef enum
  326. {
  327. GCR_GPCMFP_SPI0_SS0_I2SLRCLK = 0,//PC.0 Pin功能选择
  328. GCR_GPCMFP_SPI0_CLK_I2SBCLK = 1,//PC.0 Pin功能选择
  329. GCR_GPCMFP_SPI0_MISO0_I2SDI = 2,//PC.0 Pin功能选择
  330. GCR_GPCMFP_SPI0_MOSI0_I2SDO = 3,//PC.0 Pin功能选择
  331. GCR_GPCMFP_SPI0_MISO1 = 4,//PC.0 Pin功能选择
  332. GCR_GPCMFP_SPI0_MOSI1 = 5,//PC.0 Pin功能选择
  333. GCR_GPCMFP_CPP0_AD4 = 6,//PC.0 Pin功能选择
  334. GCR_GPCMFP_CPN0_AD5 = 7,//PC.0 Pin功能选择
  335. GCR_GPCMFP_SPI1_SS0_MCLK = 8,//PC.0 Pin功能选择
  336. GCR_GPCMFP_SPI1_CLK = 9,//PC.0 Pin功能选择
  337. GCR_GPCMFP_SPI1_MISO0 = 10,//PC.0 Pin功能选择
  338. GCR_GPCMFP_SPI1_MOSI0 = 11,//PC.0 Pin功能选择
  339. GCR_GPCMFP_SPI1_MISO1 = 12,//PC.0 Pin功能选择
  340. GCR_GPCMFP_SPI1_MOSI1 = 13,//PC.0 Pin功能选择
  341. GCR_GPCMFP_CPP1_AD2 = 14,//PC.0 Pin功能选择
  342. GCR_GPCMFP_CPN1_AD3 = 15,//PC.0 Pin功能选择
  343. GCR_GPCMFP_SCHMITT = 16,//PC[15:0]I/O史密特触发输入使能
  344. }NU_GCR_GPCMFP_ENUM;

  345. typedef volatile union
  346. {
  347. NU_REG Regs;
  348. GCR_GPCMFP_T Bits;
  349. }NU_GCR_GPCMFP_T;


  350. typedef enum
  351. {
  352. GCR_GPDMFP_SPI2_SS0 = 0,//PD.0 Pin功能选择
  353. GCR_GPDMFP_SPI2_CLK_SPI0_SS1 = 1,//PD.1 Pin功能选择
  354. GCR_GPDMFP_SPI2_MISO0_SPI0_MISO1 = 2,//PD.2 Pin功能选择
  355. GCR_GPDMFP_SPI2_MOSI0_SPI0_MOSI1 = 3,//PD.3 Pin功能选择
  356. GCR_GPDMFP_SPI2_MISO1 = 4,//PD.4 Pin功能选择
  357. GCR_GPDMFP_SPI2_MOSI1 = 5,//PD.5 Pin功能选择
  358. GCR_GPDMFP_CAN0_RX = 6,//PD.6 Pin功能选择
  359. GCR_GPDMFP_CAN0_TX = 7,//PD.7 Pin功能选择
  360. GCR_GPDMFP_SPI3_SS0 = 8,//PD.8 Pin功能选择
  361. GCR_GPDMFP_SPI3_CLK = 9,//PD.9 Pin功能选择
  362. GCR_GPDMFP_SPI3_MISO0 = 10,//PD.10 Pin功能选择
  363. GCR_GPDMFP_SPI3_MOSI0 = 11,//PD.11 Pin功能选择
  364. GCR_GPDMFP_SPI3_MISO1 = 12,//PD.12 Pin功能选择
  365. GCR_GPDMFP_SPI3_MOSI1 = 13,//PD.13 Pin功能选择
  366. GCR_GPDMFP_UART2_RX = 14,//PD.14 Pin功能选择
  367. GCR_GPDMFP_UART2_TX = 15,//PD.15 Pin功能选择
  368. GCR_GPDMFP_SCHMITT = 16,//PD[15:0]I/O史密特触发输入使能
  369. }NU_GCR_GPDMFP_ENUM;

  370. typedef volatile union
  371. {
  372. NU_REG Regs;
  373. GCR_GPDMFP_T Bits;
  374. }NU_GCR_GPDMFP_T;

  375. typedef enum
  376. {
  377. GCR_GPEMFP_PWM6 = 0,//PE.0 Pin功能选择
  378. GCR_GPEMFP_PWM7 = 1,//PE.1 Pin功能选择
  379. GCR_GPEMFP_PWM5 = 5,//PE.6 Pin功能选择
  380. GCR_GPEMFP_SCHMITT = 16 //PE[15:0]I/O史密特触发输入使能
  381. }NU_GCR_GPEMFP_ENUM;

  382. typedef volatile union
  383. {
  384. NU_REG Regs;
  385. GCR_GPEMFP_T Bits;
  386. }NU_GCR_GPEMFP_T;

  387. typedef enum
  388. {
  389. GCR_ALTMFP_PB10_S01 = 0,//PB10_S01与GPB_MFP[10]决定GPB.10的功能
  390. GCR_ALTMFP_PB9_S11 = 1,//PB9_S11与GPB_MFP[9]决定PB.9的功能
  391. GCR_ALTMFP_PA7_S21 = 2,//PA7_S21与GPA_MFP[7]决定PA.7的功能
  392. GCR_ALTMFP_PB14_S31 = 3,//PB14_S31与GPB_MFP[14]决定PB.14的功能
  393. GCR_ALTMFP_PB11_PWM4 = 4,//PB11_PWM4与GPB_MFP[11]决定PB.11的功能
  394. GCR_ALTMFP_PC0_I2SLRCLK = 5,//PC0_I2SLRCLK与GPC_MFP[0]决定PC.0的功能
  395. GCR_ALTMFP_PC1_I2SBCLK = 6,//PC1_I2SBCLK与GPC_MFP[1 决定PC.1的功能
  396. GCR_ALTMFP_PC2_I2SDI = 7,//PC2_I2SDI与GPC_MFP[2]决定PC.2的功能
  397. GCR_ALTMFP_PC3_I2SDO = 8,//PC2_I2SDO与GPC_MFP[3]决定PC.3的功能
  398. GCR_ALTMFP_PA15_I2SMCLK = 9,//PA15_I2SMCLK与GPA_MFP[15]决定PA.15的功能
  399. GCR_ALTMFP_PB12_CLKO = 10,//PB12_CLKO与GPB_MFP[12]决定PB.12的功能
  400. GCR_ALTMFP_EBI_EN = 11,
  401. GCR_ALTMFP_EBI_MCLK_EN = 12, /* GPC8 */
  402. GCR_ALTMFP_EBI_WRL_EN =13, /* GPB2 */
  403. GCR_ALTMFP_EBI_WRH_EN = 14, /* GPB3 */
  404. GCR_ALTMFP_EBI_HB_EN = 15
  405. }NU_GCR_ALTMFP_ENUM;

  406. typedef volatile union
  407. {
  408. NU_REG Regs;
  409. GCR_ALTMFP_T Bits;
  410. }NU_GCR_ALTMFP_T;

  411. typedef struct
  412. {
  413. __IO NU_REG_BITs PDID;
  414. __IO NU_GCR_RSTSRC_T RSTSRC;//系统管理器控制寄存器
  415. __IO NU_GCR_IPRSTC1_T IPRSTC1;//IP复位控制寄存器1
  416. __IO NU_GCR_IPRSTC2_T IPRSTC2;//IP复位控制寄存器2
  417. __IO NU_GCR_CPR_T CPR;
  418. __I NU_REG RESERVE0;
  419. __IO NU_GCR_BODCR_T BODCR;//欠压检测控制寄存器
  420. __IO NU_GCR_TEMPCR_T TEMPCR;//温度传感器控制寄存器
  421. __I NU_REG RESERVE1;
  422. __IO NU_REG_BITs PORCR;//上电复位控制寄存器
  423. __I NU_REG RESERVE2[2];
  424. __IO NU_GCR_GPAMFP_T GPAMFP;//多功能GPIOA控制寄存器
  425. __IO NU_GCR_GPBMFP_T GPBMFP;//多功能GPIOB控制寄存器
  426. __IO NU_GCR_GPCMFP_T GPCMFP;//多功能GPIOC控制寄存器
  427. __IO NU_GCR_GPDMFP_T GPDMFP;//多功能GPIOD控制寄存器
  428. __IO NU_GCR_GPEMFP_T GPEMFP;//多功能GPIOE控制寄存器
  429. __I NU_REG RESERVE3[3];
  430. __IO NU_GCR_ALTMFP_T ALTMFP;//可选多功能引脚控制寄存器
  431. __I NU_REG RESERVE4[43];
  432. __IO NU_REG_BITs REGLOCK;//寄存器锁定键地址寄存器
  433. __I NU_REG RESERVE5[3];
  434. __IO NU_REG_BITs RCADJ;//RC 校验控制寄存器
  435. }NU_GCR_T;


zhuomuniao110 发表于 2016-3-22 17:17 | 显示全部楼层
  1. //----------------------------------------------------//
  2. #define SYSs (*((NU_GCR_T *) GCR_BASE))//定位全局结构变量SYSs
  3. //----------------------------------------------------//
  4. #define SYSx ((NU_GCR_T *) GCR_BASE)
  5. //----------------------------------------------------//
  6. typedef enum
  7. {
  8. GCR_INTSRC_INTSRC = 0//
  9. }NU_GCR_INTSRC_ENUM;

  10. typedef volatile union
  11. {
  12. NU_REG Regs;
  13. GCR_INTSRC_T Bits;
  14. }NU_GCR_INTSRC_T;

  15. typedef enum
  16. {
  17. GCR_NMISEL_NMISEL = 0,//Cortex-M0的NMI 中断源可以从interrupt[31:0]中选择一个
  18. GCR_NMISEL_INT_TEST = 7//
  19. }NU_GCR_NMISEL_ENUM;

  20. typedef volatile union
  21. {
  22. NU_REG Regs;
  23. GCR_NMISEL_T Bits;
  24. }NU_GCR_NMISEL_T;

  25. typedef struct
  26. {
  27. __I NU_GCR_INTSRC_T INTSRC[32];//MCU IRQ0~31 (BOD) 中断源识别
  28. __IO NU_GCR_NMISEL_T NMISEL;//NMI 中断源选择控制寄存器
  29. __IO NU_REG_BITs MCUIRQ;//MCU IRQ 号识别寄存器
  30. }NU_GCR_INT_T;

  31. //----------------------------------------------------//
  32. #define SYSINTs (*((NU_GCR_INT_T *) INT_BASE))//定位全局结构变量GCR_INTs
  33. //----------------------------------------------------//
  34. #define SYSINTx ((NU_GCR_INT_T *) INT_BASE)
  35. //----------------------------------------------------//
  36. typedef enum
  37. {
  38. WDT_WTCR_WTR = 0,//看门狗定时器重置
  39. WDT_WTCR_WTRE = 1,//看门狗定时器复位使能
  40. WDT_WTCR_WTRF = 2,//看门狗定时器复位标志
  41. WDT_WTCR_WTIF = 3,//看门狗定时器中断标志
  42. WDT_WTCR_WTWKE = 4,//看门狗定时器唤醒功能使能位
  43. WDT_WTCR_WTWKF = 5,//看门狗定时器唤醒标志
  44. WDT_WTCR_WTIE = 6,//看门狗定时器中断使能
  45. WDT_WTCR_WTE = 7,//看门狗定时器使能
  46. WDT_WTCR_WTIS = 8,//看门狗定时器间隔选择
  47. //000:69.33us 001:72.53us 010:85.33us 011:170.67us
  48. //100:426.67us 101:1.45ms 110:5.55ms 111:21.93ms
  49. }NU_WDT_WTCR_ENUM;

  50. typedef volatile union
  51. {
  52. NU_REG Regs;
  53. WDT_WTCR_T Bits;
  54. }NU_WDT_WTCR_T;

  55. typedef struct
  56. {
  57. __IO NU_WDT_WTCR_T WTCR;//看门狗定时器控制寄存器
  58. }NU_WDT_T;
  59. //----------------------------------------------------//
  60. #define WDTs (*((NU_WDT_T *) WDT_BASE))//定位全局结构变量WDTs
  61. //----------------------------------------------------//
  62. #define WDTx ((NU_WDT_T *) WDT_BASE)
  63. //----------------------------------------------------//
  64. typedef enum
  65. {
  66. RTC_AER_AER = 0,//RTC寄存器写入使能密码(只写)
  67. RTC_AER_ENF = 16//RTC 寄存器写入使能标志(只读)
  68. }NU_RTC_AER_ENUM;

  69. typedef volatile union
  70. {
  71. NU_REG Regs;
  72. RTC_AER_T Bits;
  73. }NU_RTC_AER_T;

  74. typedef enum
  75. {
  76. RTC_FCR_INTEGER_32761 = 0,
  77. RTC_FCR_INTEGER_32762 = 1,
  78. RTC_FCR_INTEGER_32763 = 2,
  79. RTC_FCR_INTEGER_32764 = 3,
  80. RTC_FCR_INTEGER_32765 = 4,
  81. RTC_FCR_INTEGER_32766 = 5,
  82. RTC_FCR_INTEGER_32767 = 6,
  83. RTC_FCR_INTEGER_32768 = 7,
  84. RTC_FCR_INTEGER_32769 = 8,
  85. RTC_FCR_INTEGER_32770 = 9,
  86. RTC_FCR_INTEGER_32771 = 10,
  87. RTC_FCR_INTEGER_32772 = 11,
  88. RTC_FCR_INTEGER_32773 = 12,
  89. RTC_FCR_INTEGER_32774 = 13,
  90. RTC_FCR_INTEGER_32775 = 14,
  91. RTC_FCR_INTEGER_32776 = 15
  92. }NU_RTC_FCR_INTEGER_ENUM;

  93. typedef enum
  94. {
  95. RTC_FCR_FRACTION = 0,//分数部分(公式=(分数部分值)x60)
  96. RTC_FCR_INTEGER = 8 //整数部分
  97. }NU_RTC_FCR_ENUM;

  98. typedef volatile union
  99. {
  100. NU_REG Regs;
  101. RTC_FCR_T Bits;
  102. }NU_RTC_FCR_T;

  103. typedef enum
  104. {
  105. RTC_TLR_SEC1 = 0,//秒个位
  106. RTC_TLR_SEC10 = 4,//秒十位
  107. RTC_TLR_MIN1 = 8,//分个位
  108. RTC_TLR_MIN10 = 12,//分十位
  109. RTC_TLR_HR1 = 16,//小时个位
  110. RTC_TLR_HR10 = 20//小时十位
  111. }NU_RTC_TLR_ENUM;

  112. typedef volatile union
  113. {
  114. NU_REG Regs;
  115. RTC_TLR_T Bits;
  116. }NU_RTC_TLR_T;

  117. typedef enum
  118. {
  119. RTC_CLR_DAY1 = 0,//日位
  120. RTC_CLR_DAY10 = 4,//日十位
  121. RTC_CLR_MON1 = 8,//月个位
  122. RTC_CLR_MON10 = 12,//月十位
  123. RTC_CLR_YEAR1 = 16,//年个位
  124. RTC_CLR_YEAR10 = 20//年十位
  125. }NU_RTC_CLR_ENUM;

  126. typedef volatile union
  127. {
  128. NU_REG Regs;
  129. RTC_CLR_T Bits;
  130. }NU_RTC_CLR_T;

  131. typedef enum
  132. {
  133. RTC_TSSR_HR24 = 0//(1)24-小时/(0)12-小时模式选择(带AM /PM 指示)
  134. }NU_RTC_TSSR_ENUM;

  135. typedef volatile union
  136. {
  137. NU_REG Regs;
  138. RTC_TSSR_T Bits;
  139. }NU_RTC_TSSR_T;

  140. typedef enum
  141. {
  142. RTC_DWR_DWR = 0//一周日期寄存器(0:星期天 1:星期一 6:星期六)
  143. }NU_RTC_DWR_ENUM;

  144. typedef volatile union
  145. {
  146. NU_REG Regs;
  147. RTC_DWR_T Bits;
  148. }NU_RTC_DWR_T;

  149. typedef enum
  150. {
  151. RTC_TAR_SEC1 = 0,//秒个位
  152. RTC_TAR_SEC10 = 4,//秒十位
  153. RTC_TAR_MIN1 = 8,//分个位
  154. RTC_TAR_MIN10 = 12,//分十位
  155. RTC_TAR_HR1 = 16,//小时个位
  156. RTC_TAR_HR10 = 20//小时十位
  157. }NU_RTC_TAR_ENUM;

  158. typedef volatile union
  159. {
  160. NU_REG Regs;
  161. RTC_TLR_T Bits;
  162. }NU_RTC_TAR_T;

  163. typedef enum
  164. {
  165. RTC_CAR_DAY1 = 0,//日位
  166. RTC_CAR_DAY10 = 4,//日十位
  167. RTC_CAR_MON1 = 8,//月个位
  168. RTC_CAR_MON10 = 12,//月十位
  169. RTC_CAR_YEAR1 = 16,//年个位
  170. RTC_CAR_YEAR10 = 20//年十位
  171. }NU_RTC_CAR_ENUM;

  172. typedef volatile union
  173. {
  174. NU_REG Regs;
  175. RTC_CLR_T Bits;
  176. }NU_RTC_CAR_T;

  177. typedef enum
  178. {
  179. RTC_LIR_LIR = 0//按年分割指示寄存器(只读)
  180. }NU_RTC_LIR_ENUM;

  181. typedef volatile union
  182. {
  183. NU_REG Regs;
  184. RTC_LIR_T Bits;
  185. }NU_RTC_LIR_T;

  186. typedef enum
  187. {
  188. RTC_RIER_AIER = 0,//闹钟中断使能
  189. RTC_RIER_TIER = 1 //时钟节拍中断使能
  190. }NU_RTC_RIER_ENUM;

  191. typedef volatile union
  192. {
  193. NU_REG Regs;
  194. RTC_RIER_T Bits;
  195. }NU_RTC_RIER_T;

  196. typedef enum
  197. {
  198. RTC_RIIR_AI = 0,//RTC闹钟中断标志
  199. RTC_RIIR_TI = 1 //RTC时钟节拍中断标志
  200. }NU_RTC_RIIR_ENUM;

  201. typedef volatile union
  202. {
  203. NU_REG Regs;
  204. RTC_RIIR_T Bits;
  205. }NU_RTC_RIIR_T;

  206. typedef enum
  207. {
  208. RTC_TTR_TWKE_1 = 0,//时钟节拍1
  209. RTC_TTR_TWKE_1_2 = 1,//时钟节拍1/2
  210. RTC_TTR_TWKE_1_4 = 2,//时钟节拍1/4
  211. RTC_TTR_TWKE_1_8 = 3,//时钟节拍1/8
  212. RTC_TTR_TWKE_1_16 = 4,//时钟节拍1/16
  213. RTC_TTR_TWKE_1_32 = 5,//时钟节拍1/32
  214. RTC_TTR_TWKE_1_64 = 6,//时钟节拍1/64
  215. RTC_TTR_TWKE_1_128 = 7,//时钟节拍1/128
  216. }NU_RTC_TTR_TWKE_ENUM;

  217. typedef enum
  218. {
  219. RTC_TTR_TTR = 0,//时钟节拍寄存器
  220. RTC_TTR_TWKE = 3 //RTC定时器唤醒CPU使能位
  221. }NU_RTC_TTR_ENUM;

  222. typedef volatile union
  223. {
  224. NU_REG Regs;
  225. RTC_TTR_T Bits;
  226. }NU_RTC_TTR_T;

  227. typedef enum
  228. {
  229. RTC_PWRCON_PTOUT = 0,//
  230. RTC_PWRCON_PWROFF = 16//
  231. }NU_RTC_PWRCON_ENUM;

  232. typedef volatile union
  233. {
  234. NU_REG Regs;
  235. RTC_PWRCON_T Bits;
  236. }NU_RTC_PWRCON_T;

  237. typedef struct
  238. {
  239. __IO NU_REG_BITs INIR;//RTC复位寄存器
  240. __IO NU_RTC_AER_T AER;//RTC读写使能寄存器
  241. __IO NU_RTC_FCR_T FCR;//RTC频率补偿寄存器
  242. __IO NU_RTC_TLR_T TLR;//时间载入寄存器
  243. __IO NU_RTC_CLR_T CLR;//日历载入寄存器
  244. __IO NU_RTC_TSSR_T TSSR;//时间格式选择寄存器
  245. __IO NU_RTC_DWR_T DWR;//一周日期寄存器
  246. __IO NU_RTC_TAR_T TAR;//时间闹钟寄存器
  247. __IO NU_RTC_CAR_T CAR;//日历闹钟寄存器
  248. __IO NU_RTC_LIR_T LIR;//年分割指示寄存器
  249. __IO NU_RTC_RIER_T RIER;//RTC中断使能寄存器
  250. __IO NU_RTC_RIIR_T RIIR;//RTC中断指示寄存器
  251. __IO NU_RTC_TTR_T TTR;//RTC时钟节拍寄存器
  252. __IO NU_RTC_PWRCON_T PWRCON;
  253. }NU_RTC_T;
  254. //----------------------------------------------------//
  255. #define RTCs (*((NU_RTC_T *) RTC_BASE))//定位全局结构变量RTCs
  256. //----------------------------------------------------//
  257. #define RTCx ((NU_RTC_T *) RTC_BASE)
  258. //----------------------------------------------------//
  259. typedef enum
  260. {
  261. FMC_ISPCON_ISPEN = 0,//
  262. FMC_ISPCON_BS = 0,//
  263. FMC_ISPCON_CFGUEN = 0,//
  264. FMC_ISPCON_LDUEN = 0,//
  265. FMC_ISPCON_ISPFF = 0,//
  266. FMC_ISPCON_SWRST = 0,//
  267. FMC_ISPCON_PT = 0,//
  268. FMC_ISPCON_ET = 0 //
  269. }NU_FMC_ISPCON_ENUM;

  270. typedef volatile union
  271. {
  272. NU_REG Regs;
  273. FMC_ISPCON_T Bits;
  274. }NU_FMC_ISPCON_T;

  275. typedef struct
  276. {
  277. FMC_ISPCON_T ISPCON;
  278. FMC_ISPADR_T ISPADR;
  279. FMC_ISPDAT_T ISPDAT;
  280. FMC_ISPCMD_T ISPCMD;
  281. FMC_ISPTRG_T ISPTRG;
  282. FMC_DFBADR_T DFBADR;
  283. FMC_FATCON_T FATCON;
  284. }NU_FMC_T;
  1. //----------------------------------------------------//
  2. #define FMCs (*((NU_FMC_T *) FMC_BASE))//定位全局结构变量FMCs
  3. //----------------------------------------------------//
  4. #define FMCx ((NU_FMC_T *) FMC_BASE)
  5. //----------------------------------------------------//
  6. typedef struct
  7. {
  8. PS2_CON_T PS2CON;
  9. union{
  10. PS2_DATA_T TXDATA[4];
  11. struct{
  12. PS2_DATA_T TXDATA0;
  13. PS2_DATA_T TXDATA1;
  14. PS2_DATA_T TXDATA2;
  15. PS2_DATA_T TXDATA3;
  16. };
  17. };
  18. PS2_DATA_T RXDATA;
  19. PS2_STATUS_T STATUS;
  20. PS2_INTID_T INTID;
  21. }NU_PS2_T;
  1. //----------------------------------------------------//
  2. #define PS2s (*((NU_PS2_T *) PS2_BASE))//定位全局结构变量PS2s
  3. //----------------------------------------------------//
  4. #define PS2x ((NU_PS2_T *) PS2_BASE)
  5. //----------------------------------------------------//
  6. typedef struct
  7. {
  8. CAN_OPMODE_T OPMODE;
  9. CAN_CMD_T CMD;
  10. CAN_BUSSTS_T BUSSTS;
  11. CAN_INTR_T INTR;

  12. CAN_INTEN_T INTEN;
  13. CAN_BTIMR_T BTIMR;
  14. union{
  15. CAN_RESERVE_T PROTECT[2];
  16. struct{
  17. CAN_RESERVE_T PROTECT_0;
  18. CAN_RESERVE_T PROTECT_1;
  19. };
  20. };

  21. CAN_ERRCR_T ERRCR;
  22. CAN_RESERVE_T PROTECT1;
  23. CAN_RECNTR_T RECNTR;
  24. CAN_TECNTR_T
  25. TECNTR;

  26. CAN_TXFINFO_T TXFINFO;
  27. CAN_TXIDR_T TXIDR;
  28. union{
  29. CAN_TXDATA_T TXDATA[2];
  30. struct{
  31. CAN_TXDATA_T TXDATA0;
  32. CAN_TXDATA_T TXDATA1;
  33. };
  34. };

  35. CAN_RXFINFO_T RXFINFO;
  36. CAN_RXIDR_T RXIDR;
  37. CAN_RXDATA_T RX_DATA[2];
  38. CAN_ACR_T ACR;
  39. CAN_AMR_T AMR;
  40. }NU_CAN_T;
  1. //----------------------------------------------------//
  2. #define CANs (*((NU_CAN_T *) CAN_BASE))//定位全局结构变量CANs
  3. //----------------------------------------------------//
  4. #define CANx ((NU_CAN_T *) CAN_BASE)
  5. //----------------------------------------------------//
  6. typedef struct
  7. {
  8. USBD_INTEN_T INTEN;
  9. USBD_INTSTS_T INTSTS;
  10. USBD_FADDR_T FADDR;
  11. USBD_EPSTS_T EPSTS;
  12. USBD_ATTR_T ATTR;
  13. USBD_FLDET_T FLDET;
  14. USBD_BUFSEG_T BUFSEG;
  15. uint32_t RESERVE0;
  16. union{
  17. USBD_EP_T EP[6];
  18. struct{
  19. USBD_EP_T EP0;
  20. USBD_EP_T EP1;
  21. USBD_EP_T EP2;
  22. USBD_EP_T EP3;
  23. USBD_EP_T EP4;
  24. USBD_EP_T EP5;
  25. };
  26. };
  27. uint32_t RESERVE1[4];
  28. USBD_DRVSE0_T DRVSE0;
  29. uint32_t RESERVE2[4];
  30. USBD_PDMA_T PDMA;
  31. }NU_USBD_T;
  1. //----------------------------------------------------//
  2. #define USBDs (*((NU_USBD_T *) USBD_BASE))//定位全局结构变量USBDs
  3. //----------------------------------------------------//
  4. #define USBDx ((NU_USBD_T *) USBD_BASE)
  5. //----------------------------------------------------//
  6. typedef struct
  7. {
  8. I2S_CON_T CON;
  9. I2S_CLKDIV_T CLKDIV;
  10. I2S_IE_T IE;
  11. I2S_STATUS_T STATUS;
  12. I2S_TXFIFO_T TXFIFO;
  13. I2S_RXFIFO_T RXFIFO;
  14. }NU_I2S_T;

  15. //----------------------------------------------------//
  16. #define I2Ss (*((NU_I2S_T *) I2S_BASE))//定位全局结构变量I2Ss
  17. //----------------------------------------------------//
  18. #define I2Sx ((NU_I2S_T *) I2S_BASE)
  19. //----------------------------------------------------//
  20. typedef struct
  21. {
  22. EBI_CON_T CON;
  23. EBI_TIME_T TIME;
  24. }NU_EBI_T;

  25. //----------------------------------------------------//
  26. #define EBIs (*((NU_EBI_T *) EBI_BASE))//定位全局结构变量EBIs
  27. //----------------------------------------------------//
  28. #define EBIx ((NU_EBI_T *) EBI_BASE)
  29. //----------------------------------------------------//
  30. typedef struct
  31. {
  32. __I NU_REG_BITs ISER;//IRQ0~IRQ31设置使能控制寄存器
  33. __I NU_REG RESERVED0[31];
  34. __I NU_REG_BITs ICER;//IRQ0~IRQ31清使能控制寄存器
  35. __I NU_REG RSERVED1[31];
  36. __I NU_REG_BITs ISPR;//IRQ0~IRQ31设置挂起控制寄存器
  37. __I NU_REG RESERVED2[31];
  38. __I NU_REG_BITs ICPR;//IRQ0~IRQ31清挂起控制寄存器
  39. __I NU_REG RESERVED3[31];
  40. __I NU_REG RESERVED4[64];
  41. union{
  42. __I NU_REG_BITs IPR[8];//IRQ0~IRQ31优先级控制寄存器
  43. struct{
  44. __I NU_REG_BITs IPR0;//IRQ0~IRQ3优先级控制寄存器
  45. __I NU_REG_BITs IPR1;//IRQ4~IRQ7优先级控制寄存器
  46. __I NU_REG_BITs IPR2;//IRQ8~IRQ11优先级控制寄存器
  47. __I NU_REG_BITs IPR3;//IRQ12~IRQ15优先级控制寄存器
  48. __I NU_REG_BITs IPR4;//IRQ16~IRQ19优先级控制寄存器
  49. __I NU_REG_BITs IPR5;//IRQ20~IRQ23优先级控制寄存器
  50. __I NU_REG_BITs IPR6;//IRQ24~IRQ27优先级控制寄存器
  51. __I NU_REG_BITs IPR7;//IRQ28~IRQ31优先级控制寄存器
  52. };
  53. };
  54. }NU_NVIC_Type;
  1. //----------------------------------------------------//
  2. #define NVICs (*((NU_NVIC_Type *) NVIC_BASE))//定位全局结构变量NVICs
  3. //----------------------------------------------------//
  4. #define NVICx ((NU_NVIC_Type *) NVIC_BASE)
  5. //----------------------------------------------------//
  6. typedef enum
  7. {
  8. SCB_CPUID_REVISION = 0,//值为0x0
  9. SCB_CPUID_PARTNO = 4,//值为0xC20
  10. SCB_CPUID_PART = 16,//ARMv6-M值为0xC
  11. SCB_CPUID_IMPLEMENTER = 24,//由ARM分配执行码(ARM=0x41)
  12. }NU_SCB_CPUID_ENUM;

  13. typedef struct
  14. {
  15. __I NU_REG REVISION:4;
  16. __I NU_REG PARTNO:12;
  17. __I NU_REG PART:4;
  18. __I NU_REG RESERVE:4;
  19. __I NU_REG IMPLEMENTER:8;
  20. }SCB_CPUID_T;

  21. typedef volatile union
  22. {
  23. NU_REG Regs;
  24. SCB_CPUID_T Bits;
  25. }NU_SCB_CPUID_T;

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

  38. typedef struct
  39. {
  40. __I NU_REG VECTACTIVE:9;
  41. __I NU_REG VECTPENDING:9;
  42. __I NU_REG ISRPENDING:1;
  43. __I NU_REG ISRPREEMPT:1;
  44. __I NU_REG RESERVE1:1;
  45. __O NU_REG PENDSTCLR:1;
  46. __IO NU_REG PENDSTSET:1;
  47. __I NU_REG PENDSVCLR:1;
  48. __IO NU_REG PENDSVSET:1;
  49. __I NU_REG RESERVE2:2;
  50. __IO NU_REG NMIPENDSET:1;
  51. }SCB_ICSR_T;

  52. typedef volatile union
  53. {
  54. NU_REG Regs;
  55. SCB_ICSR_T Bits;
  56. }NU_SCB_ICSR_T;

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

  63. typedef struct
  64. {
  65. __I NU_REG RESERVE0:1;
  66. __I NU_REG SLEEPONEXIT:1;
  67. __I NU_REG SLEEPDEEP:1;
  68. __I NU_REG RESERVE1:1;
  69. __O NU_REG SEVONPEND:1;
  70. __I NU_REG RESERVE2:27;
  71. }SCB_SCR_T;

  72. typedef volatile union
  73. {
  74. NU_REG Regs;
  75. SCB_ICSR_T Bits;
  76. }NU_SCB_SCR_T;

  77. typedef struct
  78. {
  79. __I NU_SCB_CPUID_T CPUID;//CPUID Base 寄存器
  80. __IO NU_SCB_ICSR_T ICSR;//中断控制状态寄存器
  81. __I NU_REG RESERVED0;
  82. __IO NU_REG_BITs AIRCR;
  83. __IO NU_SCB_SCR_T SCR;//系统控制寄存器
  84. __IO NU_REG_BITs CCR;
  85. __I NU_REG RESERVED1;
  86. union{
  87. __IO NU_REG_BITs SHP[2];//系统处理器优先级寄存器2和3
  88. struct{
  89. __IO NU_REG_BITs SHP2;//系统处理器优先级寄存器2
  90. __IO NU_REG_BITs SHP3;//系统处理器优先级寄存器3
  91. };
  92. };
  93. __IO NU_REG_BITs SHCSR;
  94. __I NU_REG RESERVED2[2];
  95. __IO NU_REG_BITs DFSR;
  96. }NU_SCB_Type;


zhuomuniao110 发表于 2016-3-22 17:18 | 显示全部楼层
  1. //----------------------------------------------------//
  2. #define SCBs (*((NU_SCB_Type *) SCB_BASE))//定位全局结构变量SCBs
  3. //----------------------------------------------------//
  4. #define SCBx ((NU_SCB_Type *) SCB_BASE)
  5. //----------------------------------------------------//
  6. typedef enum
  7. {
  8. SysTick_CTRL_TICKENABLE = 0,//
  9. SysTick_CTRL_TICKINT = 1,//
  10. SysTick_CTRL_CLKSRC = 2,//
  11. SysTick_CTRL_COUNTFLAG = 16//
  12. }NU_SysTick_CTRL_ENUM;

  13. typedef struct
  14. {
  15. __IO NU_REG TICKENABLE:1;
  16. __IO NU_REG TICKINT:1;
  17. __IO NU_REG CLKSRC:1;
  18. __IO NU_REG RESERVE0:13;
  19. __IO NU_REG COUNTFLAG:1;
  20. __IO NU_REG RESERVE1:15;
  21. }SysTick_CTRL_T;

  22. typedef volatile union
  23. {
  24. NU_REG Regs;
  25. SysTick_CTRL_T Bits;
  26. }NU_SysTick_CTRL_T;

  27. typedef enum
  28. {
  29. SysTick_LOAD_RELOAD = 0,//当计数器达到0时,值加载到当前值寄存器
  30. }NU_SysTick_LOAD_ENUM;

  31. typedef struct
  32. {
  33. __IO NU_REG RELOAD:24;
  34. __IO NU_REG RESERVE:8;
  35. }SysTick_LOAD_T;

  36. typedef volatile union
  37. {
  38. NU_REG Regs;
  39. SysTick_LOAD_T Bits;
  40. }NU_SysTick_LOAD_T;

  41. typedef enum
  42. {
  43. SysTick_VAL_CURRENT = 0,//当前计数值,为采样时刻的计数器的值
  44. }NU_SysTick_VAL_ENUM;

  45. typedef struct
  46. {
  47. __IO NU_REG CURRENT:24;
  48. __IO NU_REG RESERVE:8;
  49. }SysTick_VAL_T;

  50. typedef volatile union
  51. {
  52. NU_REG Regs;
  53. SysTick_VAL_T Bits;
  54. }NU_SysTick_VAL_T;

  55. typedef struct
  56. {
  57. __IO NU_SysTick_CTRL_T CTRL;//SysTick控制与状态
  58. __IO NU_SysTick_LOAD_T LOAD;//SysTick重新加载值
  59. __IO NU_SysTick_VAL_T VAL;//SysTick当前值
  60. __I NU_REG_BITs CALIB;
  61. }NU_SysTick_Type;
  62. //----------------------------------------------------//
  63. #define SysTicks (*((NU_SysTick_Type *) SysTick_BASE))//定位全局结构变量SysTicks
  64. //----------------------------------------------------//
  65. #define SysTickx ((NU_SysTick_Type *) SysTick_BASE)
  66. //----------------------------------------------------//
  67. typedef struct
  68. {
  69. __IO NU_REG_BITs DHCSR;
  70. __O NU_REG_BITs DCRSR;
  71. __IO NU_REG_BITs DCRDR;
  72. __IO NU_REG_BITs DEMCR;
  73. }NU_CoreDebug_Type;
  74. //----------------------------------------------------//
  75. #define CoreDebugs (*((NU_CoreDebug_Type *) CoreDebug_BASE))//定位全局结构变量CoreDebugs
  76. //----------------------------------------------------//
  77. #define CoreDebugx ((NU_CoreDebug_Type *) CoreDebug_BASE)
  78. //----------------------------------------------------//



  79. #ifdef __cplusplus
  80. }
  81. #endif

  82. #endif /* __NUC1xxcfg_H__ */


  83. 应用:Smpl_HIDTransfer.c
  84. /*---------------------------------------------------------------------------------------------------------*/
  85. /*                                                                                                         */
  86. /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                         */
  87. /*                                                                                                         */
  88. /*---------------------------------------------------------------------------------------------------------*/
  89. #include <stdio.h>
  90. #include "NUC1xxcfg.h"

  91. #include "Driver\DrvGPIO.h"
  92. #include "Driver\DrvSYS.h"
  93. #include "Driver\DrvUART.h"
  94. #include "Driver\DrvUSB.h"
  95. #include "Driver\DrvSPI.h"
  96. #include "Driver\DrvPDMA.h"
  97. #define DEBUG 0

  98. #define        TEST_LENGTH        64        /* length */
  99. uint8_t SrcArray[TEST_LENGTH];
  100. uint8_t DestArray[TEST_LENGTH];

  101. extern int32_t HID_MainProcess(void);

  102. void Delay(uint32_t delayCnt)
  103. {
  104.     while(delayCnt--)
  105.     {
  106.         __NOP();
  107.         __NOP();
  108.     }
  109. }
  110. ///////////////////////////////////////////////////////////////////////////
  111. //SPIDMA初始化
  112. void SPIPDMAInit(void)
  113. {
  114. STR_PDMA_T sPDMA;  
  115. uint32_t  SPIPort;
  116.         /* -------------------------------------------- */
  117.     /* Configure PDMA Channel 0 to receive SPI2 Rx0 */
  118.         /* -------------------------------------------- */
  119.         /* SPI Port = SPI0 Rx0 */
  120. //        SPIPort = SPI0_BASE + 0x10;
  121.         SPIPort = (uint32_t)&SPI0s.RX[0].Regs;
  122.     /* PDMA Init */
  123.     DrvPDMA_Init();
  124.         /* PDMA Setting */
  125.         DrvPDMA_SetCHForAPBDevice(eDRVPDMA_CHANNEL_0, eDRVPDMA_SPI0, eDRVPDMA_READ_APB);
  126.         /* CH0 RX Setting */
  127.         sPDMA.sSrcCtrl.u32Addr                         = SPIPort;
  128.     sPDMA.sDestCtrl.u32Addr                 = (uint32_t)DestArray;   
  129.         sPDMA.u8TransWidth                                 = eDRVPDMA_WIDTH_8BITS;
  130.         sPDMA.u8Mode                                         = eDRVPDMA_MODE_APB2MEM;//SPI->RAM
  131.         sPDMA.sSrcCtrl.eAddrDirection         = eDRVPDMA_DIRECTION_FIXED;
  132.         sPDMA.sDestCtrl.eAddrDirection         = eDRVPDMA_DIRECTION_INCREMENTED;
  133.         sPDMA.i32ByteCnt                = TEST_LENGTH;  
  134.         DrvPDMA_Open(eDRVPDMA_CHANNEL_0, &sPDMA);
  135.         
  136.     /* -------------------------------------------- */
  137.     /* Configure PDMA Channel 1 to receive SPI2 Tx0 */
  138.         /* -------------------------------------------- */
  139.         /* SPI Port = SPI0 Tx0 */
  140. //        SPIPort = SPI0_BASE + 0x20;
  141.         SPIPort = (uint32_t)&SPI0s.TX[0].Regs;
  142.         /* PDMA Setting */
  143.         DrvPDMA_SetCHForAPBDevice(eDRVPDMA_CHANNEL_1, eDRVPDMA_SPI0, eDRVPDMA_WRITE_APB);
  144.         /* CH0 TX Setting */
  145.         sPDMA.sSrcCtrl.u32Addr                         = (uint32_t)SrcArray;
  146.     sPDMA.sDestCtrl.u32Addr                 = SPIPort;   
  147.         sPDMA.u8TransWidth                                 = eDRVPDMA_WIDTH_8BITS;
  148.         sPDMA.u8Mode                                         = eDRVPDMA_MODE_MEM2APB;//RAM->SPI
  149.         sPDMA.sSrcCtrl.eAddrDirection         = eDRVPDMA_DIRECTION_INCREMENTED;
  150.         sPDMA.sDestCtrl.eAddrDirection         = eDRVPDMA_DIRECTION_FIXED;
  151.         sPDMA.i32ByteCnt                = TEST_LENGTH;  
  152.         DrvPDMA_Open(eDRVPDMA_CHANNEL_1, &sPDMA);
  153. }

  154. //SPI接口初始化
  155. void SPIInit(void)
  156. {
  157.     DrvSYS_SetIPClock(E_SYS_SPI0_CLK,1);
  158.     DrvGPIO_InitFunction(E_FUNC_SPI0); // enable SPI funztion and pin
  159.         DrvSPI_Open(eDRVSPI_PORT0, eDRVSPI_MASTER, eDRVSPI_TYPE2, 8,FALSE);
  160.         DrvSPI_SetSlaveSelectActiveLevel(eDRVSPI_PORT0, eDRVSPI_ACTIVE_HIGH_RISING);
  161.         DrvSPI_SetEndian(eDRVSPI_PORT0, eDRVSPI_MSB_FIRST);
  162. //        DrvSPI_DisableAutoSS(eDRVSPI_PORT0);
  163.         DrvSPI_EnableAutoSS(eDRVSPI_PORT0, eDRVSPI_SS0);
  164. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0,  80000,  80000);
  165. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 120000, 120000);
  166.         DrvSPI_SetClockFreq(eDRVSPI_PORT0, 180000, 180000);
  167. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 200000, 200000);
  168. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 220000, 220000);
  169. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 240000, 240000);
  170. //        DrvSPI_SetClockFreq(eDRVSPI_PORT0, 300000, 300000);
  171. }

  172. //SPI接口读写数据
  173. uint32_t SPIReadWrite(uint32_t TxData)
  174. {
  175. uint32_t RxData;
  176. //        DrvSPI_SetSS(eDRVSPI_PORT0, eDRVSPI_SS0);
  177. //    SPI0s.SSR.Bits.SSR = eDRVSPI_SS0;

  178. //        DrvSPI_SingleWrite(eDRVSPI_PORT0, &TxData);
  179. //        SPI0s.TX[0].Regs = TxData;
  180.         SPI0s.TX0.Regs = TxData;
  181.         SPI0s.CNTRL.Bits.GO_BUSY = 1;

  182. //        while (DrvSPI_IsBusy(eDRVSPI_PORT0)) {}
  183.         while(SPI0s.CNTRL.Bits.GO_BUSY);


  184. //        DrvSPI_ClrSS(eDRVSPI_PORT0, eDRVSPI_SS0);         
  185. //        SPI0s.SSR.Bits.SSR = eDRVSPI_NONE;
  186.         
  187. //        DrvSPI_DumpRxRegister(eDRVSPI_PORT0, &RxData, 1);
  188. //        RxData = SPI0s.RX[0].Regs;
  189.         RxData = SPI0s.RX0.Regs;
  190.         return RxData;
  191. }

  192. //SPI接口系统初始化
  193. uint32_t SPISysInit(void)
  194. {
  195. uint32_t i, flag = 0;
  196.         for (i = 0; i < 8; i++)
  197.         {
  198.                 SPIReadWrite(250);        
  199.         }

  200.         for (i = 0; i < 250; i++)
  201.         {
  202.                 if (SPIReadWrite(0x88) == 0x88)
  203.                 {
  204.                         flag = 1;
  205.                         break;
  206.                 }
  207.         }
  208.         return flag;
  209. }

  210. //SPI接口读出FLASH命令
  211. uint32_t SPIReadFlashCommand(uint32_t num)
  212. {
  213. uint32_t i, flag = 0;
  214. uint8_t str[] = "\x55\xaa\x40";
  215.         str[2] |= num;
  216.         for (i = 0; i < 3; i ++)
  217.         {
  218.                 SPIReadWrite((uint32_t)str[i]);
  219.         }
  220.         if (SPIReadWrite(0x55) == 0xaa)
  221.         {
  222.                 flag = 1;
  223.         }
  224.         return flag;
  225. }

  226. //SPI接口读出FLASH命令
  227. void SPIReadFlashData(uint8_t *data)
  228. {
  229. uint32_t i;
  230.         for (i = 0; i < 64; i ++)
  231.         {
  232.                 data[i] = SPIReadWrite(0x55555555);
  233.         }
  234.         return;
  235. }

  236. //SPI接口PDMA读出FLASH命令
  237. void SPIDMAReadFlashData(uint8_t *data)
  238. {

  239. //        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_0));
  240.         while(PDMA0s.CSR.Bits.TRIG_EN);
  241. //        PDMA0->DAR = (uint32_t)data;
  242.         PDMA0s.DAR.Regs = (uint32_t)data;

  243.         /* Trigger PDMA specified Channe0 */
  244. //        DrvPDMA_CHEnableTransfer(eDRVPDMA_CHANNEL_0);
  245.     PDMA0s.CSR.Regs |= (1 << PDMA_CSR_PDMACEN) | (1 << PDMA_CSR_TRIG_EN);


  246.           // enable SPI PDMA
  247. //        DrvSPI_SetPDMA(eDRVSPI_PORT0, eDRVSPI_RX_DMA, TRUE);
  248. //        SPI0s.DMA.Bits.RX_DMA_GO = TRUE;

  249. //        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_1));
  250.         while(PDMA1s.CSR.Bits.TRIG_EN);

  251. //        PDMA1->SAR = (uint32_t)SrcArray;
  252.         PDMA1s.SAR.Regs = (uint32_t)SrcArray;

  253.         /* Trigger PDMA specified Channel */
  254. //        DrvPDMA_CHEnableTransfer(eDRVPDMA_CHANNEL_1);
  255.     PDMA1s.CSR.Regs |= (1 << PDMA_CSR_PDMACEN) | (1 << PDMA_CSR_TRIG_EN);

  256.           // enable SPI PDMA
  257. //        DrvSPI_SetPDMA(eDRVSPI_PORT0, eDRVSPI_TX_DMA, TRUE);
  258. //        SPI0s.DMA.Bits.TX_DMA_GO = TRUE;

  259.         SPI0s.DMA.Regs = (1 << SPI_DMA_TX_DMA_GO) | (1 << SPI_DMA_RX_DMA_GO);
  260. ///        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_0));
  261.         return;
  262. }

  263. //SPI接口写入FLASH命令
  264. uint32_t SPIWriteFlashCommand(uint32_t num)
  265. {
  266. uint32_t i, flag = 0;
  267. uint8_t str[] = "\x55\xaa\x80";
  268. uint8_t ch;
  269.         str[2] |= num;
  270.         for (i = 0; i < 3; i ++)
  271.         {
  272.                 ch = SPIReadWrite((uint32_t)str[i]);
  273.         }
  274.         if (ch == 0x55)
  275.         {
  276.                 flag = 1;
  277.         }
  278.         return flag;
  279. }


  280. //SPI接口写入FLASH命令
  281. void SPIWriteFlashData(uint8_t *data)
  282. {
  283. uint32_t i;
  284.         for (i = 0; i < 64; i ++)
  285.         {
  286.                 SPIReadWrite((uint32_t)data[i]);
  287.         }
  288.         return;
  289. }

  290. //SPI接口PDMA写入FLASH命令
  291. void SPIDMAWriteFlashData(uint8_t *data)
  292. {
  293. //        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_1));
  294.         while(PDMA1s.CSR.Bits.TRIG_EN);

  295. //        PDMA1->SAR = (uint32_t)data;
  296.         PDMA1s.SAR.Regs = (uint32_t)data;

  297.         /* Trigger PDMA specified Channel */
  298. //        DrvPDMA_CHEnableTransfer(eDRVPDMA_CHANNEL_1);
  299.     PDMA1s.CSR.Regs |= (1 << PDMA_CSR_PDMACEN) | (1 << PDMA_CSR_TRIG_EN);

  300.           // enable SPI PDMA
  301. //        DrvSPI_SetPDMA(eDRVSPI_PORT0, eDRVSPI_TX_DMA, TRUE);
  302.         SPI0s.DMA.Bits.TX_DMA_GO = TRUE;

  303. //        DrvSPI_SetGo(eDRVSPI_PORT0);
  304. ///        while(DrvPDMA_IsCHBusy(eDRVPDMA_CHANNEL_1));

  305.         return;
  306. }

  307. //SPI接口擦除FLASH
  308. uint32_t SPIEraseFlash(uint32_t num)//0~31,32,0x30,0x3f
  309. {
  310. uint32_t i, flag = 0;
  311. uint8_t str[] = "\x55\xaa\x00";
  312.         if (num <= 0x3f)
  313.         {
  314.                 str[2] = (uint8_t)num;
  315.                 for (i = 0; i < 3; i ++)
  316.                 {
  317.                         SPIReadWrite((uint32_t)str[i]);
  318.                 }
  319.                 for (i = 0; i < 250; i++)
  320.                 {
  321.                         if (SPIReadWrite(0x99) >= 0xc0)
  322.                         {
  323.                                 for (i = 0; i < 2500; i++)//等待擦除结束
  324.                                 {
  325.                                         if (SPIReadWrite(0x99) < 0x80)
  326.                                         {
  327.                                                 for (i = 0; i < 250; i++)
  328.                                                 {
  329.                                                         if (SPIReadWrite(0x66) == str[2])
  330.                                                         {
  331.                                                                 flag = 1;
  332.                                                                 break;
  333.                                                         }
  334.                                                 }
  335.                                                 break;
  336.                                         }
  337.                                 }
  338.                                 break;
  339.                         }
  340.                 }
  341.         }
  342.         return flag;
  343. }

  344. //SPI接口芯片测试
  345. uint32_t SPIChipTest(void)
  346. {
  347. uint32_t i, flag = 0;
  348.         for (i = 0; i < 8; i ++)
  349.         {
  350.                 if (SPIReadWrite(0xcc) == 0x03)
  351.                 {
  352.                         flag = 1;
  353.                         break;
  354.                 }
  355.         }
  356.         return flag;
  357. }

zhuomuniao110 发表于 2016-3-22 17:19 | 显示全部楼层

  1. ///////////////////////////////////////////////////////////////////////////

  2. /*---------------------------------------------------------------------------------------------------------*/
  3. /* Main Function */
  4. /*---------------------------------------------------------------------------------------------------------*/
  5. int32_t main (void)
  6. {
  7. extern uint32_t SystemFrequency;
  8. uint32_t i;//, j;
  9. uint8_t FlashData[64];

  10. #ifdef DEBUG
  11. STR_UART_T sParam;

  12. /* Set UART Pin */
  13. DrvGPIO_InitFunction(E_FUNC_UART0);

  14. /* UART Setting */
  15. sParam.u32BaudRate = 115200;
  16. sParam.u8cDataBits = DRVUART_DATABITS_8;
  17. sParam.u8cStopBits = DRVUART_STOPBITS_1;
  18. sParam.u8cParity = DRVUART_PARITY_NONE;
  19. sParam.u8cRxTriggerLevel= DRVUART_FIFO_1BYTES;

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

  22. /* Set UART Configuration */
  23. DrvUART_Open(UART_PORT0,&sParam);
  24. #endif

  25. UNLOCKREG();

  26. SYSCLK->PWRCON.XTL12M_EN = 1;

  27. /* Waiting for XTAL stable */
  28. Delay(1000);

  29. /* Enable PLL */
  30. SYSCLK->PLLCON.OE = 0;
  31. DrvSYS_SetPLLMode(0);
  32. Delay(1000);

  33. /* Switch to PLL clock */
  34. DrvSYS_SelectHCLKSource(2);

  35. Delay(100);

  36. /* The PLL must be 48MHz x N times when using USB */
  37. // SystemCoreClockUpdate();
  38. for (i = 0; i < sizeof(SrcArray); i ++)
  39. {
  40. SrcArray[i] = 0x55;
  41. }
  42. SPIInit();
  43. if (SPISysInit())
  44. {
  45. __NOP();
  46. }
  47. SPIPDMAInit();
  48. /*
  49. while(1)
  50. {
  51. for (i = 0; i < sizeof(SrcArray); i ++)
  52. {
  53. SrcArray[i] = i;
  54. FlashData[i] = 0;
  55. }
  56. SPIDMAReadFlashData(FlashData);
  57. __NOP();
  58. }
  59. */
  60. #ifdef DEBUG
  61. printf("NUC100 USB HID\n");
  62. #endif

  63. /* Execute HID process */
  64. HID_MainProcess();

  65. ////
  66. /*
  67. while(1)
  68. {
  69. if (SPISysInit())
  70. {
  71. __NOP();
  72. }
  73. if (SPIEraseFlash(0x30))
  74. {
  75. __NOP();
  76. }
  77. if (SPISysInit())
  78. {
  79. __NOP();
  80. }
  81. if (SPIReadFlashCommand(0x30))
  82. {
  83. __NOP();
  84. }
  85. SPIDMAReadFlashData(FlashData);
  86. __NOP();
  87. for (i = 0; i < sizeof(FlashData); i ++)
  88. {
  89. FlashData[i] = i;
  90. }
  91. if (SPISysInit())
  92. {
  93. __NOP();
  94. }
  95. if (SPIWriteFlashCommand(0x30))
  96. {
  97. __NOP();
  98. }
  99. SPIDMAWriteFlashData(FlashData);
  100. __NOP();
  101. if (SPISysInit())
  102. {
  103. __NOP();
  104. }
  105. if (SPIReadFlashCommand(0x30))
  106. {
  107. __NOP();
  108. }
  109. SPIDMAReadFlashData(FlashData);
  110. __NOP();
  111. }

  112. SPIInit();
  113. if (SPISysInit())
  114. {
  115. __NOP();
  116. }
  117. SPIPDMAInit();
  118. if (SPIChipTest())
  119. {
  120. __NOP();
  121. }
  122. for (i = 0; i < sizeof(SrcArray); i ++)
  123. {
  124. SrcArray[i] = 0x55;
  125. }
  126. for (i = 0; i < sizeof(FlashData); i ++)
  127. {
  128. FlashData[i] = i + 0x30;
  129. }
  130. if (SPIEraseFlash(0))
  131. {
  132. __NOP();
  133. }
  134. if (SPIChipTest())
  135. {
  136. __NOP();
  137. }
  138. SPIWriteFlashCommand(0);
  139. SPIDMAWriteFlashData(FlashData);
  140. // SPIWriteFlashData(FlashData);
  141. if (SPISysInit())
  142. {
  143. __NOP();
  144. }
  145. if (SPIChipTest())
  146. {
  147. __NOP();
  148. }
  149. __NOP();
  150. __NOP();
  151. __NOP();

  152. */
  153. /*
  154. for (i = 0; i < sizeof(FlashData); i ++)
  155. {
  156. FlashData[i] = i + 0x30;
  157. }
  158. if (SPIChipTest())
  159. {
  160. __NOP();
  161. }
  162. if (SPIWriteFlashCommand(0x3f))
  163. {
  164. for (i = 0; i < 512; i ++)
  165. {
  166. SPIWriteFlashData(FlashData);
  167. }
  168. __NOP();
  169. }
  170. if (SPIChipTest())
  171. {
  172. __NOP();
  173. }
  174. if (SPIReadFlashCommand(0x3f))
  175. {
  176. for (i = 0; i < 512; i ++)
  177. {
  178. SPIReadFlashData(FlashData);
  179. }
  180. __NOP();
  181. }
  182. */
  183. /*
  184. if (SPIEraseFlash(0x30))
  185. {
  186. __NOP();
  187. }
  188. if (SPIEraseFlash(0x3f))
  189. {
  190. __NOP();
  191. }

  192. for (i = 0; i < 33; i ++)
  193. {
  194. if (SPIEraseFlash(i))
  195. {
  196. __NOP();
  197. }
  198. }

  199. if (SPISysInit())
  200. {
  201. __NOP();
  202. }
  203. if (SPIEraseFlash(0x3f))
  204. {
  205. __NOP();
  206. }
  207. if (SPIWriteFlashCommand(0x3f))
  208. {
  209. for (i = 0; i < 512; i ++)
  210. {
  211. SPIWriteFlashData(FlashData);
  212. }
  213. }
  214. if (SPISysInit())
  215. {
  216. __NOP();
  217. }
  218. if (SPIEraseFlash(0x30))
  219. {
  220. __NOP();
  221. }
  222. for (i = 0; i < 13; i ++)
  223. {
  224. if (SPIWriteFlashCommand(i + 0x30))
  225. {
  226. for (j = 0; j < 96; j ++)
  227. {
  228. SPIWriteFlashData(FlashData);
  229. }
  230. __NOP();
  231. }
  232. }
  233. for (i = 0; i < 33; i ++)
  234. {
  235. if (SPISysInit())
  236. {
  237. __NOP();
  238. }
  239. if (SPIEraseFlash(i))
  240. {
  241. __NOP();
  242. }
  243. if (SPIWriteFlashCommand(i))
  244. {
  245. for (j = 0; j < 8192; j ++)
  246. {
  247. SPIWriteFlashData(FlashData);
  248. }
  249. __NOP();
  250. }
  251. }
  252. if (SPIChipTest())
  253. {
  254. __NOP();
  255. }
  256. if (SPIReadFlashCommand(0x3f))
  257. {
  258. for (i = 0; i < 512; i ++)
  259. {
  260. SPIReadFlashData(FlashData);
  261. }
  262. }
  263. if (SPISysInit())
  264. {
  265. __NOP();
  266. }
  267. for (i = 0; i < 13; i ++)
  268. {
  269. if (SPIReadFlashCommand(i + 0x30))
  270. {
  271. for (j = 0; j < 96; j ++)
  272. {
  273. SPIReadFlashData(FlashData);
  274. }
  275. __NOP();
  276. }
  277. }
  278. if (SPISysInit())
  279. {
  280. __NOP();
  281. }
  282. for (i = 0; i < 33; i ++)
  283. {
  284. if (SPIReadFlashCommand(i))
  285. {
  286. for (j = 0; j < 8192; j ++)
  287. {
  288. SPIReadFlashData(FlashData);
  289. }
  290. __NOP();
  291. }
  292. }
  293. */
  294. #ifdef DEBUG
  295. printf("NUC100 USB HID\n");
  296. #endif

  297. /* Execute HID process */
  298. HID_MainProcess();


  299. }


Tennasi 发表于 2016-3-22 21:43 | 显示全部楼层
这程序挺全的,不知道价格怎么样
LearningASM 发表于 2016-3-23 09:00 | 显示全部楼层
为何不上上传代码文件?
芙蓉洞 发表于 2016-3-23 20:23 | 显示全部楼层
这个片子最低2.5V能够工作吗?
 楼主| 270382236 发表于 2016-3-23 21:14 | 显示全部楼层
Tennasi 发表于 2016-3-22 21:43
这程序挺全的,不知道价格怎么样

价格还不错 你们要选用这款吗 可以咨询我的 我们做代理这块的
 楼主| 270382236 发表于 2016-3-23 21:15 | 显示全部楼层
LearningASM 发表于 2016-3-23 09:00
为何不上上传代码文件?

已经有人传了 注意看上面的的代码
 楼主| 270382236 发表于 2016-3-23 21:17 | 显示全部楼层
芙蓉洞 发表于 2016-3-23 20:23
这个片子最低2.5V能够工作吗?

NUC220为Cortex™-M0 32位微控制器系列,其特点为宽电压工作范围 2.5V 至 5.5V,你们现在要是选型这款芯片吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

75

帖子

0

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