/*-------------------------
*先申明下,本人是个菜鸟,刚开始接触驱动程序编写,交代下开发环境(主机系统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> MODULE_LICENSE("GPL");
MODULE_AUTHOR("cheng"); typedef struct mydev{
unsigned long gpio_virt;
unsigned long wdt_virt;
unsigned long *gpmcon, *gpmdat;
unsigned long *wtcon, *wtdat, *wtcnt, *wtclrint;
void (*init_nydev)(struct mydev *this);
void (*exit_mydev)(struct mydev *this);
irqreturn_t (*do_irq)(int irq, struct mydev *this);
void (*led_on)(struct mydev *this);
void (*led_off)(struct mydev *this);
void (*wdt_on)(struct mydev *this);
void (*wdt_off)(struct mydev *this);
}MYDEV; void my_init_mydev(struct mydev *this);
void my_exit_mydev(struct mydev *this);
irqreturn_t my_do_irq(int irq, struct mydev *this);
void my_led_on(struct mydev *this);
void my_led_off(struct mydev *this);
void my_wdt_on(struct mydev *this);
void my_wdt_off(struct mydev *this); MYDEV my ;
static int test_init(void)
{
printk("hello,in my test_init\n");
my.init_mydev = my_init_mydev;
my.exit_mydev = my_exit_mydev;
my.init_mydev(&my); return 0;
} void test_exit()
{
my.exit_mydev(&my);
printk("this is test exit\n");
} module_init(test_init);
module_exit(test_exit); void my_init_mydev(struct mydev *this)
{
this->do_irq = my_do_irq;
this->led_on = my_led_on;
this->led_off = my_led_off;
this->wdt_on = my_wdt_on;
this->wdt_off = my_wdt_off;
int ret = request_irq(IRQ_WDT, this->do_irq, IRQF_SHARED,"hello", this);
if(ret < 0){
printk("request_irq error\n");
return ;
}
this->gpio_virt = ioremap(0x7f008000, SZ_4K);
this->wdt_virt = ioremap(0x7e004000, SZ_4K);
this->gpmcon = this->gpio_virt + 0x820;
this->gpmdat = this->gpio_virt + 0x824;
this->wtcon = this->wdt_virt + 0x00;
this->wtdat = this->wdt_virt + 0x04;
this->wtcnt = this->wdt_virt + 0x08;
this->wtclrint = this->wdt_virt + 0x0c;
this->wdt_on(this);
} void my_exit_mydev(struct mydev *this)
{
this->my_wtd_off(this);
iounmap(this->wdt_virt);
iounmap(this->gpio_virt);
free_irq(IRQ_WDT,this);
} irqreturn_t my_do_irq(int irq, struct mydev *this)
{
if(irq == IRQ_WDT){
*this->wtclrint = 0;
printk("wang wang wang\n");
static int flag = 1;
if(flag)
this->led_on(this);
else
this->led_off(this);
flag ^= 1;
}
return IRQ_HANDLED;
} void my_led_on(struct mydev *this)
{
*this->gpmcon = 1;
*this->gpmdat = 0;
} void my_led_off(struct mydev *this)
{
*this->gpmcon = 1;
*this->gpmdat = 1;
} void my_wdt_on(struct mydev *this)
{
*this->wtcon = (1 << 2) | (1 << 3) | (1 << 5) | (31 << 8);
*this->wtdat = 0x4000;
*this->wtcnt = 0x8000;
} void my_wdt_off(struct mydev *this)
{
*this->wtcon = 0;
}

/*
    下面是makefile内容:
*/

all:
make -C linux-2.6.28_smdk6410 M=`pwd` modules
clean:
make -C /linux-2.6.28_smdk6410 M=`pwd` clean
rm -rf modules.order
obj-m += test.o

面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)的更多相关文章

  1. 【嵌入式】安装Linux系统到开发板

    一.开发板基本介绍 Flash --相当于硬盘 RAM -- 内存 Micro USB或232串口 连电脑 USB 接口连摄像头 启动方式 选择开关 :SD卡启动或NAND FLASH 启动 USB转 ...

  2. 014安装Linux系统到开发板

    SD卡----->开发板 1.安装准备: 硬件连接 USB下载线,一端连到开发板,另一端连到PC机: 串口线连好: 电源线连好: 设置开发板从SD卡启动: 2.打开开发板进入选单界面: 进入选单 ...

  3. part1:15-安装Linux系统到开发板

    1.Qtopia简介 Qtopia是Trolltech公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台,Qtopia包含完整的应用层.灵活的界面用户.窗口操作系统.应用程序启动程序 ...

  4. 7、linux系统2440开发板域名解析问题

    如果在linux系统中ping某一台电脑的ip地址可以ping 通: ~ >: ping 192.168.1.3PING 192.168.1.3 (192.168.1.3): 56 data b ...

  5. 嵌入式linux系统应用开发

    关于嵌入式系统   平时大家说的嵌入式其实范围比较广的,是一种软硬件可裁剪,以应用为中心开发的专用系统,硬件平台可以是单片机,或者以ARM系列的处理器.单片机一般直接裸奔程序,不过现在有了好多基于单片 ...

  6. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  7. linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,日本再战!)

    linux 3.4.103 内核移植到 S3C6410 开发板 这个星期差点儿就搭在这里面了,一開始感觉非常不值得,移植这样的浪费时间的事情.想立刻搞定,然后安安静静看书 & coding. ...

  8. 搭建测试环境——针对S3C6410开发板

    (一)前言 目前市面上的开发板型号和种类很多,但目前最流行的是基于三星S3C6410 ARM11架构的开发板.国内很多厂商在S3C6410 ARM11架构的开发板的基础上进行了扩展,开发了扩展板,本博 ...

  9. 搭建S3C6410开发板的测试环境

      因为ARM架构的开发板可基于X86架构的PC在CPU指令以及二进制上都有所不同,而且如果linux驱动需要访问硬件,这些硬件很难在PC上模拟,所以就需要我们在带有这些硬件的开发板上进行调试和测试. ...

随机推荐

  1. 【剑指offer】42.和为S的两个数字

    42.和为S的两个数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 示例: 输入:[1,2,4,7,11 ...

  2. Spring解决Attribute tx bound to namespace httpwww.w3.org2000xmlns was already specified

    Spring|解决Attribute "tx" bound to namespace "http://www.w3.org/2000/xmlns/" was a ...

  3. 高版本(8以上)tomcat不支持rest中的delete和put方式请求怎么办

    出现问题 当我们去访问delete方式和put方式: 后来才知道tomcat8以上是不支持delete方式和put方式 解决方法: 在跳转目标的jsp头文件上改为(加上了isErrorPage=&qu ...

  4. mybatis-7-缓存

    1. 一级缓存: SqlSession 级别, 默认开启, 并且不能关闭 操作数据库是需要创建 SqlSession 对象, 在对象中有一个 HashMap 用于存储缓存数据, 不同的 SqlSess ...

  5. 《面试八股文》之 Redis 16卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. redis 作为 ...

  6. fatal error: all goroutines are asleep - deadlock!

    一.问题截图 fatal error: all goroutines are asleep - deadlock! goroutine 1 [chan receive]: main.main() /U ...

  7. 研究java ResultSet结果集

    java的结果集,实现类D:\storage\respository\com\sinosoft\local\oracle\1.0\oracle-1.0.jar!\oracle\jdbc\driver\ ...

  8. jquery设置下拉框selected不起作用

    在js中设置下拉框被选中: 最初写法: //移出selected $("#selected option").removeAttr("selected"); / ...

  9. ubuntu 权限管理设置

    最近工作中涉及文件操作的内容较多,所以会出现各种各样的权限不足问题,导致操作失败.下面就来讲解下我碰到这种问题是通过什么的方法解决的 一.用户和权限 用户 是 Linux 系统工作中重要的一环,用户管 ...

  10. 算法竞赛中的常用JAVA API :HashMap 和 TreeMap(转载)

    算法竞赛中的常用JAVA API :HashMap 和 TreeMap 摘要 本文主要介绍Map接口下的HashMap和TreeMap. HashMap HashMap是基于哈希表的 Map 接口的实 ...