寄存器地址与数据配置
寄存器地址说明
- 存储寄存器地址的大小为4位,也就是地址偏移相差0x4 ,每位存储1字节数据,共4字节(32位)
-
0x400 == 1K
-
0x10 0000 == 1M
-
0X4000 0000 == 1G
-
0X8000 0000 == 2G
赋值方式
格式:寄存器地址 |= value(置1)、寄存器地址 &= value(置0)
例子:
GPIOB_CRL &= ~(1111<<4*N); //左移4*N位,先复位
GPIOB_CRL |= (1101<<4*N); //左移4*N位,再置位
含义:
-
-
-
1101:寄存器配置的模式
-
4*N:假设以每4位为一组,第N组
-
1101<<4*2 = 1101 0000 0000
-
-
或者
HWREG(BASE + OFFSET) &=DATA
HWREG(BASE + OFFSET) |=DATA //置位
BASE:基地址,OFFSET:偏移地址 ,DATA:模式或者数据
#define HWREG(x) *((volatile unsigned int *)(x)))
-
把x转化为volatile unsigned int *(地址/指针)类型,并*取值(内容)
-
对寄存器里面的内容进行操作
volatile
-
volatile是一个特征修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
-
volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
-
精确地说就是,编译器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
-
#define __IO volatile
寄存器置1置0
#define setbit(x,y) x |= (1<<y) //将x的第y位置1
#define clrbit(x,y) x &= ~(1<<y) //将x的第y位清0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程