在学习arm的过程中,感觉寄存器,基本不会提供位操作,而是整体的操作,
整体操作的就是要注意在对某位赋值的时候不要影响到其他位,看上去不简单,
其实,整体操作有技巧,
那么就来总结一下:
1、首先要理解,“|”符号就是用来置1的,“&”就是用来置0的。
2、不管置1还是置0,”<<”左边总是以1的形式出现。要置0,加上取反符号。
结合上面两条规则,事情就很简单了:
比如先把某个寄存器的第6位置1,那么首先写出(1<<6)待用。
然后置1就用“|”的规则,所以就是:reg |= (1<<6);
要是第6位置0呢:
一样的,首先写出(1<<6)待用。
置0就用“&”,加上取反符号的规则。所以就是:reg &= ~(1<<6);
好了,现在理解一个难一点的:
reg &= ~( (1<<6) | (1<<7) | (1<<2) );
这个表示什么意思?看到“&=”就知道要将某位置0.
(1<<6) | (1<<7) | (1<<2)就表示,2,6,7都置1,在看到取反。
那么这句话的意思就是将2,6,7都置0.
我们再返回到程序 :
if(dwDat & (1<<2) )
这句有是什么意思呢?
就是判断swDat的第二位是否为1,第二位如果为1,则结果为1,if判断为真。
这个可以理解为一个读操作~
关键字:arm 位操作 寄存器
引用地址:
arm学习——有关位操作的总结
推荐阅读最新更新时间:2024-11-12 12:58
嵌入式操作系统的解析
嵌入式操作系统都具有一定的实时性,易于裁剪和伸缩,可以适合于从ARM7到Xscale各种ARMCPU和各种档次的应用,嵌入式操作系统可以使用广泛流行的ARM开发工具,如ARM公司的SDT/ADS和RealView等,也可以使用开发软件,如GCC/GDB、KDE或Eclipe开发环境,市场上还有专用的开发工具,如Tornado、μC/View、μC/KA、CODE/Lab、Metroworks等。 本文就目前国内在ARM CPU上广泛采用的三种嵌入式操作系统(μC/OS-II、μCLinux和嵌入式Linux)作分析。 μC/OS-II嵌入式实时内核全世界数百种设备已经在使用μC/OS-II,包括手机、路由器、不间断电源、飞
[单片机]
ARM状态寄存器CPSR SPSR
订阅专栏 ARM的状态寄存器格式如上 位 为条件标志位域,用f 表示; 位 为状态位域,用s 表示; 位 为扩展位域,用x 表示; 位 为控制位域,用c 表示; 显然,常用的只有条件标志位域f和控制位域c。 如果需要操作状态寄存器,比如切换处理器模式,就需要修改控制位域中的模式位。 MRS: 程序状态寄存器到通用寄存器的数据传送指令 MSR: 通用寄存器到程序状态寄存器的数据传送指令 附: M控制位控制处理器模式,具体含义如下: M 处理器模式 可访问的寄存器 ob10000 user pc,r14~r0,CPSR 0b10001 FIQ PC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SP
[单片机]
Linux下ARM汇编语法
第一部分 Linux下ARM汇编语法 尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点 (www.gnu.org)上下载有关规范。 一. Linux汇编行结构 任何汇编行都是如下结构: ]] 每一个段以段名为开始, 以下一个段名或者文件结尾为结束。这些段都有缺省的标志(flags),连接器可以识别这些标志。(与armasm中的AREA相同)。 下面是ELF格式允许的段标志 含义 a 允许段 w 可写段 x 执
[单片机]
英伟达收购ARM再遇阻:美国监管机构提潜在反对意见
英伟达收购ARM正遭遇重重阻碍。 几日前,出于反垄断和国家安全的考虑,英国政府预计将下令对英伟达以300亿英镑收购英国芯片设计公司ARM的计划进行深入调查。 而据金融时报最新报道,美国监管机构对这项交易也提出了潜在的反对意见。 虽然越来越多的迹象表明全球监管机构可能试图阻止英伟达的这笔交易,但英伟达表示,它仍然相信此次收购对ARM、其被许可方和整个行业的好处,是一个重大的机会。 英伟达在周三晚些时候向华尔街公布了最新的季度收益时,披露了美国监管机构的反对。英伟达表示,美国联邦贸易委员会已经“表达了对 ARM 交易的担忧”,并且正在与该机构讨论“解决这些担忧的补救措施”。 2020年9月,软银集团和英伟达宣布,双方已达成确定性协议,
[手机便携]
关于STM32_GPIO的BSRR和BRR寄存器
首先, typedef struct { vu32 CRL; vu32 CRH; vu32 IDR; vu32 ODR; vu32 BSRR; vu32 BRR; vu32 LCKR; } GPIO_TypeDef; BSRR和BRR寄存器是32位的。 比较: 1)置GPIOA- BSRR低16位的某位为'1',则对应的I/O端口管脚置'1'; 置GPIOA- BSRR低16位的某位为'0',则对应的I/O端口管脚保持不变。 2)置GPIOA- BSRR高16位的某位为'1',则对应的I/O端口管脚置'0'; 置GPIOA-
[单片机]
MSP430 位操作C语言编程
前言 随着MCU 种类不断的增多,我们可选择的范围也越来越大,以前很多做51 的朋友,又开始为自己寻找新的猎物了,MSP430 无疑成为他们的首选目标。因此,大多数程序员想轻松地实现过渡,那就是,把以前做的51C 程序尽可能多的移植到430平台中,很不幸,由于处理器架构不同,直接做这些工作起来确实相当困难。首先是位操作问题,51 程序中充彻着大量的位操作,因此,不得不采用变通的方法来做,以下描述了在IAR 编译平台中实现位操作的大致方法,但必须注意到,采用IO 头文件方式的程序,能够实现类似于51 的位编程语句,但并不是真正的位操作,仅仅是语法表达为一个位操作。 方法1--宏定义方式 我们来看对一个端口中位0(BIT0)的位
[单片机]
ARM:UART串口异步通信驱动编程
1. 串口的基本概念 1.1 UART - 串行异步收发器 Universal Asynchronous Receiver/Transmitter 串行/并行(课后补充) 异步/同步:'异步/同步通信两者之间的区别' (补充) '单工/半双工/全双工: 单工:任何时候数据只能朝一个方向传输 半双工:数据可以向两个方向传输,任何同一时刻只能朝同一方向传输 全双工:数据可以同时向两个方向传输 1.2 串口通信标准 RS232 (电子工业协议EIA) - 目前最常用的'串行接口标准' 规定了'电气特性': 逻辑 0 ,+3 v ~ +15 v,SPACE 逻辑 1 ,- 3 v ~
[单片机]
STM32的位带操作分析
8051单片机可以直接对某一位IO进行读写操作,而Cortex-M3的位带操作是8051位寻址区的加强版。使用位带操作后,可以使用普通的加载/存储指令对单一的比特进行读写操作。 一、相关概念。 位带区:支持位带操作的地址区。 位带别名区:对别名地址的访问最终作用到位带区的访问上。位带别名区对位带区的访问有个地址映射过程。 二、位带操作的原理 位带操作的最终目的是想对位带区的比特位进行独立的读写操作。但它是通过对位带别名区的操作来实现的。 具体过程如下: 对位带别名区进行读写访问,位带别名区通过地址映射关系映射到相应的位带区,对位带区进行原始比特的读写操作。 三、地址映射 上面对位带操作进行了简单的介绍,那么哪些地址支持位带
[单片机]