全部博文(1493)
分类:
2012-12-21 14:33:25
原文地址:linux 驱动之LEDv0--裸驱动 作者:
MINI2440上四盏led的电路原理图如下:
MINI2440与led设备的连接图:
驱动原理:
从led的电路原理图看,如果nLED_n(n=1、2、3、4)端接高电平时,led将处于熄灭状态;如果nLED_n(n=1、2、3、4)端接低电平时,led将被点亮。而从LED设备与MINI2440的连接图可以看出,nLED_n端的电平高低受MINI2440的GPIO口控制,其对应关系如下:
LED |
GPIO |
Led1 |
GPB5 |
Led2 |
GPB6 |
Led3 |
GPB7 |
Led4 |
GPB8 |
因此只要能够控制CPU的GPIO口输出高低电平就可以控制led灯的熄灭,这也就是led裸驱动的原理。
S3C2440中,GPB代表了一组有11个GPIO口(即从GPB0~GPB10)的GPIO口组, 每个GPIO口除了输入输出功能外,还有其他的复用功能,因此在使用GPIO口前需要先选择是使用GPIO的输入输出功能还是复用功能;此外,S3C2440的GPIO口内部配有可供用户配置的上拉电阻功能。具体而言,对GPB的控制具体为对以下三个寄存器的控制:
GPBCON配置使用GPIO口的输入输出功能还是复用功能;使用输入输出功能时,是使用输出功能还是输入功能。
GPBDAT数据寄存器。输出功能时通过向该寄存器写数据控制对应pin脚的高低电平,输入功能时通过读取该寄存器获取给pin脚的高低电平状态,该寄存器的0至10bit位对应GPB0~GPB10口。
GPBUP上拉电阻配置寄存器。
程序流程图:
代码分析:
点击(此处)折叠或打开
附件为完整的源码包及ADS工程文件: led.rar