社区
嵌入开发(WinCE)
帖子详情
硬件中断,Windows CE是怎么发现这些中断的,需要注册?
luocan1986
2009-09-16 02:39:50
如题,板子上多加了一个设备。加了一根中断线,那么Windows CE 是怎么处理这些中断的了?驱动?BSP? 需要在哪里添加这些信息么?
我是菜鸟,我是大菜鸟!Thanks in advance!
...全文
154
13
打赏
收藏
硬件中断,Windows CE是怎么发现这些中断的,需要注册?
如题,板子上多加了一个设备。加了一根中断线,那么Windows CE 是怎么处理这些中断的了?驱动?BSP? 需要在哪里添加这些信息么? 我是菜鸟,我是大菜鸟!Thanks in advance!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
Microsoft
Windows
CE
.NET,Microsoft 已经升级了
Windows
CE
的
中断
体系结构。
Microsoft
Windows
CE
.NET,Microsoft 已经升级了
Windows
CE
6.0 的
中断
体系结构。
在
Windows
CE
增加自定义
中断
处理.doc
在
Windows
CE
增加自定义
中断
处理
Windows
_embedded_
CE
_
中断
结构分析
Windows
_embedded_
CE
_
中断
结构分析
基于
Windows
CE
的数控系统
中断
控制.pdf
基于
Windows
CE
的数控系统
中断
控制.pdf 基于
Windows
CE
的数控系统
中断
控制.pdf
Windows
Embedded
CE
中断
结构分析
本文主要以Win
CE
.NET 5.0为操作系统平台,ARM为
硬件
平台,分析了Win
CE
下
中断
的结构与实现方式
嵌入开发(WinCE)
19,520
社区成员
41,566
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章