ARM基础相关寄存器的讲解-LPC21XX
一:通用输入/输出端口 GPIO
1:特性
(1 )可以独立控制每个 GPIO 口的方向(输入/输出模式);
(2 )可以独立设置每个 GPIO 口的输出状态(高/低电平);
(3 )所有 GPIO 口在复位后默认为输入状态。
2:LPC2114 / 2124 系列 GPIO 描述
二: 引脚功能选择寄存器PINSELn(n=0 ,1,2)
1:引脚连接模块寄存器映射
2: 引脚功能选择寄存器 0 ( PINSEL0 )
3: 引脚功能选择寄存器 1 ( PINSEL1 )
4: 引脚功能选择寄存器 2 ( PINSEL2 )
5:总结
PINSELx 寄存器中,每 2 位控制了一个引脚的功能选择,每个引脚的四个功能选择分别对应于这两位的 00 、01 、 10 、
11 四个值,而当设置为 00 时,这个引脚总是 GPIO 功能。
例子补充:
分析:
1:P0.8,P0.9是属于PINSEL0寄存器
2:P0.8,P0.9对应[16,19]位
3:TxD1,RxD1对应01 01
整个思考过程:
1:通过二进制进行表示
①:P0.8,P0.9对应[16,19]位
0000 0000 0000 **0000** 0000 0000 0000 0000
②:TxD1,RxD1对应01 01
0000 0000 0000 **0101** 0000 0000 0000 0000
2:通过十六进制进行表示
PINSEL0=0x05<<16// (0101对应16进制0x05;0x05左移16位就可以得到这个数)
3:改进
①:(PINSEL0&FFF0FFFF)
这个的意思就是不管PINSEL0的结果如何,在[16,19]位上的值必为0(这也是为什么使用与逻辑的原因:只要有一个为0即整个结果为0),PINSEL0初始值上的其他位也不会受到任何影响,开发者只关心对应位即可。
②:(PINSEL0&FFF0FFFF)|(0x05<<16)
这个意思就是把自己应该关心的位上的二进制数进行或运算,为什么进行或运算,其实很容易理解吧,在上面已经讲解了左面相关位上的值是为0的,现在我只需看右面的值,只有右面有一位为1,即该位为1,上面我们已经计算出右面的值为[16,19]对应为01,01,进行或运算后还是01,01。
三:GPIO原理图
四:GPIO 相关寄存器的详细说明
1:使用前提
(使用前提:当PINSELx为00时使用GPIO功能)
2:GPIO 相关寄存器
3:IOnPIN引脚值寄存器
4:IOxDIR 方向寄存器
5: IOxSET 输出置位寄存器
(使用前提当IOxDIR为输出方向时)
6: IOxCLR 输出清零寄存器
(使用前提当IOxDIR为输出方向时)
备注:当PINSELx为00时使用GPIO功能,这里是P0.0就是右第一位16进制表示为1100(1100=8+4=C)时,P0.0采用GPIO功能;当IO0DIR为1时为输出模式,当为0时无效,当IO0SET输出为1时为高电平,输出为0时无效。
备注:IONCLR当输出为1时输出低电平;而IO0SET恰恰相反,当输出为1时输出高电平,所以bak&0x000000F0这里采用与逻辑,P0.3 ~ P0.0本应该在右边第一位,为什么在第二位呢?,是因为获取bak的值是第P0.7 ~ P0.4 位上的值,所以这里采用右边第二位,进行运算后,再进行右移位,这样就做到采集P0.7 ~ P0.4上的值,然后赋值给P0.3~P0.0上进行输出操作。
总结:
通过下面的方式来操作一下设置相应寄存器
怎么给指定引脚输出高电平?
在LPC21XX中引脚在GPIO功能中对引脚进行操作,要先配置相应参数,比如第一步要设置GPIO功能,这个由PINSELN寄存器决定(设置00),然后规定该引脚是输入还是输出这个由IONDIR寄存器决定(1:输出,0:输入),如果是输出,输出是高电平还是低点平这个由IONSET(1:高;0:无效)和IONCLR(1:低;0:无效)决定。
栗子:给P0_19引脚输出高电平;
①:P0_19设为GPIO功能(通过查上面的表可知:P0_19在PINSEL1寄存器中)
指定位设为00(其实一般其他位没有设置除了GPIO功能外的功能,常常全设为0)
//【1】P0_19设为GPIO功能
PINSEL1=0x00000000;
②:由于是输出,设置IO0DIR寄存器相应位设为1(IO0DIR:P0_0~P0_31)
P0_19就是19位
//二进制
0000 0000 0000 1000 0000 0000 0000 0000
//变为16进制
I0DIR=0x00080000;
//每次都像这样的话是不是有点复杂了呢(使用移步)
其实容易发现1000可以通过左移16位(0x08)得到
0x08<<16
I0DIR=0x08<<16;
但是这里没有任何限制,所以直接就把I0DIR设为全1状态
//【2】设置P0_19为输出功能
I0DIR=0xFFFFFFFF;
③:输出高电平(IONSET寄存器上相应位设为1)
和上面一样(但是这里最好指定好对应位)
//二进制
0000 0000 0000 1000 0000 0000 0000 0000
16进制
//变为16进制
IO0SET=0x00080000;
0x08<<16
IO0SET=0x08<<16;
【3】将P0_19设为输出高电平
IO0SET=0x01<<19;
使用 GPIO 注意要点:
(1 )引脚设置为输出方式时,输出状态由 IOxSET 和 IOxCLR 中最后操作的寄存器决定。
(2 )大部分 GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为 4mA (短时间极限值 40mA )。
(3 )复位后默认所有 GPIO 为输入模式。
ARM基础相关寄存器的讲解-LPC21XX相关推荐
- ARM汇编编程基础之一 —— 寄存器
ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM寄存器分为2类,普通寄存器和状态寄存器 寄存器类别 寄存器在汇编中的名称 ...
- ARM基础教程 | ARM与RISC-V架构的区别
关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 从2019年开始,RISC-V得到了越来越多的重视,原因有很多,ARM授权费高是关键的因素,下面就来 ...
- ARM基础教程 | ARM 和 x86 的区别
关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | strongerHuang 首先给大家描述一下计算机的两种花指令集: CISC:Complex Instruct ...
- 物联网之ARM体系结构及接口技术一(ARM基础)
ARM基础 认识ARM ARM 产品线: ARM 体系架构:不同ARM体系采用不同的指令集,哈弗结构是数据和指令分开存储并行(现在都是基于这种结构),早期的冯诺依曼(普林斯顿)结构是混合存储的 ARM ...
- ARM基础教程 | ARM多级流水线的优缺点
关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | strongerHuang 为什么有些CPU的主频更低,但运算效率却更高呢? 比如:51单片机30M主频,STM ...
- ARM基础教程 | ARM、Cortex-M与ARMv8-M什么关系?
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 我们使用的处理器都有一套架构,比如intel 酷睿 i5 属于X86架构,再比如STM32F0是Co ...
- ASID 与 MIPS 中 TLB相关寄存器
ASID 为了提高TLB的性能,将TLB分成Global和process-specific.global 是指常驻在tlb中不会被刷出的,例如内核空间的翻译,process-specific 是指每个 ...
- ARM7的相关寄存器
本文转自百度文档 ARM7的相关寄存器 在汇编语言中寄存器 R0-R13 为保存数据或地址值的通用寄存器.它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令 ...
- ## ARM基础编程实验
ARM基础编程实验 作者: Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/54582774 ...
- 网络基础相关知识内容
day29 1.网络基础相关的知识 1.1 架构 1.1.1 C/S 架构 服务器/客户端 优势:能够充分发挥PC机的性能 1.1.2 B/S 架构 服务器/浏览器 (隶属于C/S架构) 优 ...
最新文章
- Thymeleaf 学习笔记 (2)
- 刚开始走向工作岗位初遇到的一些问题
- Spring全家桶中的日志框架
- Git笔记(14) 分支开发工作流
- curve函数 roc_sklearn-roc_curve
- Java:Overriding与Overloading
- 通过HttpModule实现IP地址屏蔽功能
- 关于winfrom中如何快速导出DataGridView数据到excel中的问题
- 广数980tc3从u盘复制到系统_广数980tc3数控车床
- 彻底理解View事件体系!
- Ambisonics解释:声音工程师指南
- 高盛为什么认为中国AI领域将超越美国?
- 如何获取多屏幕显示器工作区域
- 程序员转行,干什么比较好
- web前端新手入门:中国互联网的发展史
- UltraEdit注册机使用教程
- Spark SQL原理及常用方法详解(二)
- 通过对虚拟磁盘进行碎片整理来提高VMware VM性能
- 公网远程访问内网群晖NAS 7.X版 【内网穿透】
- 学生免费申请JetBrains许可
热门文章
- 容器技术20年:容器引擎与江湖门派
- 订阅付费专栏,支付299.9元,免费送代码
- 【图像去噪】基于matlab鲁棒PCA图像去噪【含Matlab源码 463期】
- 【优化覆盖】基于matlab模因算法求解集群无线传感器网络中节能覆盖控制优化问题【含Matlab源码 1563期】
- 毕设题目:Matlab故障分析
- 【图像融合】基于matlab GUI像素点图像融合【含Matlab源码 783期】
- 【语音识别】基于matlab傅立叶变换0-9数字语音识别【含Matlab源码 384期】
- 【CVRP】基于matlab节约算法求解带容量的车辆路径规划问题【含Matalb源码 157期】
- 【TWVRP】基于matlab遗传算法求解带时间窗的车辆路径问题【含Matlab源码 002期】
- b站 前端构架_技术干货:哔哩哔哩(B站)功能框架图