社区
嵌入开发(WinCE)
帖子详情
硬件中断,Windows CE是怎么发现这些中断的,需要注册?
luocan1986
2009-09-16 02:39:50
如题,板子上多加了一个设备。加了一根中断线,那么Windows CE 是怎么处理这些中断的了?驱动?BSP? 需要在哪里添加这些信息么?
我是菜鸟,我是大菜鸟!Thanks in advance!
...全文
144
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
Embedded从入门到精通系列课程(32):
Windows
CE
6.0的
中断
处理
中断
处理是
Windows
CE
6.0中的一个重要内容。掌握
中断
处理是底层驱劢开发工程师的基本要求,同时难度比较大,因为它要求工程师必须有
硬件
和软件两方面的知识。我们这节课将结合PXA270的开发平台的源代码对
中断
处理迚行...
Windows
Embedded
CE
中断
结构分析
本文主要以Win
CE
.NET 5.0为操作系统平台,ARM为
硬件
平台,分析了Win
CE
下
中断
的结构与实现方式
Windows
内核-系统调用
熟悉
Windows
三环API到
Windows
内核的执行流程,清晰的了解调用细节 是在游戏对抗中不可缺少的技术点 自写三环API(让调试器(OD,
CE
)断点无效) SSDT HOOK(让调试器(OD,
CE
)无法打开进程) 系统调用: API三环...
基于Xscale 270 嵌入式
Windows
CE
开发实验与实践
第六章:根据Intel Xscale270的接口资源以及实验平台的
硬件
配置,介绍基本接口实验,包括简单LED控制、
中断
、ADC/DAC控制、直流/步进电机等实验,重点引导读者了解
Windows
CE
6.0驱动开发及应用程序开发。...
嵌入式系统/ARM技术中的
Windows
CE
模块和组件概述
通过内置程序支持通讯、
Windows
CE
外壳、驱动
硬件
设备 驱动Win32应用程序界面设备的附件和对应用程序开发者常用的开发模式。 OEM改编层(OAL): 允许OEM厂商使
Windows
CE
适应它们的
硬件
包括一套为...
嵌入开发(WinCE)
19,498
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章