点亮LED灯
2015-08-25 19:32
211 查看
led灯的原理图一般有以下两种:
GPIO的英文全称为General-Purpose IO ports,也就是通用IO接口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路,有的需要CPU为之提供控制手段,有的则需要被CPU用做输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了。比如,控制某个LED灯亮与灭,或者通过获取某个引脚的电平属性来达到判断外围设备的状态。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立地加以设置。比如,可以通过通用IO控制寄存器设置某个GPIO引脚的属性为输入、输出或其他特殊功能。除了控制寄存器和数据寄存器外,还有上拉寄存器(现不关注)。
(1) 端口控制寄存器:大多数的引脚都可复用,所以必须对每个引脚进行配置。端口控制寄存器(GPnCON)定义了每个引脚的功能。
(2) 端口数据寄存器:如果端口被配置成了输出端口,可以向GPnDAT的相应位写数据。如果端口被配置成了输入端口,可以从GPnDAT的相应位读出数据。
(3) 端口上拉寄存器:端口上拉寄存器控制了每个端口组的上拉/下拉电阻的使能/禁止。根据对应位的0/1组组合,设置对应端口的上拉/下拉电阻功能是否使能。如果端口的上拉电阻被使能,无论在哪种状态(输入、输出、DATAn、EINTn等)下,上拉电阻都起作用。
以S3C2440为例。
S3C2440A共有130个多功能GPIO口,共分为9组:
与GPIOA有关的寄存器共有4个,如下:
我们只关心控制寄存器GPACON和数据寄存器GPADAT:
上面两张图说明了GPACON寄存器和GPADAT寄存器每一位的作用,因此只需要往这两个寄存器中写入合适的数值就可以达到控制GPIOA的目的。
LED驱动设计:
①设置GPIO控制寄存器,把引脚设置为输出功能
②根据原理图设置GPIO数据寄存器,点亮LED灯
开发板TQ2440汇编代码:
芯片S3C6410在点亮led前还需要进行外设基地址初始化,这是通过设置CP15的寄存器来实现的。
CP15中有peripheral port memory remap寄存器,该寄存器用于初始化外设基地址。
汇编代码:
GPIO的英文全称为General-Purpose IO ports,也就是通用IO接口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路,有的需要CPU为之提供控制手段,有的则需要被CPU用做输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了。比如,控制某个LED灯亮与灭,或者通过获取某个引脚的电平属性来达到判断外围设备的状态。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立地加以设置。比如,可以通过通用IO控制寄存器设置某个GPIO引脚的属性为输入、输出或其他特殊功能。除了控制寄存器和数据寄存器外,还有上拉寄存器(现不关注)。
(1) 端口控制寄存器:大多数的引脚都可复用,所以必须对每个引脚进行配置。端口控制寄存器(GPnCON)定义了每个引脚的功能。
(2) 端口数据寄存器:如果端口被配置成了输出端口,可以向GPnDAT的相应位写数据。如果端口被配置成了输入端口,可以从GPnDAT的相应位读出数据。
(3) 端口上拉寄存器:端口上拉寄存器控制了每个端口组的上拉/下拉电阻的使能/禁止。根据对应位的0/1组组合,设置对应端口的上拉/下拉电阻功能是否使能。如果端口的上拉电阻被使能,无论在哪种状态(输入、输出、DATAn、EINTn等)下,上拉电阻都起作用。
以S3C2440为例。
S3C2440A共有130个多功能GPIO口,共分为9组:
与GPIOA有关的寄存器共有4个,如下:
我们只关心控制寄存器GPACON和数据寄存器GPADAT:
上面两张图说明了GPACON寄存器和GPADAT寄存器每一位的作用,因此只需要往这两个寄存器中写入合适的数值就可以达到控制GPIOA的目的。
LED驱动设计:
①设置GPIO控制寄存器,把引脚设置为输出功能
②根据原理图设置GPIO数据寄存器,点亮LED灯
开发板TQ2440汇编代码:
#define GPBCON 0x56000010 #define GPBDAT 0x56000014 light_led: ldr r0, =GPBCON ldr r1,=0x15400 str r1, [r0] ldr r0, =GPBDAT ldr r1,=0x6BF str r1, [r0]
芯片S3C6410在点亮led前还需要进行外设基地址初始化,这是通过设置CP15的寄存器来实现的。
CP15中有peripheral port memory remap寄存器,该寄存器用于初始化外设基地址。
汇编代码:
set_peri_port: ldr r0,=0x70000000 orr r0,r0,#0x13 mcr p15,0,r0,c15,c2,4
相关文章推荐
- 使用gradle发布Android studio lib库到jCenter代码库
- webview使用总结及注意事项
- 2015.8.25
- java虚拟机如何实现垃圾回收
- freemarker教程
- 数据库
- [150825]设计模式总结
- CodeForcesGym 100641B A Cure for the Common Code
- 读书笔记之linux/unix系统编程手册(44)
- php教程|php基础知识
- 最后一个1
- 题目1114:神奇的口袋
- zoj-2112(主席树动态求区间第k小数)
- 素数,费马!米勒—拉宾 素性测试(Miller–Rabin primality test)
- 在四川大学的第二个冠军游戏在线编程:Peter的X
- windows虚拟机vmware和hyper-v冲突了怎么办
- leetcode: (26) Remove Duplicates from Sorted Array
- 大数+找规律 ACdream1210 Chinese Girls' Amusement
- iOS多线程(二)GCD
- LeetCode---Palindrome Number