一、intr.h里面定义硬件中断号

#define IRQ_EINT0           0
#define IRQ_EINT1           1
#define IRQ_EINT2           2
#define IRQ_EINT3           3
#define IRQ_EINT4           51
#define IRQ_EINT5           52
#define IRQ_EINT6           53
#define IRQ_EINT7           54
#define IRQ_EINT8           55
#define IRQ_EINT9           56
#define IRQ_EINT10         57
#define IRQ_EINT11         58
#define IRQ_EINT12         59
#define IRQ_EINT13         60
#define IRQ_EINT14         61
#define IRQ_EINT15         62
#define IRQ_EINT16         63    

二、在Bsp_cfg.h定义系统中断号

// Static SYSINTR Mapping for driver.
#define SYSINTR_OHCI             (SYSINTR_FIRMWARE+1)
#define SYSINTR_RFIDKEY          (SYSINTR_FIRMWARE+13)
#define SYSINTR_BAKTIMER         (SYSINTR_FIRMWARE+12)
#define SYSINTR_ETH              (SYSINTR_FIRMWARE+11)
#define SYSINTR_CHANGEBATT       (SYSINTR_FIRMWARE+10)
#define SYSINTR_SCANLKEY         (SYSINTR_FIRMWARE+9)
#define SYSINTR_SCANRKEY         (SYSINTR_FIRMWARE+7)
#define SYSINTR_SCANLED          (SYSINTR_FIRMWARE+6)
#define SYSINTR_VOLDEC           (SYSINTR_FIRMWARE+5)
#define SYSINTR_VOLINC           (SYSINTR_FIRMWARE+4)
#define SYSINTR_MATRIX0          (SYSINTR_FIRMWARE+3)

三、在BSPIntrInit()函数里把系统中断号和硬件中断号映射起来

BOOL BSPIntrInit()
{
    S3C2416_IOPORT_REG *pOalPortRegs;
    ULONG value;
    OALMSG(, (L"+++BSPIntrInit\r\n")); 
    // Then get virtual address for IO port
    pOalPortRegs = OALPAtoVA(S3C2416_BASE_REG_PA_IOPORT, FALSE);

    // Add static mapping for Built-In OHCI
    OALIntrStaticTranslate(SYSINTR_OHCI,      IRQ_USBH);
    OALIntrStaticTranslate(SYSINTR_ETH,      IRQ_EINT4);
    OALIntrStaticTranslate(SYSINTR_SCANLED,      IRQ_EINT9);
    OALIntrStaticTranslate(SYSINTR_RFIDKEY,      IRQ_EINT10);
    OALIntrStaticTranslate(SYSINTR_SCANRKEY,     IRQ_EINT11);
    OALIntrStaticTranslate(SYSINTR_SCANLKEY,     IRQ_EINT12);
    OALIntrStaticTranslate(SYSINTR_VOLDEC,       IRQ_EINT13);
    OALIntrStaticTranslate(SYSINTR_VOLINC,       IRQ_EINT14);
    OALIntrStaticTranslate(SYSINTR_MATRIX0,      IRQ_EINT15);
    OALIntrStaticTranslate(SYSINTR_BAKTIMER,    IRQ_TIMER0); 

    OALMSG(, (L"---BSPIntrInit(rc = 1)\r\n"));
    return TRUE;
}

四、使用时要把中断的IO设置为中断模式以及触发模式,这里设置为下降沿触发

BOOL InitVAdr()
{
    DWORD dwIOSize;
    PHYSICAL_ADDRESS  IOPhyAdr = { S3C2416_BASE_REG_PA_IOPORT,  };
    dwIOSize = sizeof(S3C2416_IOPORT_REG);
    if ( NULL == v_pIOP_BAK_regs)
    {  v_pIOP_BAK_regs = (volatile S3C2416_IOPORT_REG *)MmMapIoSpace(IOPhyAdr, (ULONG)dwIOSize, FALSE);
    }//Setup EINT9, GPG1, failing edge triggered
    v_pIOP_BAK_regs->GPGUDP  &=~(<<);   // pull-up enable
    v_pIOP_BAK_regs->GPGUDP  |= (<<);
    v_pIOP_BAK_regs->GPGCON  &=~();
    v_pIOP_BAK_regs->GPGCON  |= ();
    v_pIOP_BAK_regs->EXTINT1 &=~();
    v_pIOP_BAK_regs->EXTINT1 |= ();

    RETAILMSG(BUZZER_DEBUG_MESSAGE, (TEXT("[BUZ]BuzzerInitVAdr\r\n")));
    return (NULL != v_pIOP_BAK_regs)? TRUE:FALSE;
}

五、创建一个事件,并让此事件关联硬件中断映射后的系统中断号,并创建一个线程去等待此中断事件

DWORD Init(){  m_ScanledIntr = CreateEvent(NULL, FALSE, FALSE, NULL);
  InterruptInitialize(SYSINTR_SCANLED, m_ScanledIntr, NULL, ) ;  hKey = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ScanledThread, NULL, 0, NULL);  return TRUE;}

六、创建中断等待线程函数

DWORD ScanledThread()
{  DWORD dwResult;  )
    {
        dwResult = WaitForSingleObject(m_ScanledIntr, );
        if (dwResult == WAIT_OBJECT_0)
        {
        //  此处执行中断后的操作
             //  中断操作执行完后要告诉系统中断函数已执行完,然后开始等待下一个中断函数        InterruptDone(SYSINTR_SCANLED);
        }
        else if (dwResult ==WAIT_TIMEOUT)
        {
             //  此处执行中断等待超时操作
        }
    }
    ;
}

CE5 中断的更多相关文章

  1. angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流

    大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子

  2. myrocks复制中断问题排查

    背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛.随着SSD逐渐普及,硬件存储成本越来越高,面向写优化 ...

  3. GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断

    多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...

  4. UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理

    最近比较忙有一段时间没有更新了,再接再厉继续分享. 案例下载:https://github.com/NewBLife/UWP/tree/master/SuspendSample 先我们看看App在生命 ...

  5. exynos4412中断编程

    中断概述 我们知道,ARM核能处理的异常有7种,但仅仅区分异常的种类显然不能够满足需求.拿手机来说,触摸屏幕和按下音量键可能都是irq异常,但是ARM并不能将他们区分开,而事实的情况是针对这两种中断, ...

  6. [No00009F]CMD在执行命令时的中断快捷键

    有两种: Ctrl+C:完全中断.类似于C语言在while循环中的Break: Ctrl+Break(Pause键):单步中断.类似于C语言在while循环中的Continue:

  7. CPU中断和轮询

    轮询顾名思义,CPU不停的询问,CPU很忙. 中断和轮询不同,是硬件上的,就像一个开关被按下了,没有什么东西在不停的询问开关有没有被按下,开关只是被按下了,就通电了,通电了就会发声一些事情. 可以看看 ...

  8. [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题

    用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...

  9. Linux mips64r2 PCI中断路由机制分析

    Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...

随机推荐

  1. 关于js执行顺序

    http://www.cnblogs.com/sanshi/archive/2011/02/28/1967367.html http://mtnt2008.iteye.com/blog/701981 ...

  2. 解决JSP路径问题的方法(jsp文件开头path, basePath作用)

    原文:http://blog.csdn.net/mingxunzh/article/details/4627185 在JSP中的如果使用 "相对路径"  则有可能会出现问题. 因为 ...

  3. 转:画图解释 SQL join 语句

    画图解释 SQL join 语句 我认为 Ligaya Turmelle 的关于SQL联合(join)语句的帖子对于新手开发者来说是份很好的材料.SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看 ...

  4. 【java基础】方法2

    让形参可变的方法 jdk1.5之后,java允许定义形参长度可变的参数,允许为方法指定数量不确定的形参. package object; public class VariableParam { // ...

  5. ionic cordova

    ionic cordova 打包 文章 http://blog.csdn.net/i348018533/article/details/47258449 http://www.cnblogs.com/ ...

  6. AS3全局与局部坐标转换

    在大部分需要用户点击的游戏中,坐标的转换是一种必须熟练掌握的方法. 首先在一个700x700的舞台中创建2个方块,红色的大方块A是600x600,位于(50,50),绿色的小方块B是300x300.A ...

  7. ring0

    Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3. RING0层拥有最 ...

  8. 51nod 1445 变色DNA(dij)

    题目链接:51nod 1445 变色DNA 看了相关讨论再去用最短路:val[i][j]之间如果是'Y',说明i可以到达j,并且i到达j的代价是i那行 1到j-1 里面'Y'的数量. 最后,求 0到n ...

  9. 第九章 企业项目开发--分布式缓存Redis(1)

    注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题 ...

  10. PDF 补丁丁 0.4.3.1342 测试版发布:修复崩溃问题

    PDF 补丁丁 0.4.3.1342 测试版发布了. 此测试版修复了之前测试版在合并文件.书签编辑器.文档结构探查器中出现的崩溃问题. 推荐下载了0.4.3测试版的网友尽快更新.