- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Exynos4412特殊功能寄存器封装
Exynos4412特殊功能特殊功能寄存器英文缩写为SFR,是Special Function Register的缩写是对应的寄存器,用于存放相应功能部件的控制命令,。Exynos4412的GPIO片内外设为例说明。
(1)查看Exynos4412芯片的地址映射表
查看Exynos4412芯片手册的第二章2 Memory Map(30页)地址映射表,我们可以看到Exynos4412的特殊功能寄存器绝大部分都放到了0x1000_0000到0x1400_0000的地址空间。
(2)查看GPIO模块的寄存器描述表
查看芯片手册,第四章4 General Purpose Input/Output (GPIO) Control,4.3节(41页)寄存器描述,有完整的GPIO模块的寄存器描述表。我们可以得到GPIO模块的基地址和每个寄存器相对基地址的偏移量
。
GPIO模块的基地址是:0x1140_0000
GPA0组的配置寄存器GPA0CON的地址是: 基地址 + 偏移量
0 + 0x0000 = 0
(3)封装寄存器的第一种方式是直接一对一封装
例如:
#define GPA0CON (*(volatile unsigned int *)0
分析:
这是一个宏定义,宏定义在预处理阶段进行直接替换,为了方便理解,我们可以先把volatile去掉,关键是理解(*(unsigned int *)0。
0是一个16进制的数据,前面用(unsigned int *)修饰,表示把0制转换成了一个指向unsigned int型变量的指针。简单的说,(unsigned int *)0向了内存中从0始的连续的4个字节空间。(00。
(*(unsigned int *)0是在(unsigned int *)0加了一个指针运算符*,表示取内存单元里的数据。
volatile是C语言的32个关键字之一,是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件中断或者线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,每次读取这个变量的值都是要从内存单元里读取,而不是直接使用放在高速缓存或寄存器里的备份。从而可以提供对特殊地址的稳定访问。
使用:
我们像unsigned int变量一样访问特殊功能寄存器。
GPA0CON = (GPA0CON ~(0xf4))| 14; //将GPA0_1引脚设置为输出功能
(4)封装寄存器的第二种方式是结构体封装
例如:
/* GPA0 */
typedef struct {
unsigned int CON;
unsigned int DAT;
unsigned int PUD;
unsigned int DRV;
unsigned int CONPDN;
unsigned int PUDPDN;
}gpa0;
#define GPA0 (* (volatile gpa0 *)0
分析:
typedef 关键字声明了名为gpa0的结构体类型,结构体内又定义了 6个unsigned int类型的变量。unsigned int 类型变量为 32 位,在内存内存空间 中占4 个字节。
#define GPA0 (* (volatile gpa0 *)0声明了一个gpa0类型结构体的宏,结构体名是结构体首成员的地址,GPA0这个结构体的首成员CON地址为0占4个字节,在c语言中结构体内的成员变量是连续的,那么GPA0结构体的第二个成员DAT得地址为:00x04 = 0这个 0x04 偏移量,正是GPA0DAT寄存器相对于GPIO基地址的偏移地址。
结构体内其它成员的偏移量,也和相应的寄存器偏移地址相符。因此,我们匹配了结构体的首地址,就可以确定各寄存器的具体地址了。
使用:
我们用访问结构体变量成员的方式,访问寄存器。
GPA0.CON = (GPA0.CON ~(0xf4))| 14; //将GPA0_1引脚设置为输出功能
(5)使用集成开发环境的芯片寄存器封装
嵌入式开发中我们把常用的寄存器写到一个头文件中,每次使用的时候直接包含就可以。也有很多集成开发环境
您可能关注的文档
最近下载
- 法警支队年度工作总结和工作计划(法院司法警察支队).docx VIP
- 《排水管道螺旋缠绕内衬法修复工程技术规程》.docx
- 《孤残儿童护理员》实操考核试题 .pdf VIP
- 德国压力容器标准AD 2000-Merkblatt Z 1 (2016-05) (E).pdf
- 《呼吸机模式》课件.ppt VIP
- 教科版(2024秋) 四年级下册 1.1 种子里孕育着新生命教案(PDF版含反思).docx
- 形态语意课件.ppt
- 2025年二建《市政公用工程管理与实务》章节习题(含答案).pdf VIP
- (精品课件)中医养生学.ppt
- GJB 438C-2021 军用软件开发文档通用要求 (高清,带章).docx
文档评论(0)