位读写权限
简写 | 定义 |
---|---|
rw | (读写权) 可由程序进行读写 |
r | (读权) 可由程序读取该位 |
w | (写权) 可由程序写入该位 |
rc_w1 | (读写权) 可由程序读取该位,向该位写1时清除位,写0对该位无影响 |
rc_w0 | (读写权) 可由程序读取该位 ,向该位写0时清除位,写1对该位无影响 |
rc_r | (读写权) 可由程序读取该位,读取时自动对该位置零,写0对该位无影响 |
rs | (读写权) 可由程序读取该位,对该位写0时无影响 |
t | (写权) 写入1时触发,写入0时无影响 |
读写方法
寄存器存在于一个特定内存位置上,对这个位置进行读写即可
D语言内操作的代码如下
import core.volatile;
uint *GPIOE_MODER = cast(uint*)0x40021000;
auto read_val = volatileLoad(GPIOE_MODER); // 读取寄存器内的值
volatileStore(GPIOE_MODER ,read_val ); // 把值写回寄存器
其他相关
volatile 关键字的作用就避免程序优化导致内存地址的值被缓冲在寄存器内,不能即使反应寄存器状态.
由于D没有volatile 关键字,所以需要通过 uint volatileLoad(uint* ptr)
函数对寄存器地址进行读取操作 void volatileStore(uint* ptr, uint value)
函数对寄存器进行写操作.
mculib4d
这是我搞的一套d语言搞 Cortex-M4 单片机的库,详情可以在 https://gitee.com/sdvcn/mculib4d 这里了解