ARM9---LED驱动

本文档展示了如何将ARM9的LED和按键功能转化为驱动程序,实现一个菜单系统,允许用户通过输入数字选择LED运行模式。驱动包括初始化、读写操作以及ioctl接口,用于控制LED的不同模式。此外,还介绍了应用层的实现,包括不同模式的执行逻辑以及按键控制。文章最后提到了在Linux下编译和运行过程中遇到的一些问题及其解决方案。
摘要由CSDN通过智能技术生成

前天写了ARM9的LED和按键的裸机程序,今天把它用驱动实现。但是真的不好写,搞了一个晚上,不过真算OK啦。

我的这个驱动,实现的功能就是提供一个菜单给你选择,只要在总端输入数字选着LED运行模式就可以。

并且我用KI按键,实现了可以返回菜单另选另一种模式的功能。最后一个,就是应用层序是一个死循环,我还提供一个选择,退出死循环。但是另选模式后,要执行完本次才执行重选的模式。图如下:

1.进入主菜单:


2.有六种模式:选着相应模式就可运行:


3.由于是死循环,所以必须要通过按键1来返回主菜单,在选着其他模式。


4.选着7键来推出菜单,但是退出时得运行本次才退出,如下:


驱动程序如下:

//头文件
#include<linux/module.h>
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/fs.h>
#include<linux/errno.h>
#include<mach/regs-gpio.h>
#include <mach/hardware.h>
#include<linux/io.h>
#include<asm/uaccess.h>


#define GPIO_LED_MAJOR 97


#define LED_1_ON 1
#define LED_2_ON 2
#define LED_3_ON 3
#define LED_4_ON 4


#define LED_OFF 5


#define KEY_READ 6


#define ctl_GPIO_LED1 1


int GPIO_open(struct inode *inode, struct file *file)
{
printk("Open successfully!\n\n");

//初始化引脚,GPB输出GPF7输入
__raw_writel(__raw_readl(S3C2410_GPBCON)|(1<<(2*5))|(1<<(2*6))|(1<<(2*7))|(1<<(2*8)),S3C2410_GPBCON);
__raw_writel(__raw_readl(S3C2410_GPBDAT)|(0xf<<5),S3C2410_GPBDAT);
__raw_writel(__raw_readl(S3C2410_GPFCON)&~(3<<(2*7)),S3C2410_GPFCON);
printk("Initialization of LED and Button!\n\n");
return 0;
}


int GPIO_release(struct inode *inode, struct file *filp)
{
printk("Close successfully!\n\n");

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值