gpt4 book ai didi

c - 对 32 位寄存器执行 8 位写入

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:52 24 4
gpt4 key购买 nike

我正在尝试读取 Samd21 MCU 上给定 generic clock generatorclock source 值。

数据表说,如果我想读取 GENCTRL 寄存器(包含时钟源值),我需要“执行 8 位写入”然后读取寄存器。鉴于寄存器是 32 位的,我该怎么做?

恐怕,通过执行以下操作,我实际上是在更改 generic clock generator X 的配置:

GCLK->GENCTRL.reg = GCLK->GENCTRL.reg & 0xFFFFFFF0 | 0x0000000X

请记住,GENCTRL 的低 8 位保留用于通用时钟发生器的 ID。

波纹管是 datasheet 的一部分包含读取 GENCTRL 寄存器的指令。

Datasheet

最佳答案

ARM 寄存器是 32 位的。外设寄存器(通常)将按 4 字节偏移排列,但并不总是实现这意味着的所有 32 位。

当外设寄存器的高位“读为零,忽略写入”时,这一点最为明显。您可能偶尔会看到更新或功能更多的外围设备版本,其中一些未使用的位将来会被使用。

根据特定外设与内核的连接方式,通常可以对内存的任何区域执行字节、半字或字访问。如果支持,则只会更新相关字节。如果存在限制(例如,仅支持字节访问的 32 位 APB 总线),则应在文档中明确标识。使用 AA64 处理器,甚至可以同时写入两个寄存器!

请注意外设“知道”访问大小(至少信息存在于内部总线上),因此可以将字节访问指定为字的不同行为(即使这是一种最好避免的混淆行为)。总而言之,任何内存映射外设都更多地是总线的观察者,而不是内存的真正实现——设计者可以自由地使用完整的地址/数据/控制总线位组合,并实现位掩码、读/修改/写、访问锁、魔法值等。

关于c - 对 32 位寄存器执行 8 位写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55561688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com