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中断关机驱动完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Regular Expression

Reference: 正则表达式三十分钟入门&#xff1a; http://deerchao.net/tutorials/regex/regex.htm 在线测试工具&#xff1a; regexlib&#xff08;http://regexlib.com/default.aspx&#xff09; 吐血推荐&#xff0c;比较狠的一个工具&#xff1a; Expresso &…

【转】vsftp配置实例-虚拟用户锁定目录

转自&#xff1a; vsftp配置实例-虚拟用户锁定目录_jasonyang69的博客-CSDN博客_vsftpd锁定用户目录 快速解决 vsftpd nologin 虚拟用户 拒绝访问 无法登录_小飞飞飞鱼的博客-CSDN博客_vsftpd 拒绝访问 一、实验步骤 0、启用 nologin shell #vim /etc/shells /bin/sh /bi…

顺丰快递,果然不一般!

2010-06-03 18:27:03快件到达北京集散点 2010-06-03 19:15:41快件离开北京集散点 发往北京集散中心 2010-06-03 21:05:34快件到达北京集散中心 2010-06-03 21:06:12快件离开北京集散中心 发往深圳集散中心 2010-06-04 02:56:29快件到达深圳集散中心 2010-06-04 02:57:04快件离开…

windowsCE异常和中断服务程序初探(-)

1。中断/异常相量的装入和执行方式。 中断和异常都是异步发生的事件&#xff0c;当该事件发生&#xff0c;系统将停止目前正在执行的代码转而执行事件响应的服务程序。而事件服务程序的入口点就是中断/异常向量所在的位置。arm的中断向量可以是0x0开始的低地址向…

windowsCE异常和中断服务程序初探(=)

继续上次的内容&#xff0c;在上次的分析中我们已经对SWI,FIQ,IRQ的流程有了一个大概的认识&#xff0c;下面继续对DataAbort和PrefetchAbort以及公共分发程序CommonHandler进行一下认识&#xff0c;完整异常处理的流程。 2-4 DataAbort服务程序 由数据异常触发&…

【转】Linux中tty、pty和pts概念及区别

转自&#xff1a;Linux中tty、pty和pts概念及区别 - 知乎 基本概念 ①tty(终端设备的统称): tty一词源于Teletypes&#xff0c;或者teletypewriters&#xff0c;原来指的是电传打字机&#xff0c;是一种通过串行线连接键盘和打印机进行发送、阅读信息的设备&#xff0c;后来…

Microsoft Jet SQL 参考在线手册

http://www.weste.net/book/sql/转载于:https://www.cnblogs.com/cwfsoft/archive/2010/06/19/1760961.html

Windows CE下驱动程序开发基础

我想即使读者看过微软的关于驱动开发的培训教材和CE帮助文档中的驱动部分&#xff0c;头脑中仍然一片茫然。要想真正了解驱动程序必须结合一些驱动程序源码&#xff0c;在此我以串口驱动程序&#xff08;COM16550&#xff09;中初始化过程为线索简单讲一讲驱动开发的基础知识。…

【转】高端球管使用了哪些高科技?

转自&#xff1a;高端球管使用了哪些高科技&#xff1f; 本文来源&#xff1a;第三方维修平台 本文作者&#xff1a;RepairCT 随着人类发现X射线&#xff0c;这项技术不断应用到医学领域&#xff0c;比如X光机、DR、CT、乳腺钼靶等医疗设备&#xff0c;它们的主要核心均是利用…

关于代码组织的一些看法(上)

今天看了一个篇关于架构的文章&#xff0c;略有所感&#xff0c;记录一下。 软件的架构基本是从一个原始需求出发&#xff0c;逐步构建可维护、更灵活的开发框架的过程&#xff0c;在这个构建过程中可能会逐渐的增加代码的复杂度来满足灵活性的要求&#xff0c;从这个层面来讲&…

CE下基于Zylonite硬件平台的SD卡驱动开发

摘要&#xff1a;本文结合实际项目&#xff08;一款以WINCE为操作系统内核的GSM/PHS双模智能手机&#xff09;对嵌入式系统Windows CE5.0的底层驱动&#xff08;SD卡&#xff09;的架构进行了分析和研究&#xff0c;以MARVELL公司提供的基于INTEL Zylonite硬件平台的BSP为基础&…

【转】svn详解

转自&#xff1a;svn status详解 - 世界&#xff0c;太精彩 - 博客园 svn 是在提交前查看本地文本和版本库里面的文件的区别。返回值有许多种具体含义如下&#xff1a; L abc.c # svn已经在.svn目录锁定了abc.c M bar.c # bar.c的内…

outofmemory异常如何解决?

一年多来打交道最多的就是WinForm&#xff0c;界面设计确实比MFC容易多了&#xff0c;但是问题出的也更隐晦&#xff0c;要想完全解决还是离不开框架底层的知识。 现在又遇到了一个麻烦的问题&#xff1a;切换界面时&#xff0c;有时GroupBox&#xff08;里面嵌有ListView&…

pthread-win32在VC2005下的使用

pthread-win32是一个在Win32环境下的Unix POSIX线程库的移植. 有了它, 可以比较方便的移植Unix/Linux多线程程序到Windows下. 在VC2005下使用也很简单: 下载, 地址是 http://sourceware.org/pthreads-win32 里面include目录中是头文件, lib目录中是.lib和.dll文件. 在VC项目的属…

【转】apt命令

转自&#xff1a;apt命令详解 - 简书 apt命令可以说是Ubuntu系统下最为重要的命令&#xff0c;安装、更新、卸载软件&#xff0c;升级系统内核都离不开apt命令。 一、apt的简介 apt的全称是Advanced Packaging Tool是Linux系统下的一款安装包管理工具。 最初的时候&#xff…

asp.net 之高速缓存

一、输出高速缓存 页面顶部插入&#xff1a; <% OutputCache Duration"60" VaryByParam"None" %> <% OutputCache Duration"60" VaryByParam"id;page" %> 二、部分页面高速缓存 (UserControl) <% OutputCache Durati…

【转】在 Bash 中使用 -exec 选项和 find 命令搜索文件

转自&#xff1a;https://www.delftstack.com/zh/howto/linux/linux-find-exec/ 我们可以使用带有 -exec 选项的 find 命令来查找包含我们要搜索的文本的文件。 主要概念是使用 find 命令获取工作目录中的每个文件&#xff0c;并执行 grep 命令查找每个文件中的文本。 例子&…

SQL Server 相关create操作语句

创建数据库&#xff1a; create database jylton (namejylt,filenamee:\db\jylt.mdf,size4,filegrowth100%,maxsize1024 )log on(namejylt_log,filenamee:\db\jylt_log.ldf,size4,filegrowth100%)go 1&#xff0c;增&#xff1a;insert into t_user values(wangpeng,19);s 2&a…

【转】svn st 状态详解

转自&#xff1a;svn st 状态详解 - 小小平凡世界 - 博客园 svn st status (stat, st): 显示工作副本中目录与文件的状态。 用法: status [PATH...] 未指定参数时&#xff0c;只显示本地修改的条目(没有网络访问)。 使用 -q 时&#xff0c;只显示本地修改条目的摘要信息。…

linux C之access函数

access()&#xff1a;判断是否具有存取文件的权限 相关函数 stat&#xff0c;open&#xff0c;chmod&#xff0c;chown&#xff0c;setuid&#xff0c;setgid 表头文件 #include<unistd.h> 定义函数 int access(const char * pathname, int mode); 函数说明…