[技术问答] 菜鸟初学M0-从一个函数看新塘的库构成

[复制链接]
4729|21
 楼主| niuyaliang 发表于 2013-11-27 07:25 | 显示全部楼层 |阅读模式
  1. static __INLINE void SYS_UnlockReg(void)
  2. {   
  3.     do
  4.     {
  5.         SYS->REGWRPROT = 0x59;
  6.         SYS->REGWRPROT = 0x16;
  7.         SYS->REGWRPROT = 0x88;
  8.     }while(SYS->REGWRPROT == 0);
SYS应该是一个结构体定义,REGWRPROT是他的一个成员,搜索数据手册,发现这是一个寄存器
 楼主| niuyaliang 发表于 2013-11-27 07:34 | 显示全部楼层
本帖最后由 niuyaliang 于 2013-11-27 07:37 编辑

SYS的定义在
  1. #define SYS   ((GCR_T *) GCR_BASE)

 楼主| niuyaliang 发表于 2013-11-27 07:37 | 显示全部楼层
本帖最后由 niuyaliang 于 2013-11-27 07:38 编辑

GCR_T的定义在
  1. typedef struct
  2. 00609 {
  3. 00620     __I  uint32_t PDID;                 
  4. 00621     
  5. 00660     __IO uint32_t RSTSRC;
  6. 00661
  7. 00688     __IO uint32_t IPRSTC1;
  8. 00689
  9. 00737     __IO uint32_t IPRSTC2;
  10. 00738
  11. 00745     uint32_t RESERVED0[2];
  12. 00746
  13. 00800     __IO uint32_t BODCR;
  14. 00801
  15. 00808     __IO uint32_t TEMPCR;
  16. 00809
  17. 00816     uint32_t RESERVED1;
  18. 00817
  19. 00837     __IO uint32_t PORCR;
  20. 00838
  21. 00845     uint32_t RESERVED2[2];
  22. 00846
  23. 00909     __IO uint32_t P0_MFP;
  24. 00910
  25. 00981     __IO uint32_t P1_MFP;
  26. 00982
  27. 01045     __IO uint32_t P2_MFP;
  28. 01046
  29. 01110     __IO uint32_t P3_MFP;
  30. 01111
  31. 01172     __IO uint32_t P4_MFP;
  32. 01173     __IO uint32_t P5_MFP;
  33. 01174     __IO uint32_t P6_MFP;
  34. 01175     __IO uint32_t P7_MFP;
  35. 01176
  36. 01183     uint32_t RESERVED3[44];
  37. 01184
  38. 01213     __IO uint32_t REGWRPROT;
  39. 01214
  40. 01215 } GCR_T

GCR_T中的成员都是系统的寄存器
 楼主| niuyaliang 发表于 2013-11-27 07:41 | 显示全部楼层
  1. 00075 #ifdef __cplusplus
  2. 00076   #define     __I     volatile               
  3. 00077 #else
  4. 00078   #define     __I     volatile const         
  5. 00079 #endif
  6. 00080 #define     __O     volatile                  
  7. 00081 #define     __IO    volatile  
__IO 的定义在这里

 楼主| niuyaliang 发表于 2013-11-27 07:53 | 显示全部楼层
uint32_t的定义没找到在哪里,应该是一个32位的变量
 楼主| niuyaliang 发表于 2013-11-27 08:00 | 显示全部楼层
  1. #define GCR_BASE  (AHB_BASE + 0x00000)


 楼主| niuyaliang 发表于 2013-11-27 08:01 | 显示全部楼层
dwh000 发表于 2013-11-27 07:56
SYS是一个宏,其替代的是地址为 GCR_BASE的 GCR_T型的指针, __IO用C语言的关键字指明了其属性,  __INLINE指 ...

:lol谢谢楼上的,一下子就清晰多了,以前只管调用,而没有深究这些事怎么来的
 楼主| niuyaliang 发表于 2013-11-27 08:04 | 显示全部楼层
  1. #define  AHB_BASE ((uint32_t)0x50000000)


 楼主| niuyaliang 发表于 2013-11-27 08:10 | 显示全部楼层
haolaishi 发表于 2013-11-27 08:11 | 显示全部楼层
学习了,原来是这么来的
east森林 发表于 2013-11-27 09:59 | 显示全部楼层

学习了,就是这么来的
zhangmangui 发表于 2013-11-27 11:03 | 显示全部楼层
学习啦  谢谢分享
slotg 发表于 2013-11-27 15:27 | 显示全部楼层
讲的很好, 学习了
地瓜patch 发表于 2013-11-27 15:41 | 显示全部楼层
各家的片子都有自己的编程风格。
598330983 发表于 2014-12-4 22:00 来自手机 | 显示全部楼层
嗯,有用
mintspring 发表于 2014-12-5 08:32 | 显示全部楼层
指针用的不错,好多库函数都直接使用->符号。
zxf0168 发表于 2014-12-5 08:45 | 显示全部楼层
代码编辑器不错
lesheng001 发表于 2014-12-21 20:39 | 显示全部楼层
在M052系列中PDID分别有各自的定义:如0x10005200表示M052LBN, 0x10005400表示M054LBN,等等
在NUC100系列中PDID定义没有具体说明,不知道如何定义的,默认值是0X00140018,不知道该如何区别是NUC100还是NUC120或者是NUC122等。
gaoyang9992006 发表于 2014-12-21 20:42 来自手机 | 显示全部楼层
哭函数如果中文注释就爽了
天师猫神 发表于 2014-12-22 18:28 | 显示全部楼层
学习了学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

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