MCU寄存器的位运算方式(读写+拼接字节数据)

原创 云深之无迹 2025-02-07 21:57

我一直想把嵌入式学到精通,学到现在终于是有点感觉了。MCU永远离不开一个个寄存器的bit。而且对于数据来讲也是字节的流转。

我觉得嵌入式精通第一课应该是位运算。

我们对寄存器的操作其实就是两个:读,写。

读取寄存器.提取特定位: 获取寄存器中我们感兴趣的位的状态。
方法:将寄存器值和一个位掩码做与运算。位掩码中,只有我们感兴趣的位为1,其他位为0。这样,与运算的结果就只保留了我们感兴趣的位。

这个东西就像勺子,把我们感兴趣的东西挖走

假设我们要判断一个寄存器的第5位是否为1,位掩码为00100000。将寄存器值和这个掩码做与运算,如果结果的第5位为1,说明原寄存器的第5位也为1。

记忆:看见&就是读取位。

 将提取出的位与一个常数比较。如果相等,说明硬件处于某种状态。

读取到ADC就绪,开始读取

写入寄存器.清除特定位(将寄存器中某一位的值清零)

清除其实是复杂的

最关键一步就是这个取反

将寄存器值和一个取反的位掩码做与运算。取反的位掩码中,我们想要清零的位为0,其他位为1。这样,与运算的结果就会将要清零的位清零。

自己来算一下,我们目标是清除3位置的1.
第三步的时候是读取,可以看到3位置上面是1.
接着对掩码取反,然后与运算。
最后的结构就是第三位为0了。
我们可以这样记,清除的时候,先读取,然后再清楚。也就是多了一个步骤。
上面是读位和清位,下面就是写位。使用或运算|

记住这个开关的样子

就好像是开关的竖

设置特定位:将寄存器中某一位的值设置为1。
方法:将寄存器值和一个位掩码做或运算。位掩码中,我们想要设置为1的位为1,其他位为0。这样,或运算的结果就会将要设置的位设置为1。

置位,直接|

清除的步骤多,要与运算和掩码翻转

读取位为清除步骤的一半儿

请把这个刻在骨子里面。

我们还有一个是这样的

寄存器的操作是连续的,如果这个寄存器很大,我们一位一位的就不好了。可以先都清了,然后直接把值放进去。

它就是一个复合操作:
  1. (~Mask) 取反,生成一个 仅 Mask 指定位为 0,其余位为 1 的掩码
  2. Reg & (~Mask) 先清零 Mask 指定的位
  3. | (Value) 再用 Value 赋值

看这个ADC的看门狗功能


|是或运算,有1为1,所以也就是像加法。
通过 |(按位或)操作,将这两个掩码组合成一个掩码,表示要操作的位区域。

在这里

分了俩半了,各16位

看见了新的运算符号

ADC_WatchdogStruct->ADC_WatchdogVth << 16:ADC_WatchdogStruct->ADC_WatchdogVth 是存储上阈值的变量。
左移 16 位将上阈值移到 AWDTR 寄存器的高 16 位位置(VTH 占用高 16 位)。
ADC_WatchdogStruct->ADC_WatchdogVtl:ADC_WatchdogStruct->ADC_WatchdogVtl 是存储下阈值的变量。
它直接放在 AWDTR 寄存器的低 16 位(VTL 占用低 16 位)。

我们假设这个值是这样的

上阈值左移 16 位:
ADC_WatchdogStruct->ADC_WatchdogVth << 16 // 结果:0x12340000
下阈值(保持原位不动):
ADC_WatchdogStruct->ADC_WatchdogVtl // 结果:0x5678
组合两个值:
(0x12340000 | 0x5678) // 结果:0x12345678
最终,0x12345678 就是写入 AWDTR 寄存器的值。
总结一下:我们很多时候是要多字节操作寄存器的,这里的例子比较极端。
还有一类是从寄存器读取数据来拼接的。

ADS1115

要发送两个字节的数据,先搞个数组:

regData[0] = data >> 8;
将 16 位的 data 右移 8 位,提取高 8 位数据,并将其存储在 regData[0] 中。
regData[1] = data & 0xFF;
将 16 位的 data 与 0xFF 进行与运算,提取低 8 位数据,并将其存储在 regData[1] 中。这样,regData 数组就包含了要写入的 16 位数据的两个字节。
0xFF 的二进制表示为 11111111,即所有位都为 1。
与 0xFF 进行与运算相当于保留 data 的低 8 位,而高位部分由于与 0 相与,结果都为 0。
由于 0xFF 的高 8 位都是 0,(没1肯定算不出来)所以与 data 的高 8 位进行与运算时,结果必定为 0。而 data 的低 8 位与 0xFF 的低 8 位进行与运算,则保留了原来的值。

最后发个数组出去

通过这两个位运算操作,我们可以将一个 16 位的无符号整数拆分成两个 8 位的无符号整数,分别存储在 regData[0] 和 regData[1] 中。这在处理多字节数据时非常常见。

假设 data 的值为 0x1234(二进制为 0001 0010 0011 0100),那么:
regData[0] = data >> 8; 
regData[0] 的值为 0x12(二进制为 0001 0010)。
regData[1] = data & 0xFF; 
regData[1] 的值为 0x34(二进制为 0011 0100
这就是嵌入式,这就是底层。

从MPU6050看传感器原始数据的处理方式-位运算   以往的位运算。

评论
  • 在智慧城市领域中,当一个智慧路灯项目因信号盲区而被迫增设数百个网关时,当一个传感器网络因入网设备数量爆增而导致系统通信失效时,当一个智慧交通系统因基站故障而导致交通瘫痪时,星型网络拓扑与蜂窝网络拓扑在构建广覆盖与高节点数物联网网络时的局限性便愈发凸显,行业内亟需一种更高效、可靠与稳定的组网技术以满足构建智慧城市海量IoT网络节点的需求。星型网络的无线信号覆盖范围高度依赖网关的部署密度,同时单一网关的承载设备数量有限,难以支撑海量IoT网络节点的城市物联系统;而蜂窝网络的无线信号覆盖范围同样高度依
    华普微HOPERF 2025-03-24 17:00 177浏览
  • 文/Leon编辑/cc孙聪颖‍“无AI,不家电”的浪潮,正在席卷整个家电行业。中国家电及消费电子博览会(AWE2025)期间,几乎所有的企业,都展出了搭载最新AI大模型的产品,从电视、洗衣机、冰箱等黑白电,到扫地机器人、双足机器人,AI渗透率之高令人惊喜。此番景象,不仅让人思考:AI对于家电的真正意义是什么,具体体现在哪些方面?作为全球家电巨头,海信给出了颇有大智慧的答案:AI化繁为简,将复杂留给技术、把简单还给生活,是海信对于AI 家电的终极答案。在AWE上,海信发布了一系列世俱杯新品,发力家
    华尔街科技眼 2025-03-23 20:46 78浏览
  • 人形机器人产业节奏预估:2024年原型机元年,2025年小规模量产元年。当宇树科技H1人形机器人以灵动的手部动作在春晚舞台上演创意融合舞蹈《秧Bot》,舞出"中国智造"时,电视机前十几亿观众第一次深刻意识到:那个需要仰望波士顿动力的时代正在落幕。*图源:宇树科技短短数周后,宇树G1机器人又用一段丝滑的街舞在网络收割亿级播放量,钢铁之躯跳出赛博朋克的浪漫。2月11日,宇树科技在其京东官方旗舰店上架了两款人形机器人产品,型号分别为Unitree H1和G1。2月12日,9.9万元的G1人形机器人首批
    艾迈斯欧司朗 2025-03-22 21:05 137浏览
  • 在嵌入式语音系统的开发过程中,广州唯创电子推出的WT588系列语音芯片凭借其优异的音质表现和灵活的编程特性,广泛应用于智能终端、工业控制、消费电子等领域。作为该系列芯片的关键状态指示信号,BUSY引脚的设计处理直接影响着系统交互的可靠性和功能拓展性。本文将从电路原理、应用场景、设计策略三个维度,深入解析BUSY引脚的技术特性及其工程实践要点。一、BUSY引脚工作原理与信号特性1.1 电气参数电平标准:输出3.3V TTL电平(与VDD同源)驱动能力:典型值±8mA(可直接驱动LED)响应延迟:语
    广州唯创电子 2025-03-26 09:26 83浏览
  •       知识产权保护对工程师的双向影响      正向的激励,保护了工程师的创新成果与权益,给企业带来了知识产权方面的收益,企业的创新和发明大都是工程师的劳动成果,他们的职务发明应当受到奖励和保护,是企业发展的重要源泉。专利同时也成了工程师职称评定的指标之一,专利体现了工程师的创新能力,在求职、竞聘技术岗位或参与重大项目时,专利证书能显著增强个人竞争力。专利将工程师的创意转化为受法律保护的“无形资产”,避免技术成果被他人抄袭或无偿使
    广州铁金刚 2025-03-25 11:48 131浏览
  • WT588F02B是广州唯创电子推出的一款高性能语音芯片,广泛应用于智能家电、安防设备、玩具等领域。然而,在实际开发中,用户可能会遇到烧录失败的问题,导致项目进度受阻。本文将从下载连线、文件容量、线路长度三大核心因素出发,深入分析烧录失败的原因并提供系统化的解决方案。一、检查下载器与芯片的物理连接问题表现烧录时提示"连接超时"或"设备未响应",或烧录进度条卡顿后报错。原因解析接口错位:WT588F02B采用SPI/UART双模通信,若下载器引脚定义与芯片引脚未严格对应(如TXD/RXD交叉错误)
    广州唯创电子 2025-03-26 09:05 80浏览
  • 在智能终端设备开发中,语音芯片与功放电路的配合直接影响音质表现。广州唯创电子的WTN6、WT588F等系列芯片虽功能强大,但若硬件设计不当,可能导致输出声音模糊、杂音明显。本文将以WTN6与WT588F系列为例,解析音质劣化的常见原因及解决方法,帮助开发者实现清晰纯净的语音输出。一、声音不清晰的典型表现与核心原因当语音芯片输出的音频信号存在以下问题时,需针对性排查:背景杂音:持续的“沙沙”声或高频啸叫,通常由信号干扰或滤波不足导致。语音失真:声音断断续续或含混不清,可能与信号幅度不匹配或功放参数
    广州唯创电子 2025-03-25 09:32 72浏览
  • 无论你是刚步入职场的新人,还是已经有几年经验的职场老手,培养领导力都是职业发展中一个至关重要的环节。拥有良好的领导能力不仅能让你从人群中脱颖而出,也能让你在团队中成为一个值得信赖、富有影响力的核心成员。什么是领导力?领导力并不仅仅意味着“当老板”或者“发号施令”。它更多地是一种能够影响他人、激发团队潜能,并带领大家实现目标的能力。一位优秀的领导者需要具备清晰的沟通能力、解决问题的能力,以及对人心的深刻理解。他们知道如何激励人心,如何在压力下保持冷静,并能在关键时刻做出正确的决策。如何培养领导力?
    优思学院 2025-03-23 12:24 94浏览
  • 在智能终端设备快速普及的当下,语音交互已成为提升用户体验的关键功能。广州唯创电子推出的WT3000T8语音合成芯片,凭借其卓越的语音处理能力、灵活的控制模式及超低功耗设计,成为工业控制、商业终端、公共服务等领域的理想选择。本文将从技术特性、场景适配及成本优势三方面,解析其如何助力行业智能化转型。一、核心技术优势:精准、稳定、易集成1. 高品质语音输出,适配复杂环境音频性能:支持8kbps~320kbps宽范围比特率,兼容MP3/WAV格式,音质清晰自然,无机械感。大容量存储:内置Flash最大支
    广州唯创电子 2025-03-24 09:08 192浏览
  • 在人工智能与物联网技术蓬勃发展的今天,语音交互已成为智能设备的重要功能。广州唯创电子推出的WT3000T8语音合成芯片凭借其高性能、低功耗和灵活的控制方式,广泛应用于智能家居、工业设备、公共服务终端等领域。本文将从功能特点、调用方法及实际应用场景入手,深入解析这款芯片的核心技术。一、WT3000T8芯片的核心功能WT3000T8是一款基于UART通信的语音合成芯片,支持中文、英文及多语种混合文本的实时合成。其核心优势包括:高兼容性:支持GB2312/GBK/BIG5/UNICODE编码,适应不同
    广州唯创电子 2025-03-24 08:42 161浏览
  • 核心板简介创龙科技 SOM-TL3562 是一款基于瑞芯微 RK3562J/RK3562 处理器设计的四核 ARM C ortex-A53 + 单核 ARM Cortex-M0 全国产工业核心板,主频高达 2.0GHz。核心板 CPU、R OM、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率 100%。核心板通过 LCC 邮票孔 + LGA 封装连接方式引出 MAC、GMAC、PCIe 2.1、USB3.0、 CAN、UART、SPI、MIPI CSI、MIPI
    Tronlong 2025-03-24 09:59 188浏览
  •        当今社会已经步入了知识经济的时代,信息大爆炸,新鲜事物层出不穷,科技发展更是一日千里。知识经济时代以知识为核心生产要素,通过创新驱动和人力资本的高效运转推动社会经济发展。知识产权(IP)应运而生,成为了知识经济时代竞争的核心要素,知识产权(Intellectual Property,IP)是指法律赋予人们对‌智力创造成果和商业标识等无形财产‌所享有的专有权利。其核心目的是通过保护创新和创意,激励技术进步、文化繁荣和公平竞争,同时平衡公共利益与
    广州铁金刚 2025-03-24 10:46 78浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦