ok6410按键中断驱动程序

#include <linux/module.h>
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/interrupt.h>
#include <linux/fs.h>
#include <linux/io.h>

#define GPNCON 0x7F008830//ioremap使用的地址,与具体硬件相关

irqreturn_t key_int(int irq, void *dev_id)
{
	printk("key down!\n");

	return 0;
}

void key_hw_init(void)
{
	unsigned short data;
	unsigned int *gpio_config;

	gpio_config = ioremap(GPNCON,4);
	data = readw(gpio_config);
	data &= ~0b11;
	data |= 0b10;
	writew(data,gpio_config);
}

int key_open(struct inode *node,struct file *filp)
{
	return 0;
}

struct file_operations key_fops =
{
	.open = key_open,
};

struct miscdevice key_miscdev =
{
	.minor = 200,
	.name = "ok6410key",
	.fops = &key_fops,
};

static int button_init(void)
{
	int err;
	misc_register(&key_miscdev);

	key_hw_init();
	if ((err = request_irq(S3C_EINT(0), key_int, IRQF_TRIGGER_FALLING, "ok6410key", 0)) < 0)
	{
		printk("err = %d\n", err);
		goto irq_err;
	}

	return 0;
irq_err:
	misc_deregister(&key_miscdev);
	return -1;
}

static void button_exit(void)
{
	free_irq(S3C_EINT(0), 0);
	misc_deregister(&key_miscdev);
}

module_init(button_init);
module_exit(button_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("key driver");

1.首先查看原理图,找到按键和cpu链接的位置和中断号。如下图所示,本程序以KEYINT1为例来说明按键驱动的编写方法。从图中可以看到KEYINT1与GPN0相连,使用的中断号为XEINT0。

2.查看datasheet查看找到GPN0,从中得到GPNCON的地址为0x7F008830,这个地址在ioremap的时候使用。还可以看到要将GPN0的bit[1:0]设置为10才是中断触发方式。

3.打开内核目录下的linux/arch/arm/mach-s3c64xx/include/mach/irqs.h查找外部中断0的中断号定义。在第158行找到了该定义。

时间: 2024-11-18 07:22:33

ok6410按键中断驱动程序的相关文章

6.6410和210的按键中断编程

6.6410和210的按键中断编程 首先是打开6410底板原理图: 可以看到OK6410有六个按键: 可以看到OK6410的六个按键对应的引脚是KEYINT1.KEYINT2.KEYINT3.KEYINT4.KEYINT5和KEYINT6.接着在核心板的原理图里搜索这个词: 可以看到按键中断与GPN系列寄存器的引脚是互用的,接着就是在芯片手册里查看有关GPN系列寄存器的信息,重点是关注GPN控制寄存器:GPNCON: 这里我们使用到的按键对应的中断,需要配置成中断的方式,对应的GPN位设置为10

nios II--实验4——按键中断硬件部分

按键中断 硬件开发 新建原理图 1.打开Quartus II 11.0,新建一个工程,File -> New Project Wizard-,忽略Introduction,之间单击?Next>?进入下一步.分别设置工程工作目录.工程名称.这里需要注意的是工程工作目录中请使用英文,不要含有空格等,否则在后面使用Nios II IDE的时候会出现问题.设置好后如图1所示.然后进行下一步.这里工程命名为lab3_bnt 2.添加已经存在的文件,这里没有需要添加的文件,直接单击?Next>?进入

2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED &amp;&amp; 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 中级教程-OSAL操作系统(OSAL系统解基本套路) 中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~ 中级教程-OSAL操作系统(ADC-光敏电阻) OSAL操作系统-实验16 串口波特率扩展 OSAL操作系统-实验1

STM32学习之路-按键中断测试(外部中断)

终于有时间再来学习STM32了~ 这几天都在忙着该死的考试.直接进入正题 开发板:奋斗V5 这个按键中断测试的要求是:按键2(K2)按下,LED2(V7)亮, 再一次按下就灭,循环.. 好,先看看按键和LED的原理图 好吧~ 虽然图截得不是很好看,但是能看到K2接的是PC2, LED2接的是PD6 ok,剩下的就是配置工作了.. 先来理一理思路: (1)初始化系统时钟 (2)初始化外部时钟(你所用到的东西) (3)配置LED (4)配置中断优先级 (5)配置外部中断线 (6)中断处理函数 恩,差

ARM实验5 —— 按键中断实验

key_int按键中断实验 实验内容: 通过开发板上的按键中断控制led灯并打印信息. 通过简单事例说明猎户座4412处理器的GIC中断处理的应用,设置key2按键连接的引脚为中断模式,当识别按键被按下时进入相应的中断处理函数 实验目的: 熟悉开发环境的使用 掌握猎户座4412处理器的中断过程及编程. 实验平台: fs4412开发板,eclipse,secureCRT. 实验步骤: 1.查看key2在开发板的位置: 2.查看UART_RING在核心板的位置: 3.查看GPX1在芯片手册的位置:

ZYNQ随笔——PL端按键中断之裸机设计

1. ZYNQ中断简述ZYNQ中断类型:普通中断请求(IRQ, Interrupt Request)和快速中断请求(FIQ, Fast Interrupt Request).ZYNQ中断源:软件中断(SGI, Software Generated Interrupt).CPU私有设备中断(PPI, Private Peripheral Interrupt)和共享设备中断(SPI, Shared Peripheral Interrupt).而PL端的按键中断属于共享设备中断.2. 硬件平台搭建在B

OK6410按键驱动程序(改)亲测可以运行

#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/gpio.h> #include <linux/types.h> #include <linux/cdev.h> #include <linux/interrupt.h> #includ

linux-2.6.38poll机制简析(以tiny6410按键中断程序为基础)

一.应用程序 /* struct pollfd { int fd; //文件描述符 short events; //表示请求检测的事件 short revents; //表示检测之后返回的事件 }; */ int fd; struct pollfd fds[1]; // 只用poll函数来检测一个描述符 fd = open("/dev/tiny6410_button", 0); fds[0].fd = fd; //存放文件描述符 fds[0].events = POLLIN; //有数

按键中断

原理 /* 按键          对应的IO寄存器     对应的中断引脚*/ /* K1             GPG0                 EINT8      */ /* K2             GPG3                 EINT11     */ /* K3             GPG5                 EINT13     */ /* K4             GPG6                 EINT14