分类: LINUX
2009-12-13 20:49:55
一, 寄存器的设置和操作特性
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赋值为1010 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;