wince6.0 s5pv210 中断
1. 在smdkv210\src\oal\oallib\ksarm.h头文件里可以看到wince的中断定义。
设备中断的起始编号即wince预定义的设备中断ID的基值
SYSINTR_DEVICES EQU 8
一共支持64个设备中断
SYSINTR_MAX_DEVICES EQU 64
可用的设备中断ID的基值
SYSINTR_FIRMWARE EQU SYSINTR_DEVICES+16
中断总数
SYSINTR_MAXIMUM EQU SYSINTR_DEVICES+SYSINTR_MAX_DEVICES
那我们自己增加的外设的中断需要以SYSINTR_FIRMWARE为基值来定义,所有自定义的系统中断号都应该基于该值进行累加加1,这些自定义的系统中断号用于和IRQ一一对应。如下:
#define SYSINTR_SHUTPOWER_DETECT (SYSINTR_FIRMWARE+N)
SYSINTR_SHUTPOWER_DETECT为我定义的关机中的中断。
N为当前已定义的最大值(以保证此中断未使用过)。
2. 在datasheet上查要使用的中断号。
我用的是XEINT1/GPH01----->EINT1
3. 在s5pv210_sec_v1\oal\inc\intr_reg.h 中找到我们要用的虚拟中断号IRQ_EINT1。
4. 在smdkv210\src\oal\oallib\intr.c中的BSPIntrInit()函数中加入对GPH01的初始化。
//gph01 as eint1
v_pGPIOregs->GPH0.GP_CON &= ~(0xf<<4);
//gph01 as eint1
v_pGPIOregs->GPH0.GP_CON |= (0xf<<4);
//gph01 pull disable
v_pGPIOregs->GPH0.GP_PUD &=~(0x3<<2);
//gph01 low level triggered
v_pGPIOregs->EINTCON.EXT_INT0_CON &=~(0xF<<4);
//enable eint1
v_pGPIOregs->EINTMSK.EXT_INT0_MASK &=~(0x1<<1);
//Filter Enable for EXT_INT[1] ---DISBLE
v_pGPIOregs->EINTFLT.EXT_FLT0_CON._FLT_CON0 &=~(0x3<<14);
//EINT1 interrupt clear
v_pGPIOregs->EINTPND.EXT_INT0_PEND |=(0x1<<1);
然后调用OALIntrStaticTranslate(SYSINTR_SHUTPOWER_DETECT, IRQ_EINT1)来注册中断。
然后使能中断。
value = IRQ_EINT1;
OALIntrEnableIrqs(1, &value);
BSPIntrInit这个函数由s5pv210_sec_v1\oal\intr\intr.c的OALIntrInit()来调用,
OALIntrInit()最终由OEMInit()来调用。
看这个函数的注释。
// This is Windows CE OAL initialization function. It is called from kernel
// after basic initialization is made.
他由内核来调用的。
5. 修改OALIntrEnableIrqs函数,加入我们对此中断的使能。
if (PhysicalIRQ == PHYIRQ_EINT1)
{
g_pGPIOReg->EINTMSK.EXT_INT0_MASK &=~(0x1<<1); //enable eint1
OALMSG(1, (L"+OALIntrEnableIrqs(%d,)\r\n", PhysicalIRQ));
}
6. 修改OALIntrDisableIrqs函数,加入我们对此中断的关闭。
if (PhysicalIRQ == PHYIRQ_EINT1)
{
g_pGPIOReg->EINTMSK.EXT_INT0_MASK |=(0x1<<1); //enable eint1
g_pGPIOReg->EINTPND.EXT_INT0_PEND |=(0x1<<1); // Clear pending EINT1
OALMSG(1, (L"+OALIntrDisableIrqs(%d,)\r\n", PhysicalIRQ));
}
至此,对bsp修改完成,接下来写驱动。
1. 在驱动的初始化函数中创建一个事件对象
gShutpowerIntrEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
此事件对象用于和中断绑定,来阻塞我们自己写的IST。
2. 然后将刚才创建的事件对象与中断绑定。
InterruptInitialize(SYSINTR_SHUTPOWER_DETECT,gShutpowerIntrEvent, NULL, 0)
3. 创建我们自己的IST
gShutpowerIntrThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ShutpowerIntrThread,this, 0, NULL);
4. 编写IST完成我们在中断到来时需要完成的关机动作。
IST的框架如下:
int WINAPI ShutpowerIntrThread(void) {
while(1) {
WaitForSingleObject(gShutpowerIntrEvent ,INFINITE);
关机代码
}
InterruptDone(SYSINTR_SHUTPOWER_DETECT);
}
至此一个简单的CE中断关机驱动完成。
wince6.0 s5pv210 中断相关推荐
- 在我的S5pv210 wince6.0 上做个支持硬解的wince播放器,播放1080P视频堪比android
作者:gooogleman@foxmail.com 以及P网友合作开发 Sate210 wince6.0 硬解播放器测试视频 http://v.youku.com/v_show/id_XNTIwNTk ...
- WINCE6.0系统调用
********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...
- WINCE6.0操作系统---内核(kernel)学习
********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...
- WINCE6.0+S3C6410串口驱动
********************************LoongEmbedded************************作者:LoongEmbedded(kandi)时间:2011. ...
- WINCE6.0+S3C2443下的usb function(功能)驱动
********************************LoongEmbedded************************ 作者:LoongEmbedded(kandi) 时间:201 ...
- WINCE6.0+S3C2443的启动过程---内核启动
********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...
- WINCE6.0 + S3C2443的启动过程---nboot篇
WINCE6.0 + S3C2443的启动过程---nboot篇 我们启动WINCE6.0的方式是:nboot+eboot+NK.那么是如何启动WINCE6.0系统映像的呢?首先是nboot把eboo ...
- WINCE6.0+S3C2443睡眠和唤醒(sleep and wake up)的实现
1. 系统进入睡眠状态的过程 1.1 硬件相关电路 我们的产品使用GPF0/EINT0作为系统进入睡眠和从睡眠中唤醒的唤醒源,如下图所示: EINT0作为唤醒源,而EINT0在S3C2443的data ...
- WinCE6.0的EBOOT概要
为一个新的硬件设备定制WinCE6.0操作系统,一般需要完成以下几个主要步骤: 1. 针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须 ...
最新文章
- 道理我都懂,但是神经网络反向传播时的梯度到底怎么求?
- Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
- jquery生成一个li_JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
- 杭电OJ1069java实现
- Android 拦截WebView请求,并加入或修改参数(GET)
- 计算机网络 | 网络基础 :网络协议,协议分层,数据封装与分用,地址管理,字节序
- python mysqldb 查询不到最新记录_Python MySQLdb更新查询失败
- pixel 解锁_如何在Google Pixel 4和Pixel 4 XL上禁用面部解锁
- redis 版的 hello world
- python人工智能_人工智能人才缺口千万!学Python抓住风口机会
- bzoj3442学习小组
- Android仿人人客户端(v5.7.1)——通过HTTPS协议的POST方式获取用户的基本信息
- 数据分析,怎么做才算到位?
- Git教程_1 简介
- java 8 官网下载地址
- idea的设置,导致list长度只有1000
- 单片机基础-第一个单片机系统
- 阿里云发送邮件(mail)失败
- Scala数据类型中的Symbol(符号文本)
- 96-Java的打印流、打印流重定向、补充知识:Properties、commons-io框架
热门文章
- mybatis高级查询,批量新增
- 1099. Build A Binary Search Tree (30)
- 题解 P5301 【[GXOI/GZOI2019]宝牌一大堆】
- 【SP26073】DIVCNT1 - Counting Divisors 题解
- VM异常关闭后导致虚拟机无法打开问题解决办法【已解决】
- 基于DBUtils实现数据库连接池
- 【知了堂学习笔记】MySQL数据库常用的SQL语句整理
- 几个删除重复记录的SQL语句
- 第七章 假设检验(3)
- [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]