当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 裸机程序中头文件的来源

裸机程序中头文件的来源 时间:2018-12-11      来源:未知

特殊功能寄存器SFR,是Special Function Register的缩写。特殊功能寄存器是一个芯片功能得以实现的载体,我们可以理解为芯片厂商留给开发人员的控制接口,用于控制片内外设,比如GPIO、UART、ADC等。在常见的单片机或以ARM处理器为核心的芯片中,每个片内外设都有对应的特殊寄存器,用于存放相应功能部件的控制命令,数据或者状态。

特殊功能寄存器是有地址的,其地址也是使用的处理器寻址范围之内的一段空间,所以我们对于特殊功能寄存器的操作与操作内存类似,只是特殊功能寄存器是用于存放片内外设的的控制命令,数据或者状态,我们可以通过操作特殊功能寄存器达到对片内外设的控制。

查看Exynos4412芯片手册地址映射表,如图所示,我们可以看到Exynos4412的特殊功能寄存器绝大部分都放到了0x1000_0000到0x1400_0000的地址空间内。

裸机程序中头文件的来源

Exynos4412地址映射表

在芯片手册中我们可以看到对各个寄存器的描述。我们以GPA0CON寄存器为例,该寄存器是用于配置GPA0组管脚功能的寄存器。

GPA0组的配置寄存器GPA0CON的地址是:基地址+偏移量

0x11400000 + 0x0000 = 0x11400000

裸机程序中头文件的来源

GPA0CON寄存器

一般情况下我们经常对一个芯片当中的所有寄存器进行如下定义,然后将这些宏定义都写在一个头文件中,在需要使用寄存器时直接引用该宏定义就可以操作该寄存器中的数据。

例如:

#define  GPA0CON  (*(unsigned int *)0x11400000)

这里定义了一个宏,宏定义在预处理阶段进行直接替换,0x11400000 是一个16进制的数据,前面用(unsigned int *)修饰意在把0x11400000强制转换成了一个指向unsigned int型变量的指针。简单的说,(unsigned int  *)0x11400000指向了内存中从0x11400000开始的连续的4个字节空间。(0x11400000—0x11400003)。(*(unsigned int  *)0x11400000)是在(unsigned int  *)0x11400000又加了一个指针运算符*,表示取内存单元里的数据。所以如果我们操作(*(unsigned int  *)0x11400000)就相当于通过间接的方式操作以起始地址为0x11400000的连续的四个字节的地址空间当中的数据。所以我们在实际使用时只要把寄存器提前进行宏定义封装在实际使用时直接引用该寄存器的名字就可以,我们可以像unsigned int变量一样访问特殊功能寄存器。

例如:

GPA0CON = (GPA0CON & ~(0xf<<4))| 1<<4; //将GPA0_1引脚设置为输出功能

上一篇:堆栈溢出一般是什么原因?

下一篇:红外感应器工作原理

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部