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

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

  13. #ifndef __M051Seriescfg_H__
  14. #define __M051Seriescfg_H__

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

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

  21. #include "M051Series.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. //----------------------------------------------------//
  142. typedef struct
  143. {
  144. __IO NU_REG RESERVED:16;
  145. __IO NU_REG OFFD0:1;
  146. __IO NU_REG OFFD1:1;
  147. __IO NU_REG OFFD2:1;
  148. __IO NU_REG OFFD3:1;
  149. __IO NU_REG OFFD4:1;
  150. __IO NU_REG OFFD5:1;
  151. __IO NU_REG OFFD6:1;
  152. __IO NU_REG OFFD7:1;
  153. __IO NU_REG OFFD8:1;
  154. __IO NU_REG OFFD9:1;
  155. __IO NU_REG OFFD10:1;
  156. __IO NU_REG OFFD11:1;
  157. __IO NU_REG OFFD12:1;
  158. __IO NU_REG OFFD13:1;
  159. __IO NU_REG OFFD14:1;
  160. __IO NU_REG OFFD15:1;
  161. }NU_GPIO_OFFD_Bits;

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

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

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

  190. typedef volatile union
  191. {
  192. NU_REG Regs;
  193. GPIO_DBNCECON_T Bits;
  194. }NU_GPIO_DBNCECON_T;

  195. typedef struct {
  196. union {
  197. __IO NU_GPIO_T Px[5];//GPIOs.Px[0].DOUT.Regs |= 1;GPIOs.Px[0].DOUT.Bits.Pin0 = 1;
  198. struct {
  199. __IO NU_GPIO_T P0;//GPIOs.P0.DOUT.Regs |=1;GPIOs.P0.DOUT.Bits.Pin0=1;
  200. __IO NU_GPIO_T P1;//GPIOs.P1.DOUT.Regs |=2;GPIOs.P1.DOUT.Bits.Pin1=1;
  201. __IO NU_GPIO_T P2;//GPIOs.P2.DOUT.Regs |=4;GPIOs.P2.DOUT.Bits.Pin2=1;
  202. __IO NU_GPIO_T P3;//GPIOs.P3.DOUT.Regs |=8;GPIOs.P3.DOUT.Bits.Pin3=1;
  203. __IO NU_GPIO_T P4;//GPIOs.P4.DOUT.Regs |=16;GPIOs.P4.DOUT.Bits.Pin4=1;
  204. };
  205. };
  206. __I NU_REG RESERVED0[16];
  207. __IO NU_GPIO_DBNCECON_T DBNCECON;
  208. __I NU_REG RESERVED1[15];
  209. __I NU_REG RESERVED2[16];
  210. __IO NU_REG_PINs BIT_DOUT;
  211. }NUS_GPIO, *NUPS_GPIO;

  212. #define NU_BASE_GPIO ((NUPS_GPIO) GPIOA_BASE)//定义硬件结构指针(硬件地址)
  213. #define GPIOs (*NU_BASE_GPIO)//定位全局结构变量GPIOs
  214. //----------------------------------------------------//
  215. #define GPIO0s (*((NU_GPIO_T *) PORT0_BASE))//定位全局结构变量GPIO0s
  216. #define GPIO1s (*((NU_GPIO_T *) PORT1_BASE))//定位全局结构变量GPIO1s
  217. #define GPIO2s (*((NU_GPIO_T *) PORT2_BASE))//定位全局结构变量GPIO2s
  218. #define GPIO3s (*((NU_GPIO_T *) PORT3_BASE))//定位全局结构变量GPIO3s
  219. #define GPIO4s (*((NU_GPIO_T *) PORT4_BASE))//定位全局结构变量GPIO4s
  220. #define P0s GPIO0s
  221. #define P1s GPIO1s
  222. #define P2s GPIO2s
  223. #define P3s GPIO3s
  224. #define P4s GPIO4s
  225. #define PORT0s GPIO0s
  226. #define PORT1s GPIO1s
  227. #define PORT2s GPIO2s
  228. #define PORT3s GPIO3s
  229. #define PORT4s GPIO4s
  230. //----------------------------------------------------//

  231. #define GPIOx(x) ((NU_GPIO_T *) PORT0_BASE + (x * 0x0040))
  232. #define PORTx(x) ((NU_GPIO_T *) PORT0_BASE + (x * 0x0040))
  233. #define Px(x) ((NU_GPIO_T *) PORT0_BASE + (x * 0x0040))
  234. //----------------------------------------------------//
  235. //----------------------------------------------------//
  236. typedef volatile union
  237. {
  238. NU_REG Regs;
  239. UART_IER_T Bits;
  240. }NU_UART_IER_T;

  241. typedef volatile union
  242. {
  243. NU_REG Regs;
  244. UART_FCR_T Bits;
  245. }NU_UART_FCR_T;

  246. typedef volatile union
  247. {
  248. NU_REG Regs;
  249. UART_LCR_T Bits;
  250. }NU_UART_LCR_T;

  251. typedef volatile union
  252. {
  253. NU_REG Regs;
  254. UART_MCR_T Bits;
  255. }NU_UART_MCR_T;

  256. typedef volatile union
  257. {
  258. NU_REG Regs;
  259. UART_MSR_T Bits;
  260. }NU_UART_MSR_T;

  261. typedef volatile union
  262. {
  263. NU_REG Regs;
  264. UART_FSR_T Bits;
  265. }NU_UART_FSR_T;

  266. typedef volatile union
  267. {
  268. NU_REG Regs;
  269. UART_ISR_T Bits;
  270. }NU_UART_ISR_T;

  271. typedef volatile union
  272. {
  273. NU_REG Regs;
  274. UART_TOR_T Bits;
  275. }NU_UART_TOR_T;

  276. typedef volatile union
  277. {
  278. NU_REG Regs;
  279. UART_BAUD_T Bits;
  280. }NU_UART_BAUD_T;

  281. typedef volatile union
  282. {
  283. NU_REG Regs;
  284. UART_IRCR_T Bits;
  285. }NU_UART_IRCR_T;

  286. typedef volatile union
  287. {
  288. NU_REG Regs;
  289. UART_ALTCON_T Bits;
  290. }NU_UART_ALTCON_T;

  291. typedef volatile union
  292. {
  293. NU_REG Regs;
  294. UART_FUNSEL_T Bits;
  295. }NU_UART_FUNSEL_T;

  296. typedef struct
  297. {
  298. union{
  299. __IO NU_REG_BITs DATA;//接收发送数据
  300. __I NU_REG_BITs RBR;//接收数据缓存寄存器
  301. __O NU_REG_BITs THR;//发送保持寄存器
  302. };
  303. __IO NU_UART_IER_T IER;//中断使能寄存器
  304. __IO NU_UART_FCR_T FCR;//FIFO控制寄存器
  305. __IO NU_UART_LCR_T LCR;//Line控制寄存器
  306. __IO NU_UART_MCR_T MCR;//Modem控制寄存器
  307. __IO NU_UART_MSR_T MSR;//Modem状态寄存器
  308. __IO NU_UART_FSR_T FSR;//FIFO状态寄存器
  309. __IO NU_UART_ISR_T ISR;//中断状态寄存器
  310. __IO NU_UART_TOR_T TOR;//定时溢出寄存器
  311. __IO NU_UART_BAUD_T BAUD;//波特率分频寄存器
  312. __IO NU_UART_IRCR_T IRCR;//IrDA控制寄存器
  313. __IO NU_UART_ALTCON_T ALTCON;//LIN Break失败计数寄存器
  314. __IO NU_UART_FUNSEL_T FUNSEL;//功能选择寄存器
  315. }NU_UART_T;

  316. //----------------------------------------------------//
  317. #define UART0s (*((NU_UART_T *) UART0_BASE))//定位全局结构变量UART0s
  318. #define UART1s (*((NU_UART_T *) UART1_BASE))//定位全局结构变量UART0s
  319. //----------------------------------------------------//
  320. #define UARTx(x) ((NU_UART_T *) UART0_BASE + ((x & 1) * 0x100000) + ((x >> 1) * 0x104000))
  321. #define Ux(x) ((NU_UART_T *) UART0_BASE + ((x & 1) * 0x100000) + ((x >> 1) * 0x104000))
  322. //----------------------------------------------------//
  323. typedef enum
  324. {
  325. TIMER_TCSR_PRESCALE = 0,//预分频计数器
  326. TIMER_TCSR_TDR_EN = 16,//数据锁存使能
  327. TIMER_TCSR_COUNTER_EN = 24,//
  328. TIMER_TCSR_CACT = 25,//定时器工作状态
  329. TIMER_TCSR_CRST = 26,//计数器重置
  330. TIMER_TCSR_MODE = 27,//定时器工作模式
  331. TIMER_TCSR_TMR_IE = 29,//中断使能
  332. TIMER_TCSR_CEN = 30,//计数器使能位
  333. TIMER_TCSR_nDBGACK_EN = 31
  334. }NU_TIMER_TCSR_ENUM;

  335. typedef volatile union
  336. {
  337. NU_REG Regs;
  338. TIMER_TCSR_T Bits;
  339. }NU_TIMER_TCSR_T;

  340. typedef enum
  341. {
  342. TIMER_TISR_TIF = 0//定时器中断标志
  343. }NU_TIMER_TISR_T_ENUM;

  344. typedef volatile union
  345. {
  346. NU_REG Regs;
  347. TIMER_TISR_T Bits;
  348. }NU_TIMER_TISR_T;

  349. typedef struct
  350. {
  351. __IO NU_TIMER_TCSR_T TCSR;//控制与状态寄存器
  352. __IO NU_REG_BITs TCMPR;//比较寄存器
  353. __IO NU_TIMER_TISR_T TISR;//中断状态寄存器
  354. __IO NU_REG_BITs TDR;//数据寄存器
  355. }NU_TIMER_T;

  356. //----------------------------------------------------//
  357. #define TIMER0s (*((NU_TIMER_T *) TIMER0_BASE))//定位全局结构变量TIMER0s
  358. #define TIMER1s (*((NU_TIMER_T *) TIMER1_BASE))//定位全局结构变量TIMER1s
  359. #define TIMER2s (*((NU_TIMER_T *) TIMER2_BASE))//定位全局结构变量TIMER2s
  360. #define TIMER3s (*((NU_TIMER_T *) TIMER3_BASE))//定位全局结构变量TIMER3s
  361. //----------------------------------------------------//
  362. #define TIMERx(x) ((NU_TIMER_T *)TIMER0_BASE + ((x & 1) * 0x0020) + ((x >> 1) * 0x100000))
  363. //----------------------------------------------------//
  364. typedef enum
  365. {
  366. WDT_WTCR_WTR = 0,//看门狗定时器重置
  367. WDT_WTCR_WTRE = 1,//看门狗定时器复位使能
  368. WDT_WTCR_WTRF = 2,//看门狗定时器复位标志
  369. WDT_WTCR_WTIF = 3,//看门狗定时器中断标志
  370. WDT_WTCR_WTWKE = 4,//看门狗定时器唤醒功能使能位
  371. WDT_WTCR_WTWKF = 5,//看门狗定时器唤醒标志
  372. WDT_WTCR_WTIE = 6,//看门狗定时器中断使能
  373. WDT_WTCR_WTE = 7,//看门狗定时器使能
  374. WDT_WTCR_WTIS = 8,//看门狗定时器间隔选择
  375. //000:69.33us 001:72.53us 010:85.33us 011:170.67us
  376. //100:426.67us 101:1.45ms 110:5.55ms 111:21.93ms
  377. }NU_WDT_WTCR_ENUM;

  378. typedef volatile union
  379. {
  380. NU_REG Regs;
  381. WDT_WTCR_T Bits;
  382. }NU_WDT_WTCR_T;

  383. typedef struct
  384. {
  385. __IO NU_WDT_WTCR_T WTCR;//看门狗定时器控制寄存器
  386. }NU_WDT_T;
  387. //----------------------------------------------------//
  388. #define WDTs (*((NU_WDT_T *) WDT_BASE))//定位全局结构变量WDTs
  389. //----------------------------------------------------//
  390. #define WDTx ((NU_WDT_T *) WDT_BASE)
  391. //----------------------------------------------------//
  392. typedef enum
  393. {
  394. SPI_CNTRL_GO_BUSY = 0,//通讯或忙状态标志
  395. SPI_CNTRL_RX_NEG = 1,//接收数据边沿反向位(0=SDI信号在SPICLK上升沿接收)
  396. SPI_CNTRL_TX_NEG = 2,//发送数据边沿反向位(0=SDO信号在SPICLK的上升沿发送)
  397. SPI_CNTRL_TX_BIT_LEN = 3,//传输位长度(32,1,...31)
  398. SPI_CNTRL_TX_NUM = 8,//发送/接收数量(00=每次传输仅完成1次发送/接收,01=每次传输仅完成2次发送/接收)
  399. SPI_CNTRL_LSB = 10,//优先传送LSB(0=优先发送/接收MSB,根据CNTRL寄存器的Tx_BIT_LEN 决定TxX/RxX)
  400. SPI_CNTRL_CLKP = 11,//时钟极性(0=SCLK低电平闲置)
  401. SPI_CNTRL_SP_CYCLE = 12,//暂缓间隙 (仅主机模式)
  402. SPI_CNTRL_IF = 16,//中断标志(0=表示传输未结束, 该位写1清零)
  403. SPI_CNTRL_IE = 17,//中断使能
  404. SPI_CNTRL_SLAVE = 18,//SLAVE模式标志(0=MCU作为主机模式)
  405. SPI_CNTRL_BYTE_REORDER = 19,
  406. SPI_CNTRL_TWOB= 21,
  407. SPI_CNTRL_VARCLK_EN = 22
  408. }NU_SPI_CNTRL_ENUM;

  409. typedef enum
  410. {
  411. SPI_SSR_SSR = 0,//从机选择寄存器(主机模式)
  412. SPI_SSR_SS_LVL = 2,//从机选择触发电平选择
  413. SPI_SSR_AUTOSS = 3,//自动从机选择(主机模式)
  414. SPI_SSR_SS_LTRIG = 4,//从机电平触发选择(从机模式)
  415. SPI_SSR_LTRIG_FLAG = 5//电平触发标志
  416. }NU_SPI_SSR_ENUM;

  417. typedef volatile union
  418. {
  419. NU_REG Regs;
  420. SPI_CNTRL_T Bits;
  421. }NU_SPI_CNTRL_T;

  422. typedef volatile union
  423. {
  424. NU_REG Regs;
  425. SPI_SSR_T Bits;
  426. }NU_SPI_SSR_T;

  427. typedef volatile union
  428. {
  429. NU_REG Regs;
  430. SPI_DIVIDER_T Bits;
  431. }NU_SPI_DIVIDER_T;

  432. typedef struct
  433. {
  434. NU_SPI_CNTRL_T CNTRL;//控制及状态寄存器
  435. NU_SPI_DIVIDER_T DIVIDER;//时钟除频寄存器
  436. NU_SPI_SSR_T SSR;//从机选择寄存器
  437. NU_REG RESERVE0;//保留
  438. union{
  439. NU_REG_BITs RX[2];//接收数据寄存器数组
  440. struct{
  441. NU_REG_BITs RX0;//接收数据寄存器低32位
  442. NU_REG_BITs RX1;//接收数据寄存器高32位
  443. };
  444. };
  445. NU_REG RESERVE1[2];//保留
  446. union{
  447. NU_REG_BITs TX[2];//数据发送寄存器数组
  448. struct{
  449. NU_REG_BITs TX0;//数据发送寄存器低32位
  450. NU_REG_BITs TX1;//数据发送寄存器高32位
  451. };
  452. };
  453. NU_REG RESERVE2[3];//保留
  454. NU_REG_BITs VARCLK;
  455. NU_REG RESERVE3;//保留
  456. }NU_SPI_T;
  457. //----------------------------------------------------//
  458. #define SPI0s (*((NU_SPI_T *) SPI0_BASE))//定位全局结构变量SPI0s
  459. #define SPI1s (*((NU_SPI_T *) SPI1_BASE))//定位全局结构变量SPI1s
  460. //----------------------------------------------------//
  461. #define SPIx(x) ((NU_SPI_T *) SPI0_BASE + ((x & 1) * 0x4000) + ((x >> 1) * 0x100000))
  462. //----------------------------------------------------//
  463. typedef enum
  464. {
  465. I2C_CON_AA = 2,//I2C接收应答标志位
  466. I2C_CON_SI = 3,//I2C中断标志位
  467. I2C_CON_STO = 4,//I2C停止标志
  468. I2C_CON_STA = 5,//I2C起始标志
  469. I2C_CON_ENSI = 6,//I2C控制使能/禁止
  470. I2C_CON_EI = 7 //使能中断
  471. }NU_I2C_CON_ENUM;

  472. typedef volatile union
  473. {
  474. NU_REG Regs;
  475. I2C_CON_T Bits;
  476. }NU_I2C_CON_T;

  477. typedef enum
  478. {
  479. I2C_ADDR_GC = 0,//全呼功能
  480. I2C_ADDR_ADDR = 1 //I2C地址寄存器
  481. }NU_I2C_ADDR_ENUM;

  482. typedef volatile union
  483. {
  484. NU_REG Regs;
  485. I2C_ADDR_T Bits;
  486. }NU_I2C_ADDR_T;

  487. typedef enum
  488. {
  489. I2C_ADRM_ADM = 1 //I2C隐藏地址寄存器
  490. }NU_I2C_ADRM_ENUM;

  491. typedef volatile union
  492. {
  493. NU_REG Regs;
  494. I2C_ADRM_T Bits;
  495. }NU_I2C_ADRM_T;

  496. typedef enum
  497. {
  498. I2C_TOC_TIF = 0,//超时标志
  499. I2C_TOC_DIV4 = 1,//超时计数输入时钟除4
  500. I2C_TOC_ENTI = 2 //超时计数使能/禁止
  501. }NU_I2C_TOC_NUM;

  502. typedef volatile union
  503. {
  504. NU_REG Regs;
  505. I2C_TOC_T Bits;
  506. }NU_I2C_TOC_T;

  507. typedef struct
  508. {
  509. __IO NU_I2C_CON_T CON;//I2C控制寄存器
  510. __IO NU_I2C_ADDR_T ADDR0;//I2C从机地址寄存器0
  511. __IO NU_REG_BITs DATA;//I2C数据寄存器
  512. __IO NU_REG_BITs STATUS;//I2C状态寄存器
  513. __IO NU_REG_BITs CLK;//I2C时钟时钟分频寄存器
  514. __IO NU_I2C_TOC_T TOC;//I2C超时控制寄存器
  515. __IO NU_I2C_ADDR_T ADDR1;//从机地址寄存器1
  516. __IO NU_I2C_ADDR_T ADDR2;//从机地址寄存器2
  517. __IO NU_I2C_ADDR_T ADDR3;//从机地址寄存器3
  518. __IO NU_I2C_ADRM_T ADRM0;//从机隐藏地址寄存器0
  519. __IO NU_I2C_ADRM_T ADRM1;//从机隐藏地址寄存器1
  520. __IO NU_I2C_ADRM_T ADRM2;//从机隐藏地址寄存器2
  521. __IO NU_I2C_ADRM_T ADRM3;//从机隐藏地址寄存器3
  522. }NU_I2C_T;
  523. //----------------------------------------------------//
  524. #define I2Cs (*((NU_I2C_T *) I2C_BASE))//定位全局结构变量I2Cs
  525. //----------------------------------------------------//
  526. #define I2Cx ((NU_I2C_T *) I2C_BASE)
  527. //----------------------------------------------------//
  528. typedef enum
  529. {
  530. ADC_ADDR_RSLT = 0,//A/D转换结果
  531. ADC_ADDR_OVERRUN = 16,//结束运行标志位
  532. ADC_ADDR_VALID = 17//有效标志位
  533. }NU_ADC_ADDR_ENUM;

  534. typedef volatile union
  535. {
  536. NU_REG Regs;
  537. ADC_ADDR_T Bits;
  538. }NU_ADC_ADDR_T;

  539. typedef enum
  540. {
  541. ADC_ADCR_ADEN = 0,//A/D转换使能
  542. ADC_ADCR_ADIE = 1,//A/D中断使能
  543. ADC_ADCR_ADMD = 2,//A/D转换操作模式
  544. ADC_ADCR_TRGS = 4,//硬件触发源
  545. ADC_ADCR_TRGCOND = 6,//外部触发条件
  546. ADC_ADCR_TRGEN = 8,//外部触发使能
  547. ADC_ADCR_PTEN = 9,//PDMA 传送使能
  548. ADC_ADCR_DIFFEN = 10,//A/D差分输入模式使能
  549. ADC_ADCR_ADST = 11,//A/D转换开始
  550. ADC_ADCR_DMOF = 31
  551. }NU_ADC_ADCR_ENUM;

  552. typedef volatile union
  553. {
  554. NU_REG Regs;
  555. ADC_ADCR_T Bits;
  556. }NU_ADC_ADCR_T;

  557. typedef enum
  558. {
  559. ADC_ADCHER_CHEN0 = 0,//模拟输入通道0
  560. ADC_ADCHER_CHEN1 = 1,//模拟输入通道1
  561. ADC_ADCHER_CHEN2 = 2,//模拟输入通道2
  562. ADC_ADCHER_CHEN3 = 3,//模拟输入通道3
  563. ADC_ADCHER_CHEN4 = 4,//模拟输入通道4
  564. ADC_ADCHER_CHEN5 = 5,//模拟输入通道5
  565. ADC_ADCHER_CHEN6 = 6,//模拟输入通道6
  566. ADC_ADCHER_CHEN7 = 7,//模拟输入通道7
  567. ADC_ADCHER_PRESEL = 8 //模拟输入通道7选择位
  568. //00:模拟输入通道7 01:Bandgap(VBG)模拟输入
  569. //10:VTEMP模拟输入 11:模拟地
  570. }NU_ADC_ADCHER_ENUM;

  571. typedef volatile union
  572. {
  573. NU_REG Regs;
  574. ADC_ADCHER_T Bits;
  575. }NU_ADC_ADCHER_T;

  576. typedef enum
  577. {
  578. ADC_ADCMPR_CMPEN = 0, //比较使能
  579. ADC_ADCMPR_CMPIE = 1, //比较中断使能
  580. ADC_ADCMPR_CMPCOND = 2, //比较条件
  581. ADC_ADCMPR_CMPCH = 3, //Compare通道选择(000=选择通道0转换结果,111=选择通道7转换结果)
  582. ADC_ADCMPR_CMPMATCNT = 8, //比较匹配值
  583. ADC_ADCMPR_CMPD = 16 //比较数值
  584. }NU_ADC_ADCMPR_ENUM;

  585. typedef volatile union
  586. {
  587. NU_REG Regs;
  588. ADC_ADCMPR_T Bits;
  589. }NU_ADC_ADCMPR_T;

  590. typedef enum
  591. {
  592. ADC_ADSR_ADF = 0,//A/D转换结束标志位
  593. ADC_ADSR_CMPF0 = 1,//比较标志位
  594. ADC_ADSR_CMPF1 = 2,//较标志位
  595. ADC_ADSR_BUSY = 3,//BUSY/IDLE
  596. ADC_ADSR_CHANNEL = 4,//当前转换通道
  597. ADC_ADSR_VALID = 8,//数据有效标志位
  598. ADC_ADSR_OVERRUN = 16//结束运行标志位
  599. }NU_ADC_ADSR_ENUM;

  600. typedef volatile union
  601. {
  602. NU_REG Regs;
  603. ADC_ADSR_T Bits;
  604. }NU_ADC_ADSR_T;

  605. typedef enum
  606. {
  607. ADC_ADCALR_CALEN = 0,//自身校准功能使能
  608. ADC_ADCALR_CALDONE = 1 //校准完成标志(只读)
  609. }NU_ADC_ADCALR_ENUM;

  610. typedef volatile union
  611. {
  612. NU_REG Regs;
  613. ADC_ADCALR_T Bits;
  614. }NU_ADC_ADCALR_T;

  615. typedef struct
  616. {
  617. union{
  618. __I NU_ADC_ADDR_T ADDR[8];//A/D数据寄存器0~7
  619. struct{
  620. __I NU_ADC_ADDR_T ADDR0;//A/D数据寄存器0
  621. __I NU_ADC_ADDR_T ADDR1;//A/D数据寄存器1
  622. __I NU_ADC_ADDR_T ADDR2;//A/D数据寄存器2
  623. __I NU_ADC_ADDR_T ADDR3;//A/D数据寄存器3
  624. __I NU_ADC_ADDR_T ADDR4;//A/D数据寄存器4
  625. __I NU_ADC_ADDR_T ADDR5;//A/D数据寄存器5
  626. __I NU_ADC_ADDR_T ADDR6;//A/D数据寄存器6
  627. __I NU_ADC_ADDR_T ADDR7;//A/D数据寄存器7
  628. };
  629. };
  630. __IO NU_ADC_ADCR_T ADCR;//ADC控制寄存器
  631. __IO NU_ADC_ADCHER_T ADCHER;//A/D 通道使能
  632. union{
  633. __IO NU_ADC_ADCMPR_T ADCMPR[2];//A/D比较寄存器0,1
  634. struct{
  635. __IO NU_ADC_ADCMPR_T ADCMPR0;//A/D比较寄存器0
  636. __IO NU_ADC_ADCMPR_T ADCMPR1;//A/D比较寄存器1
  637. };
  638. };
  639. __IO NU_ADC_ADSR_T ADSR;//ADC状态寄存器
  640. __IO NU_ADC_ADCALR_T ADCALR;//A/D校准寄存器
  641. __I NU_REG RESERVE0;
  642. __I NU_REG RESERVE1;
  643. __I NU_REG RESERVE2;
  644. }NU_ADC_T;
  645. //----------------------------------------------------//
  646. #define ADCs (*((NU_ADC_T *) ADC_BASE))//定位全局结构变量ADCs
  647. //----------------------------------------------------//
  648. #define ADCx ((NU_ADC_T *) ADC_BASE)
  649. //----------------------------------------------------//
  650. typedef volatile union
  651. {
  652. NU_REG Regs;
  653. PWM_PPR_T Bits;
  654. }NU_PWM_PPR_T;

  655. typedef volatile union
  656. {
  657. NU_REG Regs;
  658. PWM_CSR_T Bits;
  659. }NU_PWM_CSR_T;

  660. typedef volatile union
  661. {
  662. NU_REG Regs;
  663. PWM_PCR_T Bits;
  664. }NU_PWM_PCR_T;

  665. typedef volatile union
  666. {
  667. NU_REG Regs;
  668. PWM_PIER_T Bits;
  669. }NU_PWM_PIER_T;

  670. typedef volatile union
  671. {
  672. NU_REG Regs;
  673. PWM_PIIR_T Bits;
  674. }NU_PWM_PIIR_T;

  675. typedef volatile union
  676. {
  677. NU_REG Regs;
  678. PWM_CCR0_T Bits;
  679. }NU_PWM_CCR0_T;

  680. typedef volatile union
  681. {
  682. NU_REG Regs;
  683. PWM_CCR2_T Bits;
  684. }NU_PWM_CCR2_T;

  685. typedef volatile union
  686. {
  687. NU_REG Regs;
  688. PWM_POE_T Bits;
  689. }NU_PWM_POE_T;

  690. typedef struct
  691. {
  692. __IO NU_PWM_PPR_T PPR;//PWM0~3或PWM4~7预分频寄存器
  693. __IO NU_PWM_CSR_T CSR;//PWM0~3或PWM4~7时钟选择寄存器
  694. __IO NU_PWM_PCR_T PCR;//PWM0~3或PWM4~7控制寄存器
  695. __IO NU_REG_BITs CNR0;//PWM0或PWM4计数器寄存器
  696. __IO NU_REG_BITs CMR0;//PWM0或PWM4比较寄存器
  697. __IO NU_REG_BITs PDR0;//PWM0或PWM4数据寄存器
  698. __IO NU_REG_BITs CNR1;//PWM1或PWM5计数器寄存器
  699. __IO NU_REG_BITs CMR1;//PWM1或PWM5比较寄存器
  700. __IO NU_REG_BITs PDR1;//PWM1或PWM5数据寄存器
  701. __IO NU_REG_BITs CNR2;//PWM2或PWM6计数器寄存器
  702. __IO NU_REG_BITs CMR2;//PWM2或PWM6比较寄存器
  703. __IO NU_REG_BITs PDR2;//PWM2或PWM6数据寄存器
  704. __IO NU_REG_BITs CNR3;//PWM3或PWM7计数器寄存器
  705. __IO NU_REG_BITs CMR3;//PWM3或PWM7比较寄存器
  706. __IO NU_REG_BITs PDR3;//PWM3或PWM7数据寄存器
  707. __I NU_REG RESERVE0;
  708. __IO NU_PWM_PIER_T PIER;//PWM0~3或PWM4~7中断使能寄存器
  709. __IO NU_PWM_PIIR_T PIIR;
  710. __I NU_REG RESERVE1[2];
  711. __IO NU_PWM_CCR0_T CCR0;
  712. __IO NU_PWM_CCR2_T CCR2;
  713. __IO NU_REG_BITs CRLR0;
  714. __IO NU_REG_BITs CFLR0;
  715. __IO NU_REG_BITs CRLR1;
  716. __IO NU_REG_BITs CFLR1;
  717. __IO NU_REG_BITs CRLR2;
  718. __IO NU_REG_BITs CFLR2;
  719. __IO NU_REG_BITs CRLR3;
  720. __IO NU_REG_BITs CFLR3;
  721. __IO NU_REG_BITs CAPENR;
  722. __IO NU_PWM_POE_T POE;
  723. }NU_PWM_T;
  724. //----------------------------------------------------//
  725. #define PWM03s (*((NU_PWM_T *) PWMA_BASE))//定位全局结构变量PWM03s
  726. #define PWM47s (*((NU_PWM_T *) PWMB_BASE))//定位全局结构变量PWM47s
  727. //----------------------------------------------------//
  728. #define PWMx(x) ((NU_PWM_T *) PWMA_BASE + (x * 0x100000))
  729. //----------------------------------------------------//
  730. typedef enum
  731. {
  732. SYSCLK_PWRCON_XTL12M_EN = 0,//外部12MHz晶振控制
  733. SYSCLK_PWRCON_XTL32K_EN = 1,//外部32.768KHz晶振控制
  734. SYSCLK_PWRCON_OSC22M_EN = 2,//内部22MHz振荡器控制
  735. SYSCLK_PWRCON_OSC10K_EN = 3,//内部10KHz振荡器控制
  736. SYSCLK_PWRCON_PD_WU_DLY = 4,//使能唤醒延时计数器
  737. SYSCLK_PWRCON_PD_WU_INT_EN = 5,//掉电模式唤醒的中断使能
  738. SYSCLK_PWRCON_PD_WU_STS = 6,//芯片掉电唤醒状态标志
  739. SYSCLK_PWRCON_PWR_DOWN = 7,//激活或使能系统掉电模式
  740. SYSCLK_PWRCON_PD_WAIT_CPU = 8 //控制进入掉电模式的条件
  741. }NU_SYSCLK_PWRCON_ENUM;

  742. typedef volatile union
  743. {
  744. NU_REG Regs;
  745. SYSCLK_PWRCON_T Bits;
  746. }NU_SYSCLK_PWRCON_T;

  747. typedef enum
  748. {
  749. SYSCLK_AHBCLK_PDMA_EN = 1,//PDMA控制器时钟使能控制
  750. SYSCLK_AHBCLK_ISP_EN = 2,//Flash ISP控制器时钟使能控制
  751. SYSCLK_AHBCLK_EBI_EN = 3 //
  752. }NU_SYSCLK_AHBCLK_ENUM;

  753. typedef volatile union
  754. {
  755. NU_REG Regs;
  756. SYSCLK_AHBCLK_T Bits;
  757. }NU_SYSCLK_AHBCLK_T;

  758. typedef enum
  759. {
  760. SYSCLK_APBCLK_WDT_EN = 0,//Watch Dog时钟使能
  761. SYSCLK_APBCLK_RTC_EN = 1,//Real-Time-Clock APB接口时钟控制
  762. SYSCLK_APBCLK_TMR0_EN = 2,//Timer0时钟使能控制
  763. SYSCLK_APBCLK_TMR1_EN = 3,//Timer1时钟使能控制
  764. SYSCLK_APBCLK_TMR2_EN = 4,//Timer2时钟使能控制
  765. SYSCLK_APBCLK_TMR3_EN = 5,//Timer3时钟使能控制
  766. SYSCLK_APBCLK_FDIV_EN = 6,//分频器输出时钟使能控制
  767. SYSCLK_APBCLK_I2C0_EN = 8,//I2C0时钟使能控制
  768. SYSCLK_APBCLK_I2C1_EN = 9,//I2C1时钟使能控制
  769. SYSCLK_APBCLK_SPI0_EN = 12,//SPI0时钟使能控制
  770. SYSCLK_APBCLK_SPI1_EN = 13,//SPI1时钟使能控制
  771. SYSCLK_APBCLK_SPI2_EN = 14,//SPI2时钟使能控制
  772. SYSCLK_APBCLK_SPI3_EN = 15,//SPI3时钟使能控制
  773. SYSCLK_APBCLK_UART0_EN = 16,//UART0时钟使能控制
  774. SYSCLK_APBCLK_UART1_EN = 17,//UART1时钟使能控制
  775. SYSCLK_APBCLK_UART2_EN = 18,//UART2时钟使能控制
  776. SYSCLK_APBCLK_PWM01_EN = 20,//PWM_01时钟使能控制
  777. SYSCLK_APBCLK_PWM23_EN = 21,//PWM_23时钟使能控制
  778. SYSCLK_APBCLK_PWM45_EN = 22,//PWM_45时钟使能控制
  779. SYSCLK_APBCLK_PWM67_EN = 23,//PWM_67时钟使能控制
  780. SYSCLK_APBCLK_CAN0_EN = 24,//使能CAN线控制器0时钟控制
  781. SYSCLK_APBCLK_USBD_EN = 27,//USB FS设备控制器时钟使能控制
  782. SYSCLK_APBCLK_ADC_EN = 28,//使能ADC时钟控制
  783. SYSCLK_APBCLK_I2S_EN = 29,//I2S时钟使能控制
  784. SYSCLK_APBCLK_ACMP_EN = 30,//模拟比较器时钟使能控制
  785. SYSCLK_APBCLK_PS2_EN = 31//PS2时钟使能控制
  786. }NU_SYSCLK_APBCLK_ENUM;

  787. typedef volatile union
  788. {
  789. NU_REG Regs;
  790. SYSCLK_APBCLK_T Bits;
  791. }NU_SYSCLK_APBCLK_T;

  792. typedef enum
  793. {
  794. SYSCLK_CLKSTATUS_XTL12M_STB = 0,
  795. SYSCLK_CLKSTATUS_XTL32K_STB = 1,
  796. SYSCLK_CLKSTATUS_PLL_STB = 2,
  797. SYSCLK_CLKSTATUS_OSC10K_STB = 3,
  798. SYSCLK_CLKSTATUS_OSC22M_STB = 4,
  799. SYSCLK_CLKSTATUS_RESERVE0 = 5,
  800. SYSCLK_CLKSTATUS_CLK_SW_FAIL = 7
  801. }NU_SYSCLK_CLKSTATUS_ENUM;

  802. typedef volatile union
  803. {
  804. NU_REG Regs;
  805. SYSCLK_CLKSTATUS_T Bits;
  806. }NU_SYSCLK_CLKSTATUS_T;

  807. typedef enum
  808. {
  809. SYSCLK_CLKSEL0_HCLK_S = 0,
  810. SYSCLK_CLKSEL0_STCLK_S = 3
  811. }NU_SYSCLK_CLKSEL0_ENUM;

  812. typedef volatile union
  813. {
  814. NU_REG Regs;
  815. SYSCLK_CLKSEL0_T Bits;
  816. }NU_SYSCLK_CLKSEL0_T;

  817. typedef enum
  818. {
  819. SYSCLK_CLKSEL1_WDT_S = 0,//WDGCLK时钟源选择
  820. SYSCLK_CLKSEL1_ADC_S = 1,//ADC时钟源选择
  821. SYSCLK_CLKSEL1_TMR0_S = 8,//TIMER0时钟源选择
  822. SYSCLK_CLKSEL1_TMR1_S = 12,//TIMER1时钟源选择
  823. SYSCLK_CLKSEL1_TMR2_S = 16,//TIMER2时钟源选择
  824. SYSCLK_CLKSEL1_TMR3_S = 20,//TIMER3时钟源选择
  825. SYSCLK_CLKSEL1_UART_S = 24,//UART时钟源选择
  826. SYSCLK_CLKSEL1_CAN_S = 26,//CAN时钟源选择
  827. SYSCLK_CLKSEL1_PWM01_S = 28,//PWM1与PWM0的时钟源选择
  828. SYSCLK_CLKSEL1_PWM23_S = 30 //PWM3与PWM2的时钟源选择.
  829. }NU_SYSCLK_CLKSEL1_ENUM;

  830. typedef volatile union
  831. {
  832. NU_REG Regs;
  833. SYSCLK_CLKSEL1_T Bits;
  834. }NU_SYSCLK_CLKSEL1_T;

  835. typedef enum
  836. {
  837. SYSCLK_CLKDIV_HCLK_N = 0,//HCLK时钟频率=(HCLK时钟源频率)/(HCLK_N+1)
  838. SYSCLK_CLKDIV_USB_N = 4,//USB时钟频率=(PLL频率)/(USB_N+1)
  839. SYSCLK_CLKDIV_UART_N = 8,//UART时钟频率=(UART时钟源频率)/(UART_N+1)
  840. SYSCLK_CLKDIV_CAN_N = 12,//APU时钟频率=(CAN时钟源频率)/(CAN_N+1)
  841. SYSCLK_CLKDIV_ADC_N = 16,//ADC时钟频率=ADC时钟源频率/(ADC_N+1)
  842. SYSCLK_CLKDIV_CAN_N_EXT = 24//
  843. }NU_SYSCLK_CLKDIV_ENUM;

  844. typedef volatile union
  845. {
  846. NU_REG Regs;
  847. SYSCLK_CLKDIV_T Bits;
  848. }NU_SYSCLK_CLKDIV_T;

  849. typedef enum
  850. {
  851. SYSCLK_CLKSEL2_I2S_S = 0,//I2S时钟源选择
  852. SYSCLK_CLKSEL2_FRQDIV_S = 2,//时钟分频器时钟源选择
  853. SYSCLK_CLKSEL2_PWM45_S = 4,//PWM4与PWM5的时钟源选择
  854. SYSCLK_CLKSEL2_PWM67_S = 6 //PWM6与PWM7的时钟源选择
  855. }NU_SYSCLK_CLKSEL2_ENUM;

  856. typedef volatile union
  857. {
  858. NU_REG Regs;
  859. SYSCLK_CLKSEL2_T Bits;
  860. }NU_SYSCLK_CLKSEL2_T;

  861. typedef enum
  862. {
  863. SYSCLK_PLLCON_FB_DV = 0,//PLL反馈分频控制引脚
  864. SYSCLK_PLLCON_IN_DV = 9,//PLL输入分频控制引脚
  865. SYSCLK_PLLCON_OUT_DV = 14,//PLL输出分频控制引脚
  866. SYSCLK_PLLCON_PD = 16,//掉电模式
  867. SYSCLK_PLLCON_BP = 17,//PLL旁路控制
  868. SYSCLK_PLLCON_OE = 18,//PLL OE(FOUT enable)引脚控制
  869. SYSCLK_PLLCON_PLL_SRC = 19 //PLL时钟源选择
  870. }NU_SYSCLK_PLLCON_ENUM;

  871. typedef volatile union
  872. {
  873. NU_REG Regs;
  874. SYSCLK_PLLCON_T Bits;
  875. }NU_SYSCLK_PLLCON_T;


  876. typedef enum
  877. {
  878. SYSCLK_FRQDIV_FSEL = 0,//分频器输出频率选择位
  879. SYSCLK_FRQDIV_FDIV_EN = 4 //频率分频器使能位
  880. }NU_SYSCLK_FRQDIV_ENUM;

  881. typedef volatile union
  882. {
  883. NU_REG Regs;
  884. SYSCLK_FRQDIV_T Bits;
  885. }NU_SYSCLK_FRQDIV_T;

  886. typedef struct
  887. {
  888. __IO NU_SYSCLK_PWRCON_T PWRCON;//系统掉电控制寄存器
  889. __IO NU_SYSCLK_AHBCLK_T AHBCLK;//AHB设备时钟使能控制寄存器
  890. __IO NU_SYSCLK_APBCLK_T APBCLK;//APB设备时钟使能控制寄存器
  891. __IO NU_SYSCLK_CLKSTATUS_T CLKSTATUS;
  892. __IO NU_SYSCLK_CLKSEL0_T CLKSEL0;//时钟源选择控制寄存器0
  893. __IO NU_SYSCLK_CLKSEL1_T CLKSEL1;//时钟源选择控制寄存器1
  894. __IO NU_SYSCLK_CLKDIV_T CLKDIV;//时钟分频寄存器
  895. __IO NU_SYSCLK_CLKSEL2_T CLKSEL2;//时钟源选择控制寄存器2
  896. __IO NU_SYSCLK_PLLCON_T PLLCON;//PLL 控制寄存器
  897. __IO NU_SYSCLK_FRQDIV_T FRQDIV;//频率分频器控制寄存器
  898. }NU_SYSCLK_T;
  899. //----------------------------------------------------//
  900. #define SYSCLKs (*((NU_SYSCLK_T *) SYSCLK_BASE))//定位全局结构变量SYSCLKs
  901. //----------------------------------------------------//
  902. #define SYSCLKx ((NU_SYSCLK_T *) SYSCLK_BASE)
  903. //----------------------------------------------------//
  904. typedef struct
  905. {
  906. __I NU_REG_BITs ISER;//IRQ0~IRQ31设置使能控制寄存器
  907. __I NU_REG RESERVED0[31];
  908. __I NU_REG_BITs ICER;//IRQ0~IRQ31清使能控制寄存器
  909. __I NU_REG RSERVED1[31];
  910. __I NU_REG_BITs ISPR;//IRQ0~IRQ31设置挂起控制寄存器
  911. __I NU_REG RESERVED2[31];
  912. __I NU_REG_BITs ICPR;//IRQ0~IRQ31清挂起控制寄存器
  913. __I NU_REG RESERVED3[31];
  914. __I NU_REG RESERVED4[64];
  915. union{
  916. __I NU_REG_BITs IPR[8];//IRQ0~IRQ31优先级控制寄存器
  917. struct{
  918. __I NU_REG_BITs IPR0;//IRQ0~IRQ3优先级控制寄存器
  919. __I NU_REG_BITs IPR1;//IRQ4~IRQ7优先级控制寄存器
  920. __I NU_REG_BITs IPR2;//IRQ8~IRQ11优先级控制寄存器
  921. __I NU_REG_BITs IPR3;//IRQ12~IRQ15优先级控制寄存器
  922. __I NU_REG_BITs IPR4;//IRQ16~IRQ19优先级控制寄存器
  923. __I NU_REG_BITs IPR5;//IRQ20~IRQ23优先级控制寄存器
  924. __I NU_REG_BITs IPR6;//IRQ24~IRQ27优先级控制寄存器
  925. __I NU_REG_BITs IPR7;//IRQ28~IRQ31优先级控制寄存器
  926. };
  927. };
  928. }NU_NVIC_Type;
  929. //----------------------------------------------------//
  930. #define NVICs (*((NU_NVIC_Type *) NVIC_BASE))//定位全局结构变量NVICs
  931. //----------------------------------------------------//
  932. #define NVICx ((NU_NVIC_Type *) NVIC_BASE)
  933. //----------------------------------------------------//
  934. typedef enum
  935. {
  936. SCB_CPUID_REVISION = 0,//值为0x0
  937. SCB_CPUID_PARTNO = 4,//值为0xC20
  938. SCB_CPUID_PART = 16,//ARMv6-M值为0xC
  939. SCB_CPUID_IMPLEMENTER = 24,//由ARM分配执行码(ARM=0x41)
  940. }NU_SCB_CPUID_ENUM;

  941. typedef struct
  942. {
  943. __I NU_REG REVISION:4;
  944. __I NU_REG PARTNO:12;
  945. __I NU_REG PART:4;
  946. __I NU_REG RESERVE:4;
  947. __I NU_REG IMPLEMENTER:8;
  948. }SCB_CPUID_T;

  949. typedef volatile union
  950. {
  951. NU_REG Regs;
  952. SCB_CPUID_T Bits;
  953. }NU_SCB_CPUID_T;

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

  966. typedef struct
  967. {
  968. __I NU_REG VECTACTIVE:9;
  969. __I NU_REG VECTPENDING:9;
  970. __I NU_REG ISRPENDING:1;
  971. __I NU_REG ISRPREEMPT:1;
  972. __I NU_REG RESERVE1:1;
  973. __O NU_REG PENDSTCLR:1;
  974. __IO NU_REG PENDSTSET:1;
  975. __I NU_REG PENDSVCLR:1;
  976. __IO NU_REG PENDSVSET:1;
  977. __I NU_REG RESERVE2:2;
  978. __IO NU_REG NMIPENDSET:1;
  979. }SCB_ICSR_T;

  980. typedef volatile union
  981. {
  982. NU_REG Regs;
  983. SCB_ICSR_T Bits;
  984. }NU_SCB_ICSR_T;

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

  991. typedef struct
  992. {
  993. __I NU_REG RESERVE0:1;
  994. __I NU_REG SLEEPONEXIT:1;
  995. __I NU_REG SLEEPDEEP:1;
  996. __I NU_REG RESERVE1:1;
  997. __O NU_REG SEVONPEND:1;
  998. __I NU_REG RESERVE2:27;
  999. }SCB_SCR_T;

  1000. typedef volatile union
  1001. {
  1002. NU_REG Regs;
  1003. SCB_ICSR_T Bits;
  1004. }NU_SCB_SCR_T;

  1005. typedef struct
  1006. {
  1007. __I NU_SCB_CPUID_T CPUID;//CPUID Base 寄存器
  1008. __IO NU_SCB_ICSR_T ICSR;//中断控制状态寄存器
  1009. __I NU_REG RESERVED0;
  1010. __IO NU_REG_BITs AIRCR;
  1011. __IO NU_SCB_SCR_T SCR;//系统控制寄存器
  1012. __IO NU_REG_BITs CCR;
  1013. __I NU_REG RESERVED1;
  1014. union{
  1015. __IO NU_REG_BITs SHP[2];//系统处理器优先级寄存器2和3
  1016. struct{
  1017. __IO NU_REG_BITs SHP2;//系统处理器优先级寄存器2
  1018. __IO NU_REG_BITs SHP3;//系统处理器优先级寄存器3
  1019. };
  1020. };
  1021. __IO NU_REG_BITs SHCSR;
  1022. __I NU_REG RESERVED2[2];
  1023. __IO NU_REG_BITs DFSR;
  1024. }NU_SCB_Type;
  1025. //----------------------------------------------------//
  1026. #define SCBs (*((NU_SCB_Type *) SCB_BASE))//定位全局结构变量SCBs
  1027. //----------------------------------------------------//
  1028. #define SCBx ((NU_SCB_Type *) SCB_BASE)
  1029. //----------------------------------------------------//
  1030. typedef enum
  1031. {
  1032. SysTick_CTRL_TICKENABLE = 0,//
  1033. SysTick_CTRL_TICKINT = 1,//
  1034. SysTick_CTRL_CLKSRC = 2,//
  1035. SysTick_CTRL_COUNTFLAG = 16//
  1036. }NU_SysTick_CTRL_ENUM;

  1037. typedef struct
  1038. {
  1039. __IO NU_REG TICKENABLE:1;
  1040. __IO NU_REG TICKINT:1;
  1041. __IO NU_REG CLKSRC:1;
  1042. __IO NU_REG RESERVE0:13;
  1043. __IO NU_REG COUNTFLAG:1;
  1044. __IO NU_REG RESERVE1:15;
  1045. }SysTick_CTRL_T;

  1046. typedef volatile union
  1047. {
  1048. NU_REG Regs;
  1049. SysTick_CTRL_T Bits;
  1050. }NU_SysTick_CTRL_T;

  1051. typedef enum
  1052. {
  1053. SysTick_LOAD_RELOAD = 0,//当计数器达到0时,值加载到当前值寄存器
  1054. }NU_SysTick_LOAD_ENUM;

  1055. typedef struct
  1056. {
  1057. __IO NU_REG RELOAD:24;
  1058. __IO NU_REG RESERVE:8;
  1059. }SysTick_LOAD_T;

  1060. typedef volatile union
  1061. {
  1062. NU_REG Regs;
  1063. SysTick_LOAD_T Bits;
  1064. }NU_SysTick_LOAD_T;

  1065. typedef enum
  1066. {
  1067. SysTick_VAL_CURRENT = 0,//当前计数值,为采样时刻的计数器的值
  1068. }NU_SysTick_VAL_ENUM;

  1069. typedef struct
  1070. {
  1071. __IO NU_REG CURRENT:24;
  1072. __IO NU_REG RESERVE:8;
  1073. }SysTick_VAL_T;

  1074. typedef volatile union
  1075. {
  1076. NU_REG Regs;
  1077. SysTick_VAL_T Bits;
  1078. }NU_SysTick_VAL_T;

  1079. typedef struct
  1080. {
  1081. __IO NU_SysTick_CTRL_T CTRL;//SysTick控制与状态
  1082. __IO NU_SysTick_LOAD_T LOAD;//SysTick重新加载值
  1083. __IO NU_SysTick_VAL_T VAL;//SysTick当前值
  1084. __I NU_REG_BITs CALIB;
  1085. }NU_SysTick_Type;
  1086. //----------------------------------------------------//
  1087. #define SysTicks (*((NU_SysTick_Type *) SysTick_BASE))//定位全局结构变量SysTicks
  1088. //----------------------------------------------------//
  1089. #define SysTickx ((NU_SysTick_Type *) SysTick_BASE)
  1090. //----------------------------------------------------//
  1091. typedef struct
  1092. {
  1093. __IO NU_REG_BITs DHCSR;
  1094. __O NU_REG_BITs DCRSR;
  1095. __IO NU_REG_BITs DCRDR;
  1096. __IO NU_REG_BITs DEMCR;
  1097. }NU_CoreDebug_Type;
  1098. //----------------------------------------------------//
  1099. #define CoreDebugs (*((NU_CoreDebug_Type *) CoreDebug_BASE))//定位全局结构变量CoreDebugs
  1100. //----------------------------------------------------//
  1101. #define CoreDebugx ((NU_CoreDebug_Type *) CoreDebug_BASE)
  1102. //----------------------------------------------------//



  1103. #ifdef __cplusplus
  1104. }
  1105. #endif

  1106. #endif /* __M051Seriescfg_H__ */
复制代码
 楼主| hotpower 发表于 2010-12-5 01:47 | 显示全部楼层
应用:Smpl_LED.c


  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/
  6. #include <stdio.h>
  7. //#include "M051Seriescfg.h"
  8. #include "M051Seriescfg.h"//加入菜农头文件
  9. #include "Driver\DrvGPIO.h"
  10. #include "Driver\DrvSYS.h"
  11. void delay_loop(void)
  12. {
  13. uint32_t j;
  14. for(j=0;j<60000;j++);  
  15. for(j=0;j<60000;j++);
  16. for(j=0;j<60000;j++);  
  17. for(j=0;j<60000;j++);
  18. }

  19. /*---------------------------------------------------------------------------------------------------------*/
  20. /* MAIN function                                                                                          */
  21. /*---------------------------------------------------------------------------------------------------------*/   
  22. int main (void)
  23. {
  24. // E_DRVGPIO_PIN sPinNumber;
  25. /* SYSCLK =>12Mhz*/
  26. UNLOCKREG();
  27. //    SYSCLK->PWRCON.XTL12M_EN = 1;
  28.     SYSCLKs.PWRCON.Bits.XTL12M_EN = 1;
  29. LOCKREG();
  30. /*set GP0 outpui*/
  31. /*
  32. for(sPinNumber=E_PIN0;sPinNumber<=E_PIN7;sPinNumber++)
  33. {
  34.   DrvGPIO_Open(E_PORT0,sPinNumber, E_IO_OUTPUT);
  35.   DrvGPIO_Open(E_PORT1,sPinNumber, E_IO_OUTPUT);
  36.   DrvGPIO_Open(E_PORT2,sPinNumber, E_IO_OUTPUT);
  37.   DrvGPIO_Open(E_PORT3,sPinNumber, E_IO_OUTPUT);
  38.   DrvGPIO_Open(E_PORT4,sPinNumber, E_IO_OUTPUT);
  39. }
  40. */
  41. // DrvGPIO_Open(E_PORT3,E_PIN6, E_IO_OUTPUT);
  42. PORT3s.PMD.Bits.PMD6 = E_IO_OUTPUT;
  43. while(1)
  44. {
  45.   PORT3s.DOUT.Bits.Pin6 ^= 1;
  46.   delay_loop();
  47. /*
  48.   for(sPinNumber=E_PIN0;sPinNumber<=E_PIN7;sPinNumber++)
  49.   {
  50.    DrvGPIO_ClrBit(E_PORT0,sPinNumber);
  51.    DrvGPIO_ClrBit(E_PORT1,sPinNumber);
  52.    DrvGPIO_ClrBit(E_PORT2,sPinNumber);
  53.    DrvGPIO_ClrBit(E_PORT3,sPinNumber);
  54.    DrvGPIO_ClrBit(E_PORT4,sPinNumber);
  55.   }
  56. */
  57. //  DrvGPIO_ClrBit(E_PORT3,E_PIN6);
  58. //  P3s.DOUT.Bits.Pin6 = 0;
  59. //  delay_loop();
  60. /*
  61.   for(sPinNumber=E_PIN0;sPinNumber<=E_PIN7;sPinNumber++)
  62.   {
  63.    DrvGPIO_SetBit(E_PORT0,sPinNumber);
  64.    DrvGPIO_SetBit(E_PORT1,sPinNumber);
  65.    DrvGPIO_SetBit(E_PORT2,sPinNumber);
  66.    DrvGPIO_SetBit(E_PORT3,sPinNumber);
  67.    DrvGPIO_SetBit(E_PORT4,sPinNumber);
  68.   }
  69. */
  70. //  DrvGPIO_SetBit(E_PORT3,E_PIN6);
  71. //  P3s.DOUT.Bits.Pin6 = 1;
  72. //  delay_loop();
  73.   

  74. }

  75. }



复制代码
zhangyang86 发表于 2010-12-5 04:09 | 显示全部楼层
终于出马了!:victory:
 楼主| hotpower 发表于 2010-12-5 04:16 | 显示全部楼层
暂且不玩M051,它除了多个EBI接口外,实际是NUC1xx的一个子集,无PDMA,USB,I2C,RTC等
所以应该多学习NUC1XX才是。

俺的这两个红杏级别的头文件把它们完美融合,编出来的程序可以很轻松的相互移植。

评分

参与人数 1威望 +1 收起 理由
dong_abc + 1

查看全部评分

zhangyang86 发表于 2010-12-5 15:32 | 显示全部楼层
没想到我4点回复的,你居然几分钟之后又回复!
都是夜猫子啊!
我起来吃个饭已经3点了!
kyzb001 发表于 2010-12-5 16:16 | 显示全部楼层
小区停电哇,现在才看到。:dizzy:
 楼主| hotpower 发表于 2010-12-6 08:05 | 显示全部楼层
上班了,继续努力争做菜鸟的资格
mtwumtwu 发表于 2010-12-6 09:23 | 显示全部楼层
tks for sharing
精益求精 发表于 2010-12-6 12:50 | 显示全部楼层
好事情。
Jerric 发表于 2010-12-6 15:38 | 显示全部楼层
好东东……TKS
火箭球迷 发表于 2010-12-6 16:52 | 显示全部楼层
菜农还是以文件的形式给吧,这代码太长了
 楼主| hotpower 发表于 2010-12-6 21:28 | 显示全部楼层
哈哈,俺故意的,想看的人不怕长就怕短,反之…
lrqzsu 发表于 2010-12-9 08:56 | 显示全部楼层
好,先标记下,谢谢!
yybj 发表于 2010-12-9 18:32 | 显示全部楼层
总觉得大叔的笔记可以写得更方便阅读一点:lol
秋天落叶 发表于 2010-12-9 21:29 | 显示全部楼层
要看完菜农的这些代码,的确是需要耐心和时间啊
 楼主| hotpower 发表于 2012-1-6 09:22 | 显示全部楼层
看看
kyzb001 发表于 2012-1-6 11:43 | 显示全部楼层
好久的贴了!!!     只占领到了6楼!!!  木有攻占到沙发!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

508

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