修改寄存器的位操作方法

zhj868 zhj868     2023-03-22     553

关键词:

使用 C 语言对寄存器赋值时,我们常常要求只修改该寄存器的某几位的值,且其它的寄存器位不变,这个时候我们就需要用到 C 语言的位操作方法了。
1. 把变量的某位清零
此处我们以变量 a 代表寄存器,并假设寄存器中本来已有数值,此时我们需要把变量a 的某一位清零,且其它位不变,方法见代码清单 6-1。
技术图片
2. 把变量的某几个连续位清零
由于寄存器中有时会有连续几个寄存器位用于控制某个功能,现假设我们需要把寄存器的某几个连续位清零,且其它位不变,方法见代码清单 6-2。
技术图片
3. 对变量的某几位进行赋值。
寄存器位经过上面的清零操作后,接下来就可以方便地对某几位写入所需要的数值了,且其它位不变,方法见代码清单 6-3,这时候写入的数值一般就是需要设置寄存器的位参数。
技术图片
4. 对变量的某位取反
某些情况下,我们需要对寄存器的某个位进行取反操作,即 1 变 0 ,0 变 1,这可以直接用如下操作,其它位不变,见代码清单 6-4。

 技术图片

 

 

 
 
 
 
 
 
 
 

从最高有效位或高位开始提取寄存器的位

】从最高有效位或高位开始提取寄存器的位【英文标题】:Extractbitsofaregisterstartingwiththemostsignificantbit,orahighbit【发布时间】:2019-04-0204:55:07【问题描述】:编辑:我没想到这个问题会如此迅速地引起关注。根据我已经收到的答案... 查看详情

创建自己的函数库

...​​​3.对比:​​​​二、构建库函数​​​​1.修改寄存器地址封装​​​​2.定义访问的结构体指针和引脚​​​​3.创建封装函数​​​​3.1创建拉低引脚函数​​​​3.2创建引脚初始化函数​​​​总结​​前言回顾一... 查看详情

uvm寄存器模型怎么给定数据的位宽

参考技术A计算机在访问存储器时,用地址来进行索引,也就是根据地址来找到数据进行存储或读取而计算机内最小的地址单位是字节地址,也就是按照字节来编排存储区的地址由于每个字节是8位二进制数据,所以读写数据时,... 查看详情

c语言-常用寄存器位操作总结(代码片段)

STM32学习笔记-常用寄存器操作常用的寄存器位操作总结1.常用的位操作操作含义&与相同为1,不同为0|或不同为1,相同为0^异或相同为0,相异为1~取反0变1,1变0<<左移左移若干位,高位丢弃,低位补0>>右移右移若干位,... 查看详情

C中的位设置逻辑

...时间】:2016-12-0306:16:24【问题描述】:我很难理解在32位寄存器中成功设置位背后的逻辑。下面是函数的伪代码:读取主寄存器,如果第29位CREG_CLK_CTRL_I2C0没有设置,则设置uint32_tcreg;//readtheCREGMasterregistercreg=READ_ARC_REG((volatileuint32_... 查看详情

推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,io访问更便捷,无需用户计算位置(代码片段)

...响。不过在STM32里面就没有sbit关键字了,不能直接对寄存器的进行单个位操作,如果你想单独修改寄存器某一位的话,其实还是有办法的—位带操作。说明:M3,M4内核都支持硬件位带操作,M7内核不支持。... 查看详情

推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,io访问更便捷,无需用户计算位置(代码片段)

...响。不过在STM32里面就没有sbit关键字了,不能直接对寄存器的进行单个位操作,如果你想单独修改寄存器某一位的话,其实还是有办法的—位带操作。说明:M3,M4内核都支持硬件位带操作,M7内核不支持。... 查看详情

创建自己的函数库(代码片段)

...定义:2.作用:3.对比:二、构建库函数1.修改寄存器地址封装2.定义访问的结构体指针和引脚3.创建封装函数3.1创建拉低引脚函数3.2创建引脚初始化函数总结前言回顾一下,前面点亮led灯我们都进行了哪些操作。首... 查看详情

java中double的位操作

我现在需要进行两个正整数的位操作,包括与,或和异或。可是我存的大都是double大小的值。(基本超过float的128位),而double,float又都是不可以进行位操作的。求助有没有能够都那么大的数进行位操作的办法。最好能够噗叽噗... 查看详情

ANSI C中字符的位操作[重复]

】ANSIC中字符的位操作[重复]【英文标题】:Bit-OperationsonacharacterinANSIC[duplicate]【发布时间】:2020-05-2617:30:31【问题描述】:谁能告诉我在C中用二进制表示字符的好方法?我需要将给定的字符视为1和0的序列。例如,如果我得到\'a... 查看详情

loongarch架构之指令集(代码片段)

...访问内存,其他至零至的操作对象均是处理器内部的寄存器或指令码中的立即数。2、龙芯架构分为32位和64位两个版本,分别LA32架构和LA64架构,LA64架构应用级向下二进制兼容LA32架构。二、指令编码格式1.寄存器基础... 查看详情

linux下操作gpio寄存器的方法

一、在驱动中:  1.用的时候映射端口:ioremap;  #defineGPIO_OFT(x)((x)-0x56000000)  #defineGPFCON(*(volatileunsignedlong*)(gpio_va+GPIO_OFT(0x56000050)))  gpio_va=ioremap(0x56000000,0x100000);//物理地址0x56000000,映射区分配的大小0 查看详情

为啥这个 PIC 汇编代码中的位不移位?

...40开发板。我在RA0-RA3上有4个LED。我想通过移动R5“用户”寄存器 查看详情

处理器管理

处理器与寄存器处理器部件的简单示意用户程序可见寄存器可以使程序员减少访问主存储器的次数,提高指令执行的效率,所有程序可使用,包括应用程序和系统程序数据寄存器:又称通用寄存器地址寄存器:索引、栈指针、段... 查看详情

XMM 寄存器的按位取反

】XMM寄存器的按位取反【英文标题】:BitwisenegationofXMMregister【发布时间】:2016-01-1916:34:45【问题描述】:如何获得XMM寄存器中值的按位取反?据我所知,没有这样的指示。唯一带有否定的指令是pandn,但要使用它来简单地否定一... 查看详情

stm32学习5寄存器编程led显示数字(代码片段)

STM32学习5寄存器编程LED显示数字一、使用宏定义GPIO要显示的位二、定义数码管显示数字三、主体程序本文对前一节程序稍加改动,用数码管显示0-9的数字。一、使用宏定义GPIO要显示的位//定义一个宏可以设置显示或关闭显示... 查看详情

如何修改整数中的位?

】如何修改整数中的位?【英文标题】:Howtomodifybitsinaninteger?【发布时间】:2012-08-2319:37:35【问题描述】:我有一个值为7(0b00000111)的整数,我想用13(0b00001101)的函数替换它。替换整数中的位的最佳算法是什么?例如:set_bits(someva... 查看详情

stm32学习5寄存器编程led显示数字(代码片段)

STM32学习5寄存器编程LED显示数字一、使用宏定义GPIO要显示的位二、定义数码管显示数字三、主体程序本文对前一节程序稍加改动,用数码管显示0-9的数字。一、使用宏定义GPIO要显示的位//定义一个宏可以设置显示或关闭显示... 查看详情