S3C6410开发板LED驱动代码分析及测试代码分析

发布者:Zhenxiang最新更新时间:2021-03-23 来源: eefocus关键字:S3C6410  开发板  LED驱动 手机看文章 扫描二维码
随时随地手机看文章

在本文中,我们对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


关键字:S3C6410  开发板  LED驱动 引用地址:S3C6410开发板LED驱动代码分析及测试代码分析

上一篇:基于Linux系统和ZigBee的智能家居系统
下一篇:S3C6410开发板adc驱动代码分析及测试代码分析

推荐阅读最新更新时间:2024-10-25 10:58

S3C6410开发板LED驱动代码分析及测试代码分析
在本文中,我们对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);
[单片机]
学习搭建S3C6410开发板的测试环境心得
本章只介绍了如何在OK6410-A开发板上安装Android。当然,我们还可以选择其他的开发板,还可以直接在手机上测试Linux驱动程序。由于不同的开发板和手机安装Android的方法不尽相同,在这里只是做个参考。 1安装串口调试工具:minicom 以Ubuntu Linux为例,需要按照如下步骤安装、配置和调试minicom: 第一步:检测当前系统是否支持USB转串口 #lsmod | grep usbserial 如果有usbserial说明系统支持USB转串口 第二步:安装minicom #apt-get install minicom 第三步:配置minicom #minicom -s 进入配置页面,进入“Serial
[单片机]
第五章 搭建S3C6410开发板的测试环境 心得笔记
一、S3c6410一款比较典型的开发板,集成了各种部件。它是由三星公司推出的一款低功耗、高性价比的RISC处理器,它基于ARM11内核,可广泛应用于移动电话和通用处理等领域。串口通信就是通过使用开发板可以用某些方式显示linux驱动程序输出的调试信息。而PC需要与串口设备通信就需要在PC上安装接收和发送串口数据的程序,例如minicom。 二、要想使用该型号的开发板 1 安装串口调试工具:minicom: 第一步,检测当前系统是否支持USB转串口 #lsmod | grep usbserial; 第二步,安装minicom #apt_get install minico
[单片机]
搭建 S3C6410开发板的测试环境
S3C6410 是由三星公司推出的低功耗、高性价比的 SC ( reduced instruction set computer,精简指令集计算机〉处理器,它基于 ARMII 内核( ARMl76JZF-S),可广泛应用于移动电话和通用处理等领域。 (1)安装串口调试工具minicom 1.检测当前系统是否支持USB转串口 # Ismod I grep usbserial 2.安装 minicom # apt-get install minicom 3.配置minicom # minicom -s 4.测试minicom # minicom (2)使用E b o o t擦除N a n d F l a s h 1.用串口线或USB
[单片机]
面向对象之编写驱动程序--中断(linux系统、s3c6410开发板
/*------------------------- *先申明下,本人是个菜鸟,刚开始接触驱动程序编写,交代下开发环境(主机系统redhat6.3,开发板ARM-s3c6410) 以watchdog (看门狗,俗称狗中断)为例,编写简单的中断(驱动) -------------------------*/ #include linux/init.h #include linux/module.h #include asm/io.h #include linux/cdev.h #include linux/fs.h #include linux/irq.h #include linux/interrupt.h MO
[单片机]
S3C6410开发板开发环境的搭建
本节主要介绍了S3C6410开发板及OK6410开发板。OK6410开发板是基于ARM11主要步骤如下:。 OK6410开发板自带一个串口,PC也需要与串口设备通信。Ubuntu Linux安装串口调试工具minicom步骤: 第1步:检测当前系统是否支持USB转串口 第2步:安装minicom 第3步:配置minicom 第4步:测试minicom OK6410默认安装WinCE6.0,需要先卸载再安装Android,烧写要启动Eboot擦除NandFlash,方法: 第1步:准备工作 第2步:进入Eboot状态 第3步:擦除NandFlash 然后烧写Android: 第1步:准备工作 第2步:向SD卡写入mmc.bin和zI
[单片机]
搭建S3C6410开发板的测试环境
ARM架构的开发板可基于X86架构的PC在CPU指令以及二进制格式上都有所不同。Linux驱动需要访问硬件且这些硬件很难在PC上进行模拟,那么就要在带有这些硬件的开发板上进行调试和测试。 S3C6410是由三星公司推出的一款低功耗,高性价比的RISC处理器,基于ARM11内核,可广泛应用于移动电话和通用处理等领域。其为2.5G和3G通信服务提供了优化的硬件性能,内置强大的硬件加速器,集成了一个MFC,支持MPEG4/H.263/H.264编解码和VC1解码,能提供实时视频会议及NRSC和PAL制式的TV输出。 内置一个采用最先进技术的3D加速器,支持OpenGL ES 1.1/ 2.0和D3DM API 能实现4M triangl
[单片机]
搭建<font color='red'>S3C6410</font><font color='red'>开发板</font>的测试环境
Linux 3.3.0移植到S3C6410开发板上之一
这里仅仅是移植成功内核,可以挂载文件系统运行,至于驱动会陆续添加。 第一步:到内核官网上下载最新的内核,我下载的是linux-3.3-rc3.tar.bz2。 第二步:解压内核,进入arch/arm/mach-s3c64xx目录下,看到不少6410的板级文件,我们这里选择mini6410开开展工作,在目录下将mach-mini6410.c文件复制一份,命名为:mach-jfj6410.c。这里我们将文件里面关于mini6410的字样都修改为jfj6410.但是这里要注意,MACHINE_START(JFJ6410, JFJ6410 )这里的JFJ6410要使用大写,稍候说明为什么。大家都知道在一个目录下添加了文件后,都应该
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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