社区
嵌入开发(WinCE)
帖子详情
硬件中断,Windows CE是怎么发现这些中断的,需要注册?
luocan1986
2009-09-16 02:39:50
如题,板子上多加了一个设备。加了一根中断线,那么Windows CE 是怎么处理这些中断的了?驱动?BSP? 需要在哪里添加这些信息么?
我是菜鸟,我是大菜鸟!Thanks in advance!
...全文
175
13
打赏
收藏
硬件中断,Windows CE是怎么发现这些中断的,需要注册?
如题,板子上多加了一个设备。加了一根中断线,那么Windows CE 是怎么处理这些中断的了?驱动?BSP? 需要在哪里添加这些信息么? 我是菜鸟,我是大菜鸟!Thanks in advance!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luocan1986
2009-09-17
打赏
举报
回复
OS自己程序来发现中断的,然后再交给ISR来处理,详细流程估计得看内核代码
[Quote=引用 10 楼 ztg328 的回复:]
我现在不理解的是wince系统是怎么发现有中断的是就是从硬件发生中断到wince知道有中断这一步是在哪里实现的 是在 WaitForSingleObject(hEvent,INFINITE); 这句吗 他一直在检测硬件然后有中断了就处理 还是
[/Quote]
luocan1986
2009-09-17
打赏
举报
回复
顶起来 谁能给一个流程。。。
visualthinking
2009-09-17
打赏
举报
回复
我的理解是,如果添加了自己的中断,需要在ISR中添加 自己的逻辑中断号?然后再实现自己的IST,不知道对不对?
我是把一个键盘UserKey的中断改成了自定义的,当然前提是:UserKey的中断引脚引出来。
像填空一样:
OEMINTERRUPTENABLE\OEMINTERRUPTDISBALE\OEMINTERRUPTDONE,然后OEMINTERRUPTHANDLER
都是在switch--case里面添加,然后将intr.h里面加一个SYSINTR_XXX的声明,就ok
如果高级一些的做法,是GIISR,装载一个
KernelIoControl没有试过,不知是如果关联到EINTX的
ZTG328
2009-09-17
打赏
举报
回复
我现在不理解的是wince系统是怎么发现有中断的是就是从硬件发生中断到wince知道有中断这一步是在哪里实现的 是在 WaitForSingleObject(hEvent,INFINITE); 这句吗 他一直在检测硬件然后有中断了就处理 还是
luocan1986
2009-09-16
打赏
举报
回复
我的理解是,如果添加了自己的中断,需要在ISR中添加 自己的逻辑中断号?然后再实现自己的IST,不知道对不对?
[Quote=引用 8 楼 xuguod20042576 的回复:]
一般中断都是采用动态中断影射:例如
动态中断映射
好消息是,如果在设备驱动程序中使用 IO 控制码 IOCTL_HAL_REQUEST_SYSINTR
调用 KernelIoControl 来支持 IRQ/SYSINTR 映射,就不需要硬编码 SYSINTR 到
OAL 中。该调用最终在 OALIntrRequestSysIntr 函数中结束,这个函数为所给
IRQ 动态分配新的 SYSINTR,然后在内核的中断映射数组中注册这个 IRQ 和
SYSINTR 映射。查找 SYSINTR_MAXUMUM 以下的空闲 SYSINTR 值,比静态赋值
SYSINTR 更灵活,因为该机制不需要在添加新驱动程序到 BSP 时对 OAL 作任何
修改。
在使用 IOCTL_HAL_REQUEST_SYSINTR 调用 KernelIoControl 时,您在 IRQ 和
SYSINTR 之间建立了 1:1 的关系。如果 IRQ-SYSINTR 映射表已经有一个指定 IRQ
的条目,OALIntrRequestSysIntr 将不会创建鸠欤个条目。要从中断映射表中删除
一个条目, 比如在卸载驱动程序时, 则使槟 IO 控制码 IOCTL_HAL_REQUEST_SYSINTR
来调用 KernelIoControl。IOCTL_HAL_RELEASE_SYSINTR 取消从 SYSINTR 值到 IRQ
的关联。
下面的代码示例阐述了 IOCTL_HAL_REQUEST_SYSINTR 和 IOCTL_HAL_RELEASE_
SYSINTR 的使用。它接收一个自定义的值 (dwLogintr) 并把这个值传递给 OAL 来
转换成 SYSINTR 值,然后把这个 SYSINTR 与一个 IST 事件关联起来。
DWORD dwLogintr = IRQ_VALUE;
DWORD dwSysintr = 0;
HANDLE hEvent = NULL;
BOOL bResult = TRUE;
// Create event to associate with the interrupt
m_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
if (m_hDetectionEvent == NULL)
{
return ERROR_VALUE;
}
// Ask the kernel (OAL) to associate an SYSINTR value to an IRQ
bResult = KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,
&dwLogintr, sizeof(dwLogintr),
&dwSysintr, sizeof(dwSysintr),
0);
if (bResult == FALSE)
{
return ERROR_VALUE;
}
// Initialize interrupt and associate the SYSINTR value with the event.
bResult = InterruptInitialize(dwSysintr, hEvent,0,0);
if (bResult == FALSE)
{
return ERROR_VALUE;
}
// Interrupt management loop
while(!m_bTerminateDetectionThread)
{
// Wait for the event associated to the interrupt
WaitForSingleObject(hEvent,INFINITE);
// Add actual IST processing here
// Acknowledge the interrupt
InterruptDone(m_dwSysintr);
}
// Deinitialize interrupts will mask the interrupt
bResult = InterruptDisable(dwSysintr);
// Unregister SYSINTR
bResult = KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR,
&dwSysintr, sizeof(dwSysintr),
NULL,0,
0);
// Close the event object
CloseHandle(hEvent);
[/Quote]
xuguod20042576
2009-09-16
打赏
举报
回复
一般中断都是采用动态中断影射:例如
动态中断映射
好消息是,如果在设备驱动程序中使用 IO 控制码 IOCTL_HAL_REQUEST_SYSINTR
调用 KernelIoControl 来支持 IRQ/SYSINTR 映射,就不需要硬编码 SYSINTR 到
OAL 中。该调用最终在 OALIntrRequestSysIntr 函数中结束,这个函数为所给
IRQ 动态分配新的 SYSINTR,然后在内核的中断映射数组中注册这个 IRQ 和
SYSINTR 映射。查找 SYSINTR_MAXUMUM 以下的空闲 SYSINTR 值,比静态赋值
SYSINTR 更灵活,因为该机制不需要在添加新驱动程序到 BSP 时对 OAL 作任何
修改。
在使用 IOCTL_HAL_REQUEST_SYSINTR 调用 KernelIoControl 时,您在 IRQ 和
SYSINTR 之间建立了 1:1 的关系。如果 IRQ-SYSINTR 映射表已经有一个指定 IRQ
的条目,OALIntrRequestSysIntr 将不会创建鸠欤个条目。要从中断映射表中删除
一个条目, 比如在卸载驱动程序时, 则使槟 IO 控制码 IOCTL_HAL_REQUEST_SYSINTR
来调用 KernelIoControl。IOCTL_HAL_RELEASE_SYSINTR 取消从 SYSINTR 值到 IRQ
的关联。
下面的代码示例阐述了 IOCTL_HAL_REQUEST_SYSINTR 和 IOCTL_HAL_RELEASE_
SYSINTR 的使用。它接收一个自定义的值 (dwLogintr) 并把这个值传递给 OAL 来
转换成 SYSINTR 值,然后把这个 SYSINTR 与一个 IST 事件关联起来。
DWORD dwLogintr = IRQ_VALUE;
DWORD dwSysintr = 0;
HANDLE hEvent = NULL;
BOOL bResult = TRUE;
// Create event to associate with the interrupt
m_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
if (m_hDetectionEvent == NULL)
{
return ERROR_VALUE;
}
// Ask the kernel (OAL) to associate an SYSINTR value to an IRQ
bResult = KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,
&dwLogintr, sizeof(dwLogintr),
&dwSysintr, sizeof(dwSysintr),
0);
if (bResult == FALSE)
{
return ERROR_VALUE;
}
// Initialize interrupt and associate the SYSINTR value with the event.
bResult = InterruptInitialize(dwSysintr, hEvent,0,0);
if (bResult == FALSE)
{
return ERROR_VALUE;
}
// Interrupt management loop
while(!m_bTerminateDetectionThread)
{
// Wait for the event associated to the interrupt
WaitForSingleObject(hEvent,INFINITE);
// Add actual IST processing here
// Acknowledge the interrupt
InterruptDone(m_dwSysintr);
}
// Deinitialize interrupts will mask the interrupt
bResult = InterruptDisable(dwSysintr);
// Unregister SYSINTR
bResult = KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR,
&dwSysintr, sizeof(dwSysintr),
NULL,0,
0);
// Close the event object
CloseHandle(hEvent);
luocan1986
2009-09-16
打赏
举报
回复
还想买本ARM的来看,硬件功底太差了,该还给老师的都还了!
[Quote=引用 6 楼 gooogleman 的回复:]
这个还可以,看这个对驱动工程师有帮助的,在www.china-pub.com的。
[/Quote]
gooogleman
2009-09-16
打赏
举报
回复
这个还可以,看这个对驱动工程师有帮助的,在www.china-pub.com的。
luocan1986
2009-09-16
打赏
举报
回复
[Quote=引用 2 楼 gooogleman 的回复:]
楼主这个问题很长,我给你捕鱼方法看何宗健的那本书
看这里哦http://blog.csdn.net/gooogleman/archive/2008/11/11/3266887.aspx
[/Quote]
<<32位嵌入式系统硬件设计与调试>> 张崙的?
luocan1986
2009-09-16
打赏
举报
回复
推荐的英文书 那个连接要注册才能打开么?
[Quote=引用 2 楼 gooogleman 的回复:]
楼主这个问题很长,我给你捕鱼方法看何宗健的那本书
看这里哦http://blog.csdn.net/gooogleman/archive/2008/11/11/3266887.aspx
[/Quote]
luocan1986
2009-09-16
打赏
举报
回复
还是Google老大 速度啊。。找书去
gooogleman
2009-09-16
打赏
举报
回复
楼主这个问题很长,我给你捕鱼方法看何宗健的那本书
看这里哦
http://blog.csdn.net/gooogleman/archive/2008/11/11/3266887.aspx
gooogleman
2009-09-16
打赏
举报
回复
楼主这个问题很长,我给你捕鱼方法看何宗健的那本书
看这里哦
http://blog.csdn.net/gooogleman/archive/2008/11/11/3266887.aspx
《
Windows
CE
嵌入式开发入门——基于Xscale架构》 第7章
Windows
CE
体系结构
本文深入介绍了
Windows
CE
的层次式架构,特别关注内核模块,包括
中断
处理机制和进程结构。
中断
体系结构由
硬件
中断
、内核ISR、OAL ISR和IST组成,
中断
服务模型围绕这5部分展开。此外,还探讨了
Windows
CE
的进程,包括进程组成、进程简介和进程结构。最后,讨论了
注册
表管理,特别是基于Hive的
注册
表的使用和保存
注册
表数据的方法。
【Win
CE
中断
】
Windows
CE
中断
处理机制|
中断
处理
本文详细介绍了
Windows
CE
操作系统下的
中断
处理机制,包括物理
中断
请求(IRQ)、逻辑
中断
(SYSINTR)、
中断
服务例程(ISR)和
中断
服务线程(IST)的概念。深入探讨了
中断
处理流程、
中断
屏蔽及嵌套
中断
处理等内容。
Windows
Embedded
CE
中断
机制解析与优化实践
本文深入解析
Windows
Embedded
CE
的四层
中断
处理架构,包括
硬件
中断
控制器、内核异常处理、OAL适配层和
中断
服务线程(IST),并系统阐述
中断
延迟测量方法与关键优化技术,如
中断
合并、IST预处理、缓存锁定及优先级调整。同时覆盖
中断
丢失、系统挂起等典型问题排查方法,以及
中断
共享、动态
注册
和嵌套
中断
等进阶开发实践。
如何制作支持VMWare的
Windows
CE
BSP
本文详细介绍了如何创建一个支持VMWare的
Windows
CE
板级支持包(BSP),特别是针对VMWare特有的
硬件
如AMD AM79C970A网卡和USB 1.1 UHCI控制器的驱动支持。通过修改Platform Builder中的
CE
PC BSP,并调整驱动以适应VMWare的初始化设置,实现了在VMWare环境中运行
Windows
CE
并支持USB和网络设备。
Windows
CE
中断
处理 Note
本文详细介绍了
中断
处理的内部结构流程,包括
中断
服务调度程序、
中断
服务例程ISR、Kernel的响应处理以及
中断
服务线程IST的工作原理。同时,还探讨了ARM
硬件
产生
中断
到ISR之前的流程,以及单ISR和多ISR
硬件
平台的区别。
嵌入开发(WinCE)
19,523
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章