CE5 中断
一、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 中断的更多相关文章
- angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流
大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子
- myrocks复制中断问题排查
背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛.随着SSD逐渐普及,硬件存储成本越来越高,面向写优化 ...
- GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...
- UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理
最近比较忙有一段时间没有更新了,再接再厉继续分享. 案例下载:https://github.com/NewBLife/UWP/tree/master/SuspendSample 先我们看看App在生命 ...
- exynos4412中断编程
中断概述 我们知道,ARM核能处理的异常有7种,但仅仅区分异常的种类显然不能够满足需求.拿手机来说,触摸屏幕和按下音量键可能都是irq异常,但是ARM并不能将他们区分开,而事实的情况是针对这两种中断, ...
- [No00009F]CMD在执行命令时的中断快捷键
有两种: Ctrl+C:完全中断.类似于C语言在while循环中的Break: Ctrl+Break(Pause键):单步中断.类似于C语言在while循环中的Continue:
- CPU中断和轮询
轮询顾名思义,CPU不停的询问,CPU很忙. 中断和轮询不同,是硬件上的,就像一个开关被按下了,没有什么东西在不停的询问开关有没有被按下,开关只是被按下了,就通电了,通电了就会发声一些事情. 可以看看 ...
- [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题
用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...
- Linux mips64r2 PCI中断路由机制分析
Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...
随机推荐
- 《Effective C#》:区别和认识四个判等函数
.Net有四个判等函数?不少人看到这个标题,会对此感到怀疑.事实上确是如此,.Net提供了ReferenceEquals.静态Equals,具体类型的Equals以及==操作符这四个判等函数.但是这四 ...
- iOS 键盘
http://blog.sina.com.cn/s/blog_7018d3820101djut.html 一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboa ...
- 《利用python进行数据分析》读书笔记--第十一章 金融和经济数据应用(一)
自2005年开始,python在金融行业中的应用越来越多,这主要得益于越来越成熟的函数库(NumPy和pandas)以及大量经验丰富的程序员.许多机构发现python不仅非常适合成为交互式的分析环境, ...
- Shell 语法之结构化命令(流程控制)
许多程序在脚本命令之间需要某种逻辑流控制,允许脚本根据变量值的条件或者其他命令的结果路过一些命令或者循环执行这些命令.这些命令通常被称为结构化命令.和其他高级程序设计语言一样,shell提供了用来控制 ...
- winform小程序---猜拳小游戏
因为学的时间不长,所以借鉴了一些资料做了这个小程序,大家共同学习,共同进步.感觉很有自信,世上无难事,只怕有心人. using System; using System.Collections.Gen ...
- OpenGL的glTexImage2D()与gluBuild2DMipmaps()的使用方法及区别
OpenGL的glTexImage2D()与gluBuild2DMipmaps()的使用方法及区别 说明:两者的都是生成纹理,即:将载入的位图文件(*.bmp)转换成纹理贴图. 1.glTexImag ...
- CSS和Js样式属性的对照关系
注意:1.在使用js时,如newTD.style.paddingLeft="200";(错误),正确生效的写法是newTD.style.paddingLeft="200p ...
- maven eclipse 安装
jdk 的 系统变量一定要用 JAVA_HOME maven 的系统变量也一定要用 M2_HOME 配置在path 中 一定要用 %JAVA_HOME%\bin; 和 %M2_HOME%\bi ...
- MySQL 循环执行kill语句杀掉连接
mysql中创建索引时,一直卡住不动,刚开始以为可能是数据量太大导致的,可是一直等了很久还是一样没有反应,看来操作的表被锁住了,执行show processlist 果然发现有大量的lock,使用ki ...
- 51nod1693 水群
题目链接:51nod1693 水群 题解参考大神的博客:http://www.cnblogs.com/fighting-to-the-end/p/5874763.html 这题时限0.4秒,真的够狠的 ...