打印

转:嵌入式硬件之寄存器赋值操作

[复制链接]
1549|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
暗室无线|  楼主 | 2012-1-28 12:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过这段时间的工作和学习,我感觉在嵌入式硬件编程中,大多数情况下都是对相应硬件的功能寄存器进行设置和操作。总结一下和大家分享。
一、 寄存器的设置和操作特性
1,一个寄存器的每个位有其不同的意义,进行不同的设置会使硬件产生不同的效果和功能;
2,有些情况下需要对一个寄存器进行连续的不同的甚至完全相反的设置;
3,有些情况下需要对一个寄存器中的某一位或一位进行连续的不同的甚至完全相反的设置,而其余的位要保持不变;
4,有时对一个寄存器进行设置时,对其不同的位进行先后顺序不同的设置,即对其各个位有先后设置的顺序的要求,使硬件产生的结果也不同;
5,有时对于一个寄存器要求必须一次赋值,若对其某些位赋值先后顺序不同,便达不到预期的效果和功能。

二、寄存器的赋值操作方法
为说明方便,定义如下3个8位的寄存器:
#define   REG     0xFFFFFF10
1、对单个的位进行赋值
(1)将寄存器REG的第5位置“1”
REG |= (1 << 5);
(2)将寄存器REG的第5位清零
REG &= ~(1 << 5);
(3)将寄存器REG的第3、5位置“1”
REG |= (1 << 5) | (1 << 3);
(4)将寄存器REG的第3、5位清零
REG &= ~( (1 << 5) | (1 << 3) );
2、直接赋值
(1)将寄存器REG的0、1、2、3、5、7位置“1”
REG = 0x5F;
(即给寄存器REG1赋值为0101 1111,这种方法多在初始化中使用)
(2)分别将寄存器REG的1、3、5、7位置“1”,0、2位置“0”
uint32 temp;
tmep = REG;
temp &= ~0x01;
temp |= (1 << 1);
temp &= ~(1 << 2);
temp |= (1 << 3);
temp |= (1 << 5);
temp |= (1 << 7);
REG = temp;

相关帖子

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

本版积分规则

0

主题

135

帖子

1

粉丝