面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)

发布者:悠然自在最新更新时间:2024-09-23 来源: cnblogs关键字:面向对象  驱动程序  中断  linux系统  s3c6410开发板 手机看文章 扫描二维码
随时随地手机看文章

/*-------------------------

*先申明下,本人是个菜鸟,刚开始接触驱动程序编写,交代下开发环境(主机系统redhat6.3,开发板ARM-s3c6410)

以watchdog (看门狗,俗称狗中断)为例,编写简单的中断(驱动)

-------------------------*/

#include <linux/init.h>

#include

#include

#include

#include

#include

#include


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_initn');

    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 exitn');

}


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 errorn');

                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 wangn');

        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开发板 引用地址:面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)

上一篇:S3C6410开发板开发环境的搭建
下一篇:【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410

推荐阅读最新更新时间:2026-03-25 12:54

面向对象之编写驱动程序--中断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
[单片机]
【改进Poll定时查询】IMX257实现GPIO-IRQ中断按键获取键值驱动程序
按键驱动程序中,如果不使用read函数中使程序休眠的,而是还是使用查询方式的话,可以使用Poll函数,来控制一定时间内,如果有按键发生,则立即返回键值。 同时,poll也可以同时监控多个(比如说按键,鼠标,等)一旦发生事件则立即返回。 我们在linux查看帮助: 从帮助中的说明得知, poll, ppoll - wait for some event on a file descriptor poll就是监控某个设备的事件。 修改驱动程序 1.增加头文件 #include linux/poll.h 2.增加key_poll 方法 static unsigned key_poll(struct file *fil
[单片机]
【改进Poll定时查询】IMX257实现GPIO-IRQ<font color='red'>中断</font>按键获取键值<font color='red'>驱动程序</font>
Windows98下硬件中断驱动程序的开发
摘 要: 介绍了Windows98的内核管理机制和应用程序权限级别,简述了在Windows98下进行虚拟驱动程序开发的几种工具和编程方法,并给出了借助VToolsD用C++语言编写的处理硬件中断的程序实例。 关键词: 虚拟设备驱动程序 VToolsD 中断服务例程 美国微软公司出品的Windows98以其友好的图形用户界面,在我国赢得了广泛的市场。在给广大办公环境工作人员带来方便的同时,也给不少工程技术人员带来了一些麻烦。一些原本在DOS下很容易编出的控制硬件的程序,现在在Windows98下就不那么容易实现了。作为一个完善的操作系统也必须能控制硬件,象DOS那样直接与硬件打交道是Windows98
[应用]
Windows9x/NT及2000下中断驱动程序的统一化处理
摘要: 针对Windows9x/NT及Windows2000操作系统,利用Windriver工具包,实现了在多种操作系统下对硬件中断驱动程序进行统一化处理,保证了程序在不同的操作系统下良好的移植性矣兼容性,并给出了用C语言编写的程序实例。 关键词: Windows9x/NT/2000 虚拟设备驱动程序(VxD) Windriver工具包 中断驱动程序的统一化处理 Windows以其友好的图形用户界面,使得它不仅成为办公管理首选的操作系统,也日益受到工程技术人员的关注,逐渐取代DOS而成为主流的工程应用控制平台。但是,Windows系统为了保证平台的安全与完
[嵌入式]
TestStand系列——User Manager面向对象之继承特性
Teststand 之User Manager面向对象之继承特性 user manager中Users中的用户权限由两部分形成:继承组特性;本身特性 比如继承Groups的Developer的lhuiy用户: 1.由于Groups的Developer.Privileges.Configure.CofigEngine=True的,即使lhuiy.Privileges.Configure.CofigEngine=False,lhuiy还是拥有CofigEngine权限的; 2.Developer.Privileges.Configure.EditUsers=False,说明Developer用户组没有修改User manage
[测试测量]
面向对象技术在单片机系统设计中的应用
通常的单片机系统设计都是先根据实际问题选用单片机芯片,然后决定所需接口的单元电路及芯片等硬件,再根据此硬件来设计软件,因此这种设计方法下的单片机系统开发人员很难继承他人的工作,而必须从同一个起点做起,进行重复工作。面向对象的设计方法和技术与单片机系统设计相结合就产生了面向对象的单片机系统设计,其主要思路是把单片机系统的每个接口电路都看成了一个一个的对象。单片机系统设计的任务也就变成了各接口模块对象的组合,这样单片机系统开发者就可以把精力更多地用在系统设计上,特别是软件的设计。本系统所采用的设计方法即是面向对象的单片机系统设计方法,例如:在本系统中,将A/D转换芯片及一些扩展接口封装成一个模块,成为一个对象,因此单片机系统的的设
[单片机]
<font color='red'>面向对象</font>技术在单片机系统设计中的应用
面向对象的嵌入式系统设计方法
摘要:通过UML语言对嵌入式系统建模,急准确地完成了分析人员与用户需形式化层次上的一致性,也为程序开发人员建立了清晰的程序结构和行为准则,大大缩短了系统开发周期,并使系统的升级和重用成为可能。本文通过一个用Atmel 89C52单片机实现简单变频调速器系统,说明UML应用与嵌入式系统的分析设计方法。 关键词:嵌入式系统 面向对象分析设计 UML 有限状态机 1 概述 随着我国装备制造业的发展,嵌入式系统已经成为制造业的核心技术。它被广泛地应用到工业控制、仿真系统、医疗仪器、信息家电、通信设备等众多领域。目前,围绕嵌入式系统展开研究和开发,已经成为计算机软硬件技术发展最活跃的方向之一。 嵌入式系统不同于通常纯粹的软件系统或
[嵌入式]
面向对象的嵌入式系统设计方法
摘要:通过UML语言对嵌入式系统建模,急准确地完成了分析人员与用户需形式化层次上的一致性,也为程序开发人员建立了清晰的程序结构和行为准则,大大缩短了系统开发周期,并使系统的升级和重用成为可能。本文通过一个用Atmel 89C52单片机实现简单变频调速器系统,说明UML应用与嵌入式系统的分析设计方法。 关键词:嵌入式系统 面向对象分析设计 UML 有限状态机 1 概述 随着我国装备制造业的发展,嵌入式系统已经成为制造业的核心技术。它被广泛地应用到工业控制、仿真系统、医疗仪器、信息家电、通信设备等众多领域。目前,围绕嵌入式系统展开研究和开发,已经成为计算机软硬件技术发展最活跃的方向之一。 嵌入式系统不同于通常纯粹的软件系统或
[应用]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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