一:通用输入/输出端口 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相关推荐

  1. ARM汇编编程基础之一 —— 寄存器

    ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM寄存器分为2类,普通寄存器和状态寄存器 寄存器类别 寄存器在汇编中的名称 ...

  2. ARM基础教程 | ARM与RISC-V架构的区别

    关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 从2019年开始,RISC-V得到了越来越多的重视,原因有很多,ARM授权费高是关键的因素,下面就来 ...

  3. ARM基础教程 | ARM 和 x86 的区别

    关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | strongerHuang 首先给大家描述一下计算机的两种花指令集: CISC:Complex Instruct ...

  4. 物联网之ARM体系结构及接口技术一(ARM基础)

    ARM基础 认识ARM ARM 产品线: ARM 体系架构:不同ARM体系采用不同的指令集,哈弗结构是数据和指令分开存储并行(现在都是基于这种结构),早期的冯诺依曼(普林斯顿)结构是混合存储的 ARM ...

  5. ARM基础教程 | ARM多级流水线的优缺点

    关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | strongerHuang 为什么有些CPU的主频更低,但运算效率却更高呢? 比如:51单片机30M主频,STM ...

  6. ARM基础教程 | ARM、Cortex-M与ARMv8-M什么关系?

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 我们使用的处理器都有一套架构,比如intel 酷睿 i5 属于X86架构,再比如STM32F0是Co ...

  7. ASID 与 MIPS 中 TLB相关寄存器

    ASID 为了提高TLB的性能,将TLB分成Global和process-specific.global 是指常驻在tlb中不会被刷出的,例如内核空间的翻译,process-specific 是指每个 ...

  8. ARM7的相关寄存器

    本文转自百度文档 ARM7的相关寄存器     在汇编语言中寄存器 R0-R13 为保存数据或地址值的通用寄存器.它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令 ...

  9. ## ARM基础编程实验

    ARM基础编程实验 作者: Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/54582774 ...

  10. 网络基础相关知识内容

    day29 1.网络基础相关的知识 1.1 架构 1.1.1  C/S 架构   服务器/客户端 优势:能够充分发挥PC机的性能 1.1.2  B/S 架构  服务器/浏览器 (隶属于C/S架构) 优 ...

最新文章

  1. Thymeleaf 学习笔记 (2)
  2. 刚开始走向工作岗位初遇到的一些问题
  3. Spring全家桶中的日志框架
  4. Git笔记(14) 分支开发工作流
  5. curve函数 roc_sklearn-roc_curve
  6. Java:Overriding与Overloading
  7. 通过HttpModule实现IP地址屏蔽功能
  8. 关于winfrom中如何快速导出DataGridView数据到excel中的问题
  9. 广数980tc3从u盘复制到系统_广数980tc3数控车床
  10. 彻底理解View事件体系!
  11. Ambisonics解释:声音工程师指南
  12. 高盛为什么认为中国AI领域将超越美国?
  13. 如何获取多屏幕显示器工作区域
  14. 程序员转行,干什么比较好
  15. web前端新手入门:中国互联网的发展史
  16. UltraEdit注册机使用教程
  17. Spark SQL原理及常用方法详解(二)
  18. 通过对虚拟磁盘进行碎片整理来提高VMware VM性能
  19. 公网远程访问内网群晖NAS 7.X版 【内网穿透】
  20. 学生免费申请JetBrains许可

热门文章

  1. 容器技术20年:容器引擎与江湖门派
  2. 订阅付费专栏,支付299.9元,免费送代码
  3. 【图像去噪】基于matlab鲁棒PCA图像去噪【含Matlab源码 463期】
  4. 【优化覆盖】基于matlab模因算法求解集群无线传感器网络中节能覆盖控制优化问题【含Matlab源码 1563期】
  5. 毕设题目:Matlab故障分析
  6. 【图像融合】基于matlab GUI像素点图像融合【含Matlab源码 783期】
  7. 【语音识别】基于matlab傅立叶变换0-9数字语音识别【含Matlab源码 384期】
  8. 【CVRP】基于matlab节约算法求解带容量的车辆路径规划问题【含Matalb源码 157期】
  9. 【TWVRP】基于matlab遗传算法求解带时间窗的车辆路径问题【含Matlab源码 002期】
  10. b站 前端构架_技术干货:哔哩哔哩(B站)功能框架图