【ARM】控制寄存器的几种方式
来源:互联网 发布:淘宝上的qq号能买吗 编辑:程序博客网 时间:2024/06/07 06:41
定义一个指向寄存器地址的指针
原理:利用强制类型转换将寄存器的地址强转为一个指向无符号整形的指针,并将其赋给一个指针变量。之后的操作可以转换为对指针的操作。
unsigned int * GPX2CON = (unsigned int *)0x11000c40;* GPX2CON = 0x10000000;
利用宏定义
原理:与上一种方法原理相同,最终都是对一个指向无符号整形的指针进行操作。不同之处在于强转之后直接对指针解除引用,从而不必定义指针变量。同时,利用宏定义,可以简化代码编写。
#define GPX2CON (*(unsigned int *)0x11000c40)GPX2CON = 0x10000000;
也可以再增加一层宏定义,在定义大量寄存器时可以简化代码。
#define __REG(x) (*(volatile unsigned int *)(x))#define GPX2CON __REG(0x11000c40)GPX2CON = 0x10000000;
结构体+宏定义
原理:因为当结构体中所有的成员变量的数据类型都相同的时候,结构体是紧密排列的,即在地址上是连续的。利用这个特性,当我们使用结构体指针操作其中的成员时,编译器会自动计算每个成员的地址。因此,如果让这个指针指向某个寄存器的首地址,就可以对之后的连续几个寄存器进行操作。
这种方式有一定的局限性,只有一些特定的场合,比如我们要操作的某个模块的相关寄存器在内存上连续分布。幸运的是,厂商早已帮我们想好了,因此大多数情况下这些寄存器的地址都是连续的。
typedef struct{ unsigned int CON; unsigned int DAT; unsigned int PUD; unsigned int DRV;}gpx2;#define GPX2 (*(gpx2 *)0x11000c40)GPX2.CON = 0x10000000;
阅读全文
0 0
- 【ARM】控制寄存器的几种方式
- ARM寄存器的7种工作模式和几种寻址方式
- arm中断控制寄存器
- arm 控制寄存器
- ARM指令寻址的几种方式
- Spring 控制反转的几种方式
- 实现权限控制的几种方式
- 线程同步控制的几种方式
- 多线程的几种控制方式
- arm中断控制寄存器详解
- arm中断控制寄存器详解
- arm的协处理寄存器c1的对齐控制异常
- ARM第一部分-软件编程控制硬件的关键-寄存器
- 关于ARM下载程序的几种方式
- ARM寄存器的7种工作模式
- 几种远程控制方式
- ARM寄存器的定义
- ARM的FP寄存器
- Fibonacci Again!
- [Leetcode]_36 Valid Sudoku
- hdu 多校联赛 Is Derek lying?
- 主席树(Kth number,HDU 2665)
- hdfs查看目录大小文件大小
- 【ARM】控制寄存器的几种方式
- EasyHook 中部分函数的实现分析—-申请钩子
- spring4.0之后,自定义属性编辑器的配置变化
- 获取历史和实时股票数据接口
- redis过期时间的过期策略
- 第三章maven的DOS命令创建java、web项目
- HDU1235 统计同成绩学生人数
- linux下rabbitmq SimpleAmqpClient客户端的使用的简单例子
- uva 120