linux 下定义寄存器宏 实现类似于STM32的寄存器操作
时间:2019-11-07
本文章向大家介绍linux 下定义寄存器宏 实现类似于STM32的寄存器操作,主要包括linux 下定义寄存器宏 实现类似于STM32的寄存器操作使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在使用cpu资源的时候,需要设置寄存器才能使用相应的资源,而在STM32里使用寄存器会类似于下面这种
GPIOA -> ODR |=1<<3;
这样就访问并设置了端口A的 ODR 寄存器,可是有很多人不明白怎么就访问了地址了,怎么就通过一个结构体的赋值语句就能设置ODR这个寄存器呢
下面我们就来自己编写一个结构体来操作寄存器
既然是结构体语句,肯定会有结构体的存在,而结构体里面的内容就是一个功能组的里面的寄存器名字,如:
这个CCM寄存器功能组里面就包含了CCM_CCR,CCM_CCDR等等,因为在一个寄存器功能组里的地址是相连或者相近的,这里面我们就可以作为一个结构体,定义如下:
typedef struct { volatile unsigned int CCR; volatile unsigned int CCDR; volatile unsigned int CSR; …… volatile unsigned int CCGR6; volatile unsigned int RESERVED_3[1]; volatile unsigned int CMEOR; }CCM_Type;
可以看见结构体里的排列顺序与寄存器的排列顺序是一样的,但会发现在结构体中出现了一个 RESERVED_3[1];这个是在官方寄存器中是没有的,这是为什么呢,我们来看看官方寄存器表
可以看见CCM_CCGR6 地址为20C4080,CCM_CMEOR地址为20C4088,中间为相隔了8个字节地址,我们可以参考上面的寄存器地址,中间相隔为4个字节,说明这两个地址之间空了一个寄存器,我们就需要把这个寄存器地址给他用其他值来进行代替,因为我们结构体的地址是连续的,如果不占用这个地址,后面的值得地址就会偏移。
现在结构体有了,还没有指定地址,我们需要给定结构体基地址,而这个基地址就是我们这个寄存器组的第一个寄存器的地址
#define CCM_address 0x20c400 //定义基地址
给结构体基地址
#define CCM ((CCM_Type*)CCM_address) //外设指针
这样我们就可以像STM32那样使用结构体来使用寄存了
CCM -> CCR |= 1<<3;
原文地址:https://www.cnblogs.com/puchi/p/11810677.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tree - 104. Maximum Depth of Binary Tree
- Tree - 298. Binary Tree Longest Consecutive Sequence
- Tree - 111. Minimum Depth of Binary Tree
- Tree - 129. Sum Root to Leaf Numbers
- Tree - 113. Path Sum II
- DFS&BFS - 200. Number of Islands
- Backtracking - 93. Restore IP Addresses
- Backtracking - 17. Letter Combinations of a Phone Number
- Backtracking - 60. Permutation Sequence
- Backtracking - 47. Permutations II
- Backtracking - 46. Permutations
- Dynamic Programming - 377. Combination Sum IV
- Backtracking - 216. Combination Sum III
- Backtracking - 40. Combination Sum II
- Backtracking - 39. Combination Sum