历史上的今天
返回首页

历史上的今天

今天是:2025年03月23日(星期日)

正在发生

2021年03月23日 | S3C6410开发板LED驱动代码分析及测试代码分析

2021-03-23 来源:eefocus

在本文中,我们对S3C6410开发板LED驱动代码的实现过程进行分析,然后通过一个实例对LED进行控制。在本文的资源中包含了设备驱动的源码和测试的源码。


一、设备驱动源码分析

设备驱动主要实现了模块的初始化、模块的卸载、io模块操作的功能。


1、模块初始化

模块的初始化的源码如下所示。


static int __init dev_init(void)

{

int ret;

 

{

unsigned tmp;

tmp = readl(S3C64XX_GPKCON);

tmp = (tmp & ~(0xffffU<<16))|(0x1111U<<16);

writel(tmp, S3C64XX_GPKCON);

tmp = readl(S3C64XX_GPKDAT);

tmp |= (0xF << 4);

writel(tmp, S3C64XX_GPKDAT);

}

 

ret = misc_register(&misc);

 

printk (DEVICE_NAME"tinitializedn");

 

return ret;

}


在初始化的源码中,主要是对控制LED的GPIO引脚的寄存器进行设置,将GPIO设置为输出,并将GPIO的初始状态设置为高电平,灯是熄灭状态。另外一个功能就是将LED的混杂设备注册到内核中。


2、模块卸载

模块卸载的代码比较简单,如下所示。


static void __exit dev_exit(void)

{

misc_deregister(&misc);

}


模块卸载代码实现的功能是将LED的混杂设备从内核中取消注册。


3、io 操作

io操作的代码如下所示。


static long sbc2440_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)

{

switch(cmd) {

unsigned tmp;

case 0:

case 1:

if (arg > 4) {

return -EINVAL;

}

tmp = readl(S3C64XX_GPKDAT);

tmp &= ~(1 << (4 + arg));

tmp |= ( (!cmd) << (4 + arg) );

writel(tmp, S3C64XX_GPKDAT);

//printk (DEVICE_NAME": %d %dn", arg, cmd);

return 0;

default:

return -EINVAL;

}

}


这个函数主要使用来对LED进行控制的,其中,cmd是LED的控制命令,1点亮,0熄灭。arg指明控制那个灯,0~3的取值,对应4个LED灯。控制命令最终会被写入到控制GPIO引脚的数据寄存器中。


二、测试代码分析

编写了一个简单的测试代码对led的驱动进行测试,实现led灯的控制。代码如下。


int main(int argc, char **argv)

{

int on;

int led_no;

int fd;

//验证输入

if(argc!=3||sscanf(argv[1],"%d",&led_no)!=1||sscanf(argv[2],"%d",&on)!=1||

on<0||on>1||led_no<0||led_no>3)

{

fprintf(stderr,"Usage: ./led_test 0|1|2|3 0|1n");

return 1;

}

fd = open("/dev/leds",0);

if(fd<0)

{

fprintf(stderr,"can't open leds!n");

return 1;

}

 

ioctl(fd,on,led_no);

close(fd);

return 0;

}


led的控制命令通过命令行输入,命令输入后先验证命令是否有效,如果有效则打开leds设备文件,并通过ioctl函数对led进行控制。编译代码,并将可执行文件传到开发板中。通过命令行就可以实现对led的控制。比如下面的命令,表示将led3点亮。


./led_test 3 1


推荐阅读

史海拾趣

Amerace Electronic Components公司的发展小趣事

随着全球环保意识的提高,Amerace Electronic Components公司积极响应绿色环保号召,将环保理念融入生产和经营中。公司采用环保材料和工艺,减少生产过程中的污染排放。同时,Amerace还致力于推动电子元件的循环利用和回收,为环保事业贡献力量。这种环保理念的践行不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

Comus_International公司的发展小趣事

随着时间的推移,Comus International的产品逐渐从最初的恒温器开关拓展到更广泛的领域。如今,公司的产品已经广泛应用于医疗、汽车、白色家电、警报和安全以及军事/航空航天等多个领域。这种多元化的应用领域不仅增加了公司的收入来源,也提高了公司的市场影响力。

洲光源(Chau Light)公司的发展小趣事

洲光源公司自2011年成立以来,一直致力于红外LED光源器件的研发和生产。在公司成立的初期,市场上对于红外LED的需求并不高,但洲光源公司坚信其未来的潜力。通过不断的技术研发和创新,洲光源成功开发出了高效、稳定、可靠的红外LED产品,逐渐在市场上树立了良好的口碑。随着智能家居、安防监控等领域的快速发展,红外LED的需求迅速增长,洲光源公司也迎来了发展的黄金时期。

昆泰芯微电子(CONNTEK)公司的发展小趣事

为了加快产品国产化进程,昆泰芯微电子与世强先进(深圳)科技股份有限公司签订了授权代理合作协议。通过这一战略合作,昆泰芯微电子成功将旗下高端传感器产品触达至终端市场,实现了市场的快速扩张。同时,这一合作也进一步提升了昆泰芯微电子在行业中的知名度和影响力。

Chemtronics公司的发展小趣事

Chemtronics一直坚守严格的质量标准。公司自早期起就遵循ISO9001:2000的质量标准来制造产品,确保每一款产品都达到同等高质量。这种对质量的坚持不仅赢得了客户的信任,也为公司在竞争激烈的电子行业中树立了良好的口碑。

Bridgelux公司的发展小趣事

被收购后,Bridgelux并没有停止创新的步伐。公司继续加大研发投入,推出了一系列具有创新性的LED照明产品。同时,公司还积极拓展市场,与全球各地的客户建立了广泛的合作关系。通过不断提升产品质量和服务水平,Bridgelux逐渐在LED照明领域树立了良好的口碑,成为了行业的佼佼者。

这五个故事展示了Bridgelux公司在电子行业中的发展历程和取得的成就。从创立初期的艰难起步,到技术突破与创新,再到与Cree公司的专利纠纷与和解,以及被CEC和重庆临空收购后的持续发展与创新,Bridgelux始终保持着对技术的追求和对市场的敏锐洞察。正是这些努力和坚持,使得Bridgelux在竞争激烈的电子行业中脱颖而出,成为了LED照明领域的领军企业。

问答坊 | AI 解惑

PCB学习之一

常用电子元件封装电阻:RES1,RES2,RES3,RES4;封装属性为axial系列   无极性电容:cap;封装属性为RAD-0.1到rad-0.4   电解电容:electroi;封装属性为rb.2/.4到rb.5/1.0   电位器:pot1,pot2;封装属性为vr-1到vr-5   二极管:封装属 ...…

查看全部问答>

关于FPGA的AD转换有人做过么?

我用的是AD0804,按时序图写出的状态机程序,但是在数码管老是无法正常显示,数字不是老跳就是定在一个值不动,我让其每隔0.5秒就转换一次         always@(posedge clk)               ...…

查看全部问答>

S3C2440 bootloader加载nk.bin出错

我用的飞凌的Uboot下载NK.bin,提示出错,提示错误如下: real entry is 0x%00000000, physical address is 0x%00000000 指示检查了程序,是在读取NK.bin里面的记录时出的错。 NK.bin文件头,即7个字节的头文件读取正确,代码如下: if(strncmp ...…

查看全部问答>

sd卡的 RCA作用

小弟目前正在研究SD卡协议相关,对CMD3的Response中的RCA不是很理解,不知道具体作用是做什么的,与读写卡操作时的逻辑地址,物理地址有什么样的关系?…

查看全部问答>

招聘:硬件工程师(南京)

我们是一家总部在香港,主营半导体业务,方案设计、开发及推广的专业公司。 有成熟的音视频多媒体、高清显示等方面的产品方案和设计团队,现因业务发展,急需招聘硬件程序员。 我们为您提供良好的福利待遇和薪酬体制。 工作地点在南京广州路和珠 ...…

查看全部问答>

急~~~~请教一条关于WinCE的SQL语句~~~~急

我在SQL2005上执行下面这条语句没有问题,但是在CE上就错了,请问怎么解决? select * from ( Select SakuseiHiduke, case DakokuCode when \'01\' then max(SakuseiJikoku) else \'\' end as ShuKkinTime, case DakokuCode when \'02\' then m ...…

查看全部问答>

【挖电源】直流稳压开关电源

此款直流稳压开关电源是在深圳华强北买的   直流电压输出范围是0-30V   直流电流最大输出5A [ 本帖最后由 dongguanze 于 2011-7-31 23:49 编辑 ]…

查看全部问答>

8G SD卡和2G以下SD卡读写方式一样吗?

8GSD卡读写不出?我看到很多资料读写SD卡都是2G以下,他们有什么区别?…

查看全部问答>

毕业设计题!急!关于单片机设计求各路大神帮帮忙

关于单片机设计求各路大神帮帮忙!!!!!!急急急!导师要题目!关于51单片机不能是烂大街的 本人水平太渣 求助论坛各位大神!!!!!!!!!…

查看全部问答>

BBB内核源码下载

http://kuai.xunlei.com/d/SN-qDgJtAwCFjFRT5cf 给需要自己添加驱动的人。。。 里面有我已经编译好的内核,在deploy目录下 …

查看全部问答>