原创 C 编程之——寄存器赋值操作

2008-7-30 18:25 6798 9 14 分类: MCU/ 嵌入式

    通过这段时间的工作和学习,我感觉在嵌入式硬件编程中,大多数情况下都是对相应硬件的功能寄存器进行设置和操作。


一, 寄存器的设置和操作特性


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;






这只是我学习过程中的记录和整理,由于本人才刚刚进入这个行业,故在文中如有错误和不托之处还请大师留言指点,学生在此先行谢过了!!!

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

Cybershu 2008-8-17 00:17

经验阿,受用了

用户1453845 2008-8-3 14:21

写的很好啊 很有用处

用户1113894 2008-8-1 11:00

学习了!

用户124183 2008-8-1 10:48

不错,顶一下!

用户1708619 2008-7-31 12:29

哈哈,谢谢楼主。收藏了。
相关推荐阅读
用户156616 2008-08-13 17:39
C编程之——循环缓冲区的操作
        在实际工作中很多时候要收发数据,于是便要用到循环缓存,下面就我常常用的通用的循环缓存做个总结,有不妥之处还请高手指点。(1)    定义循环缓存:#define   MAX_BUFF_...
用户156616 2008-07-30 14:16
GPIO基本操作之——ARM7:NXP_LPC2103
注:本文的所有操作都是基于NXP公司的ARM7TDMI-S系列芯片LPC2103,关于寄存器的定义请见我上传的附件的“LPC2103.h”头文件一、相关主要寄存器1,PINSEL0和PINSEL1 (...
我要评论
5
9
关闭 站长推荐上一条 /3 下一条