mini2440 led驱动程序经典分析

发布者:悠闲之旅最新更新时间:2024-06-19 来源: elecfans关键字:mini2440  led  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

几个GPXCON寄存器的物理地址。

GPACON 0X56000000

GPBCON 0X56000010

GPCCON 0X56000020

GPDCON 0X56000030

其他的以此类推,可以看出这个I/O口控制寄存器的规律,如果将ppvalue左移四位,加上GPIO虚拟基地址,就能得到GPXCON控制寄存器的虚拟地址了。顺便说下,这里的虚实地址的映射只是相差了一个偏移量。

 

分析:if (pin < S3C2410_GPIO_BANKB)

S3C2410_GPIO_BANKB的定义如下

#define S3C2410_GPIO_BANKA  (32*0)

#define S3C2410_GPIO_BANKB  (32*1)

#define S3C2410_GPIO_BANKC  (32*2)

#define S3C2410_GPIO_BANKD  (32*3)

#define S3C2410_GPIO_BANKE  (32*4)

#define S3C2410_GPIO_BANKF  (32*5)

#define S3C2410_GPIO_BANKG  (32*6)

#define S3C2410_GPIO_BANKH  (32*7)

用于判断此I/O口是否为GPA端口,这是为了区分开GPA与其他各组端口,因为GPA控制寄存器的操作和其他的有点区别,另外要注意,它是没有输入功能的。看datasheet能够更好的了解。

 

分析:S3C2410_GPIO_OFFSET(pin)

#define S3C2410_GPIO_OFFSET(pin) ((pin) & 31)    //用此宏能得出偏移量

  if (pin < S3C2410_GPIO_BANKB) {  //判断I/O口是不是属于GPA,    mask = 1 << S3C2410_GPIO_OFFSET(pin);//设置屏蔽码

  } else {

      mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;//设置屏蔽码

  }

 

分析:local_irq_save(flags);

这个与下面出现的local_irq_restore(flags);成对使用,用于关闭、打开中断,同时将中断的标志存储在flags中。

分析:__raw_readl(base + 0x00);  __raw_writel(con, base + 0x00);

con  = __raw_readl(base + 0x00);  //读取控制寄存器数据

  con &= ~mask;                  //屏蔽掉相应的位

  con |= function;              //设置要设置的位

 

  __raw_writel(con, base + 0x00);//把改变后的数据写回控制寄存器

 

上面的是两个函数宏,定义如下

#define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile unsigned char __force *)(a) = (v))
#define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a) = (v))
#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))
PS(ZXX):先检查指针a是否合法,然后将数值v写入a所指向的空间。

三种类型分别对应char,short,int
#define __raw_readb(a) (__chk_io_ptr(a), *(volatile unsigned char __force *)(a))
#define __raw_readw(a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a))
#define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a))
PS(ZXX):先检查指针a是否合法,然后读取a所指向的空间的数值。
三种类型分别对应char,short,int

5.分析s3c2410_gpio_setpin(led_table[i], 0);

void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)

{

  void __iomem *base = S3C24XX_GPIO_BASE(pin);

  unsigned long offs = S3C2410_GPIO_OFFSET(pin);

  unsigned long flags;

  unsigned long dat;

 

  local_irq_save(flags);

 

  dat = __raw_readl(base + 0x04);

  dat &= ~(1 << offs);

  dat |= to << offs;

  __raw_writel(dat, base + 0x04);

  local_irq_restore(flags);

}

有了上述的对s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i])的分析,上面的代码大同小异罢了,只是说一下__raw_readl(base + 0x04);这个,这是对数据寄存器进行操作,看datasheet就知道,每组的GPXDAT的地址值都比GPXCON的地址值大4。

 

总结:到此这个led驱动分析就结束了,程序虽小,里面涉及到的东西还是不少的,主要是刚入门者感觉很乱主要是对刚入门的同志有一定的帮助。关于这个驱动程序有几个版本,内核也在不断改变。我同时贴出另一个转载来的也是led驱动程序的文章,但里面涉及的结构数据比这个要复杂点,在我的博客里面可以找到,看懂的话还是能学到不少东西的。


[1] [2]
关键字:mini2440  led  驱动程序 引用地址:mini2440 led驱动程序经典分析

上一篇:mini2440 Norflash驱动移植过程
下一篇:mini2440重新烧写supervivi方法

推荐阅读最新更新时间:2024-11-13 04:36

X25045驱动程序
/********************************************************************************************/ /* This is a demo for X25045. /* /* /* /* By Dragon.W /* Jun.2005 /*********************************************************************************************/ //#ifndef MASTER_FILE //#i nclude REG52.H //#i nclude STDIO
[单片机]
【技术解析】如何设置iPhone来点LED杯灯闪烁提醒
众所周知,iPhone手机没有前置呼吸灯,当我们有未接来电或者短信时iPhone只会震动并且点亮屏幕一次来提醒,如果我们没有注意到,那iPhone是不会二次提醒的。但当下大多数的Android手机都具备前置呼吸灯,当有未接来电或者未读短信时,前置呼吸灯会显示不同颜色来提醒用户。   不过,iPhone用户也不用羡慕Android用户,今天小编就教大家一招如何将iPhone的后置 LED 等设置成来电闪烁提醒,虽然功能略有不足,但却能够让我们的手机更炫。   首先找到手机中的“设置”,如下图所示。   点击设置,然后找到"通用",如下图红框标注所示。   点击打开“通用”,用手指向下滑动,找到“辅助功能”,如下图红框
[电源管理]
【技术解析】如何设置iPhone来点<font color='red'>LED</font>杯灯闪烁提醒
LED文字指挥棒
来自设计师Chih Wei Lai等人的设计,LED文字指挥棒(Swing Baton)是一款好用的交警指挥设备,相当于是一根镶嵌有LED的棒子,可以预先设定好要显示的文字,然后,只要你左右挥舞它,文字就能依靠视觉残留的原理显示在空中! 是的,就像那些旋转的时候能显示出文字的风扇~
[电源管理]
<font color='red'>LED</font>文字指挥棒
51单片机用三种方法实现流水灯
一、数组流水灯 定义一组数组分别对应点亮LED1~7 然后利用for循环赋值给p2从而实现流水灯 #include reg52.h #define uchar unsigned char #define uint unsigned int uchar code table = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数组 // 函数功能:毫秒延时 void delay(uint z) { uint x,y; for(x = 0; x z; x++) for(y = 0; y 113; y++); } void main() { uchar
[单片机]
51单片机用三种方法实现流水灯
车用LED照明技术及现状分析
随着全球经济的发展和人民生活水平的提高,汽车在日常生活中的使用越来越多,因此汽车节能减排及行车安全的要求日益提高。汽车照明系统是保障汽车安全行驶的关键部件,光源又是汽车照明系统的关键。发光二极管(LED)作为第四代车用光源具有寿命长、能耗低、体积小、响应快、单色性好等诸多优点,顺应了未来汽车的安全、节能、紧凑、时尚的发展趋势。相信随着汽车工业的成熟以及LED 芯片、封装、散热等技术突飞猛进的发展,LED 在汽车照明系统中的应用会越来越广,规模会越来越大。    1 车用LED 照明的可行性和先进性   在汽车上使用照明光源大约开始于20 世纪初。最先使用的是煤油灯和乙炔灯,1910 年开始使用电光源,先后经历了白炽灯、卤钨灯及高
[电源管理]
车用<font color='red'>LED</font>照明技术及现状分析
一种恒流LED驱动系统的设计方案
  所有发光二极管无论其灯光颜色、尺寸大小或功率有甚不同,只要驱动的电流恒定不变,它们都能充分发挥其性能。发光二极管生产商都会列明产品的规格,例如,数据表上会列出产品在指定正向电流(IF)而非正向电压(VF)驱动下的流明、光束波形及颜色。发光二极管的亮度随电流的大小而不同,且制造出来的发光二极管,其电压与电流曲线稍有差异,因而 LED照明 的亮度常随电源电压的变动而无法稳定。为维持亮度稳定一致,需要发光二极管恒流驱动器来实现。恒流驱动器可以使得发光二极管工作在固定电流模式,因而亮度稳定性高。恒流驱动器也让发光二极管长期工作在一定电流下,使其维持较长寿命。发光二极管 照明 优点是节能、安全,但由于恒定电流工作考虑,能耗亦相对增加,因
[电源管理]
一种恒流<font color='red'>LED</font>驱动系统的设计方案
为什么安防巨头纷纷进入超小间距LED显示市场?
    6月,国际安防巨头泰科,携手中国区总代发布旗下品牌美国动力全系列显示与控制产品,包括DLP/LCD及小间距LED,并表示看好小间距LED未来空间;视讯与安防领导企业,科达公司在2016全国巡展期间,对外发布晶艳超小间距LED显示屏,包括两个系列产品——无限拼接的超小间距LED拼接屏&LED高清大尺寸显示器。   小间距LED显示屏一般是指点间距(即像素点间距=两个LED灯珠中心间距,以P表示)在2.5mm以下的室内LED显示屏,主要包括P2.5、P2.0、P1.9、P1.6、P1.2 等型号,目前最小间距已可达0.7mm,P0.9 已经开始量产。由于小间距LED 具有无拼缝(DLP技术目前可做到0.2mm拼缝)、显示效果好、
[安防电子]
利用高功率Buck LED控制器实现优异的汽车外部照明
得益于优异的照明特性和效率,高功率 LED 在汽车外部照明设计中越来越流行。支持 LED 的电子器件必须快速、高效、高精度,以控制照明强度、方向和聚焦。这些器件必须支持较宽的输入电压范围,且能够在汽车无线电的 AM 频段范围之外工作,以避免电磁干扰( EMI )。电子器件还必须支持 LED 矩阵中要求的复杂照明模式,以支持自适应前灯照明系统。本文回顾典型的 LED 电源管理方案,并介绍支持快速、高效、高精度 LED 照明 方案的创新 buck 控制器 IC。 LED 在汽车外部照明中的应用 由于相对于传统技术具有显著优势,LED 正在汽车行业掀起一场风暴。LED 前灯中的白光具有优异的清晰度,从而减少驾驶员反应时间。
[汽车电子]
利用高功率Buck <font color='red'>LED</font>控制器实现优异的汽车外部照明
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved