wince5.0 中断 详解

WinCE5.0下DM9000网卡驱动移植与寄存器配置详解 嵌入式系统开发中,寄存器作为硬件与软件交互的核心接口,其正确配置直接决定外设功能实现。以DM9000这款经典以太网控制器为例,其采用索引+数据的双寄存器架构,通过地址复用降低引脚数量,但需严格遵循先写索引后读数据的操作时序。在WinCE5.0这类嵌入式OS中,驱动开发需重点关注内存空间映射、中断处理及NDIS接口适配,其中寄存器配置错误会导致70%以上的驱动异常。典型应用场景包括工业控制设备的网络通信,通过优化RCR接收配置可实现30%吞吐量提升,而零拷贝发送技术能降低15%CPU占用。掌握PHY初始化、中 阅读详情

原帖地址http://topic.youkuaiyun.com/u/20071008/11/D54DF4A6-09EF-4D7F-AADB-2F60FF3824FC.html

1 WinCE中第一次对中断的处理是在OAL的OEMInit()中,该函数调用OALIntrInit()完成对中断的初始化.


2 OALIntrInit()对中断的初始化做了如下工作:

2.1 通过配置IPR0-IPR33设置中断优先级,优先级定义在g_IntPriorities和g_IntPriorities2中,其中IRQ_OSMR0为最高优先级, IRQ_KEYPAD为最低优先级.
2.2 设置ICCR,在空闲模式时只对有效的,非屏蔽的中断响应.
2.3 BSPIntrInit().该函数对BSP中需要处理的中断进行初始化工作,主要是设置ICMR寄存器使GPIO1(CPLD)和GPIO2为非屏蔽状态,然后通过OALIntrStaticTranslate建立IRQ和sysintr之间的关联.
2.4 对于WinCE来说,中断可以作如下分类:
    1> 与BSP无关的Kernel使用的内部中断, 比如IRQ_OSMR0(forsched),IRQ_RTCALARM;
    2> 与BSP有关的CPU内部中断,比如IRQ_USBOHCI, IRQ_OSMR1, IRQ_KEYPAD, IRQ_FFUART, IRQ_BTUART, IRQ_STUART, IRQ_DMAC, IRQ_USBFN;
    3> CPLD所管理的中断,以GPIO1通知CPU中断的产生,在收到GPIO1 产生的中断后可以通过读取地址0x0A00_0010判断具体的中断源,比如IRQ_GPIO1_MMCCD(MMC_IN_INT, MMC_OUT_INT), IRQ_GPIO1_USBCD(USB_IN_INT, USB_OUT_INT), IRQ_GPIO1_PCMCIA_S0_CSC(CF_IN_INT. CF_OUT_INT),还有在代码中没有处理的SIM卡中断(SIM_IN_INT, SIM_OUT_INT).
    4> GPIO2_120产生的中断,通过寄存器ICIP的位10-GPIO_x通知CPU中断的产生,然后查询寄存器GEDR_x可以判断具体的中断源,比如IRQ_GPIO12_MARATHO, IRQ_GPIO10_ETHERNET,IRQ_GPIO13_UCB1400;
    5> 以Installable ISR形式产生的中断,这类中断通常是以DLL的形式安装,在注册表中定义其实际的IRQ中断值,比如IRQ_MMC_DETECT,IRQ_MMC_CONTROL;

2.5 有几种方式可以建立实际中断IRQ到系统中断sysintr之间的关联,对于build-in设备,可以在OEMInit中通过 OALIntrStaticTranslate来建立静态的关联;但是对于installable ISRs,可以在注册表中定义实际的中断IRQ,然后通过在KernelIOControl中使用IOCTL_HAL_REQUEST_SYSINTR来实时分配新的sysintr,这有助于驱动的移植.


3 在CPU接收到中断后,对中断的处理是在 OEMInterruptHandler()中,该函数的首先屏蔽该中断,最后得到实际中断IRQ所对应的sysintr的值.


3.1 首先它通过中断寄存器ICHP得到实际的IRQ值;
3.2 对于GPIO产生的中断,通过清空GFER和GRER寄存器来屏蔽相同的中断;对于其余的CPU内部中断,通过清空ICMR寄存器的相应位来屏蔽中断;
3.3 对于Kernel使用的IRQ_OSMR0和IRQ_OSMR2,分别进行处理,得到sysintr;
3.4 对于通过GPIO0,GPIO1和GPIO2_120产生的中断,将IRQ的值进行转化,使之与OAL/intr.c和bulverder_intr.h中所定义的新的IRQ值相对应,此时的IRQ值就不是在ICIP中对定义的IRQ值了;
3.5 接着调用NKCallIntChain(irq)判断该IRQ是否已经被加入中断列表,同时开始调用该中断的ISR程序.


4 当中断处理完成后,调用OALIntrDoneIrqs(),重新使能中断.

WinCE6.0的EBOOT概要 在开发的过程中使用EBOOT,可以提高开发效率。前一篇介绍NBOOT加载EBOOT的方法时提到,NBOOT必须将EBOOT放在内存中指定的位置,这个位置是由EBOOT的来决定的。本文粗略的介绍了WinCE6、0下EBOOT的内容,但没有涉及具体的代码实现,相关代码可以参考目录C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT。EBOOT在实现必备功能的前提下,我们还可以扩展其功能,譬如说初始化LCD,并显示特定的启动画面,显示加载映像的进度等。 阅读详情

相关推荐

基于Android13的系统启动流程分析(三)之FirstStageMain阶段

init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init1. Bootloader 引导当按下设备电源键时,最先运行的就是 bootloader(固化在ROM的程序),bootloader 的主要作用就是硬件设备(如 CPU、flash、内存)的初始化并加载到RAM,通过建立内存空间映射,为装载 Linux 内核做好准备,。

q1210249579的博客 5496

WINCE5.0的中断深入了解(转)

WINCE5.0的中断深入了解1.总体了解流程首先描述wince5.0 (2440BSP)的中断流程:流程1.创建事件aà创建线程ISTà用InterruptInitialize〈系统中断号绑定线程IST〉à线程IST进入等待事件a状态(挂起状态)。流程2.外部引发中断à OEMInterruptHandler屏蔽中断à把物理中断转换成系统中断,其他à重新使能中断。(ISR过程)>à操作系统根据系

josh915的专栏 1379

4D Gaussian Splatting for Real-Time Dynamic Scene Rendering-4DGS阅读笔记

为了实现实时动态场景渲染,同时还能具备较高的训练和存储效率,作者提出了四维高斯溅射(4D-GS)方法,将其作为动态场景的一种整体表示方式,而不是对每个单独的帧应用三维高斯溅射(3D-GS)方法。在 4D-GS 中,提出了一种新颖的显式表示方法,它同时包含三维高斯模型和四维神经体素。受 HexPlane 启发,提出了一种分解的神经体素编码算法,以高效地从四维神经体素构建高斯特征,然后应用一个轻量级多层感知器(MLP)来预测在新时间戳下的高斯变形。

2403_85515624的博客 2343

Windows下用diskpart挂载ESP分区:UEFI引导维护实战

ESP分区是UEFI引导体系下的核心区域,存放着bootmgfw.efi、BCD等启动关键文件。它采用FAT32文件系统,默认情况下Windows刻意不对其分配盘符,以避免普通用户误改导致系统无法启动。但在引导修复、双系统菜单调整、WinPE工具部署等场景中,挂载ESP分区几乎是绕不开的第一步。通过Windows自带的diskpart命令行,可以安全地为ESP分区分配临时盘符,完成引导文件备份、bcdedit配置或bcdboot重建等操作。从ESP分区的角色讲起,逐个梳理挂载前需掌握的分区识别方法与安全习惯

weixin_34205826的博客 267

STK中的传感器、雷达、发射机、接收机、天线

本文根据STK手册介绍了传感器、雷达、发射机、接收机、天线等对象的基本属性,简略分析了它们的不同之处。

wangyulj的专栏 1万+

【上海大学计算机组成原理实验报告】七、程序转移机制

学习实现程序转移的硬件机制//掌握堆栈寄存器的使用//手动方式实现子程序调用转移过程//手动方式实现子程序返回转移过程//编程实现`OUT`寄存器交替显示`11`和`55`//若要求`11`和`55`各显示`50`次后停机,应该如何修改程序?//根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当`LDPC`有效时,如果此时`DUBS`上的值就是转移的目标地址,则此目标地址被打入`PC`,从而实现程序的转移;若`LDPC`为`0`是附带条件的,就形成“条件转移”。

HackerKevon的博客 2472

WINCE5.0的中断深入了解

WINCE5.0的中断深入了解1.总体了解流程首先描述wince5.0 (2440BSP)的中断流程:流程1.创建事件aà创建线程ISTà用InterruptInitialize〈系统中断号绑定线

618

SAP ABAP 实用小技巧合集 (一)

本合集包含了笔者从事 ABAP 开发 17 年以来积累的小技巧。持续更新。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3218

WINCE5.0+2443 camera中断不能进来的原因

<br />因为项目需要,我需要调试和完成WINCE5.0+2443系统和驱动的功能,在调试camera驱动的时候,发现一个很郁闷的问题,就是camera的中断一直进不来,因为我之前在WINCE6.0+2443系统中已实现了camera中断了,而WINCE5.0和WINCE6.0下的camra驱动架构基本一样,可是为什么camera中断一直会进不来呢?分析如下:<br />1.       中断ISR对camera中断设置不正确。<br />在OEMInterruptHandler()函数中加入调试信息,只

chinesedragon2010的专栏 2073

ESP32学习笔记06-UART 的485 通讯模式

通信方式选择UART 控制器支持多种通信模式,使用函数 uart_set_mode() 可以选择模式。选择特定模式后,UART 驱动程序将处理已连接 UART 设备的相应行为。例如,主机开始向 Tx FIFO 缓冲区写入数据时,UART 驱动程序会自动置位 RTS 管脚(逻辑 1);最后一位数据传输完成后,驱动程序就会取消置位 RTS 管脚(逻辑 0)。要使用此模式,软件。

Car12 2476

11.1华为OD机试真题 新系统 - 整理学生编号 (Java/Py/C/C++/Js/Go)

11.1华为OD机试真题 新系统 - 整理学生编号 (Java/Py/C/C++/Js/Go)

算法大师! 381

WINCE5.0和WINCE6.0的内存与系统架构

<br />WINCE5.0和WINCE6.0的内存与系统架构<br />http://topic.csdn.net/u/20090410/14/75bba2cb-cefc-4ca5-b4f5-4165bbf16006.html<br />http://wenku.baidu.com/view/b7adad4bcf84b9d528ea7ab0.html<br />http://msdn.microsoft.com/en-us/library/bb331824.aspx<br />http://www.msd

chinesedragon2010的专栏 2414

【RH850/U2A】:功能安全

功能安全相关

3130

分析三星5.0BSP中断

<br />看三星的5.0中断,看的一头雾水,相当郁闷。现在重新理清一下。<br />sontitan牛人也指示过一些。<br />引用楼主 wangxin_801115 的帖子:<br />请问这两个函数KernelIoControl和InterruptInitialize函数的区别是什么呢?? <br />个人理解:先用KernelIoControl申请中断号 <br />          然后利用InterruptInitialize把 (从KernelIoControl申请的)中断号与事件相关联

fei198811的专栏 1847

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WinCE OAL中的中断处理

作者:ARM-WinCE 关于WinCE的中断处理,OAL中主要是实现了ISR部分,一般IST会在设备驱动中实现。推荐一篇WinCE的中断架构的文章,如下:http://msdn.microsoft.com/zh-cn/library/ms836807.aspx 建议对WinCE中断不了解的朋友,可以先看看这片文章。架构如图:  这张图想必很多人都见过,主要

唐勉的ARM/Linux/WinCE专栏 5330

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

wince中断处理

 1 WinCE中第一次对中断的处理是在OAL的OEMInit()中,该函数调用OALIntrInit()完成对中断的初始化. 2 OALIntrInit()对中断的初始化做了如下工作:2.1 通过配置IPR0-IPR33设置中断优先级,优先级定义在g_IntPriorities和g_IntPriorities2中,其中IRQ_OSMR0为最高优先级, IRQ_KEYPAD为最低优

chenyt2007的专栏 2114

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

wince 5.0 .2440 5.0BSP的中断过程

以前在优快云写过一些wince5.0中断的文章,现在重新看看,发现以前的有些理解是错误的,想翻开来改改,可是郁闷的优快云在前台没有返回后台的编辑功能,所以现在重新写一篇纠正一下。 首先描述wince5.0 (2440BSP)的中断流程

menuconfig的专栏 724

wince 中断

WINCE5.0的中断深入了解1.总体了解流程首先描述wince5.0 (2440BSP)的中断流程:流程1.创建事件aà创建线程ISTà用InterruptInitialize〈系统中断号绑定线程IST〉à线程IST进入等待事件a状态(挂起状态)。流程2.外部引发中断à OEMInterruptHandlerà操作系统根据系统中断号触发事件a。流程3.挂起的IST线程等待到事件a进入就绪状态,得到执行时间后开始执行中断服务代码, 最后调用InterruptDone重新使能当前的中断。你需要为你的设备驱动写

絮絮叨叨ing。。。 844
上一篇: WINCE5.0的中断深入了解
下一篇: WinCE Cache操作函数
wolfcmd1231
博客等级 码龄17年 15粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值