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(这也是为什么使用与逻辑的原因),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上进行输出操作。
使用 GPIO 注意要点:
(1 )引脚设置为输出方式时,输出状态由 IOxSET 和 IOxCLR 中最后操作的寄存器决定。
(2 )大部分 GPIO 输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为 4mA (短时间极限值 40mA )。
(3 )复位后默认所有 GPIO 为输入模式。
推荐阅读
-
神经网络相关之基础概念的讲解
-
单片机ARM开发基础开发(3)--单个数码LED的显示输出系统设计(LPC21XX)
-
ARM开发6.3.1 基础实训( 1 ) 单个数码 LED 的显示输出系统设计( 1)--LPC21XX
-
ARM开发7.3.2 基础实训( 2 ) 单个按键的输入系统设计( 2)--LPC21XX
-
ARM基础相关寄存器的讲解-LPC21XX
-
ARM开发7.3.1 基础实训( 1 ) 单个按键的输入系统设计( 1 )--LPC21XX
-
单片机ARM开发基础开发(2)--单个LED显示单个按键的状态(LPC21XX)
-
举例讲解JavaScript中关于对象操作的相关知识_基础知识
-
举例讲解JavaScript中关于对象操作的相关知识_基础知识
-
关于JavaScript基础的相关讲解