打印
[技术问答]

菜鸟初学M0-从一个函数看新塘的库构成

[复制链接]
4213|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
static __INLINE void SYS_UnlockReg(void)
{   
    do
    {
        SYS->REGWRPROT = 0x59;
        SYS->REGWRPROT = 0x16;
        SYS->REGWRPROT = 0x88;
    }while(SYS->REGWRPROT == 0);
SYS应该是一个结构体定义,REGWRPROT是他的一个成员,搜索数据手册,发现这是一个寄存器
沙发
niuyaliang|  楼主 | 2013-11-27 07:34 | 只看该作者
本帖最后由 niuyaliang 于 2013-11-27 07:37 编辑

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

使用特权

评论回复
板凳
niuyaliang|  楼主 | 2013-11-27 07:37 | 只看该作者
本帖最后由 niuyaliang 于 2013-11-27 07:38 编辑

GCR_T的定义在
typedef struct
00609 {
00620     __I  uint32_t PDID;                 
00621     
00660     __IO uint32_t RSTSRC;
00661
00688     __IO uint32_t IPRSTC1;
00689
00737     __IO uint32_t IPRSTC2;
00738
00745     uint32_t RESERVED0[2];
00746
00800     __IO uint32_t BODCR;
00801
00808     __IO uint32_t TEMPCR;
00809
00816     uint32_t RESERVED1;
00817
00837     __IO uint32_t PORCR;
00838
00845     uint32_t RESERVED2[2];
00846
00909     __IO uint32_t P0_MFP;
00910
00981     __IO uint32_t P1_MFP;
00982
01045     __IO uint32_t P2_MFP;
01046
01110     __IO uint32_t P3_MFP;
01111
01172     __IO uint32_t P4_MFP;
01173     __IO uint32_t P5_MFP;
01174     __IO uint32_t P6_MFP;
01175     __IO uint32_t P7_MFP;
01176
01183     uint32_t RESERVED3[44];
01184
01213     __IO uint32_t REGWRPROT;
01214
01215 } GCR_T

GCR_T中的成员都是系统的寄存器

使用特权

评论回复
地板
niuyaliang|  楼主 | 2013-11-27 07:41 | 只看该作者
00075 #ifdef __cplusplus
00076   #define     __I     volatile               
00077 #else
00078   #define     __I     volatile const         
00079 #endif
00080 #define     __O     volatile                  
00081 #define     __IO    volatile  
__IO 的定义在这里

使用特权

评论回复
5
niuyaliang|  楼主 | 2013-11-27 07:53 | 只看该作者
uint32_t的定义没找到在哪里,应该是一个32位的变量

使用特权

评论回复
6
niuyaliang|  楼主 | 2013-11-27 08:00 | 只看该作者
#define GCR_BASE  (AHB_BASE + 0x00000)


使用特权

评论回复
7
niuyaliang|  楼主 | 2013-11-27 08:01 | 只看该作者
dwh000 发表于 2013-11-27 07:56
SYS是一个宏,其替代的是地址为 GCR_BASE的 GCR_T型的指针, __IO用C语言的关键字指明了其属性,  __INLINE指 ...

:lol谢谢楼上的,一下子就清晰多了,以前只管调用,而没有深究这些事怎么来的

使用特权

评论回复
8
niuyaliang|  楼主 | 2013-11-27 08:04 | 只看该作者
#define  AHB_BASE ((uint32_t)0x50000000) 


使用特权

评论回复
9
niuyaliang|  楼主 | 2013-11-27 08:10 | 只看该作者

使用特权

评论回复
10
haolaishi| | 2013-11-27 08:11 | 只看该作者
学习了,原来是这么来的

使用特权

评论回复
11
east森林| | 2013-11-27 09:59 | 只看该作者

学习了,就是这么来的

使用特权

评论回复
12
zhangmangui| | 2013-11-27 11:03 | 只看该作者
学习啦  谢谢分享

使用特权

评论回复
13
slotg| | 2013-11-27 15:27 | 只看该作者
讲的很好, 学习了

使用特权

评论回复
14
地瓜patch| | 2013-11-27 15:41 | 只看该作者
各家的片子都有自己的编程风格。

使用特权

评论回复
15
598330983| | 2014-12-4 22:00 | 只看该作者
嗯,有用

使用特权

评论回复
16
mintspring| | 2014-12-5 08:32 | 只看该作者
指针用的不错,好多库函数都直接使用->符号。

使用特权

评论回复
17
zxf0168| | 2014-12-5 08:45 | 只看该作者
代码编辑器不错

使用特权

评论回复
18
lesheng001| | 2014-12-21 20:39 | 只看该作者
在M052系列中PDID分别有各自的定义:如0x10005200表示M052LBN, 0x10005400表示M054LBN,等等
在NUC100系列中PDID定义没有具体说明,不知道如何定义的,默认值是0X00140018,不知道该如何区别是NUC100还是NUC120或者是NUC122等。

使用特权

评论回复
19
gaoyang9992006| | 2014-12-21 20:42 | 只看该作者
哭函数如果中文注释就爽了

使用特权

评论回复
20
天师猫神| | 2014-12-22 18:28 | 只看该作者
学习了学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝