ARM中断分析之三:WinCE驱动的中断分析
2012-05-11 17:11
176 查看
现在有许多高端的ARM芯片,像苹果、三星、华为都采用ARM芯片做为智能手机芯片。
这篇文章介绍基于ARM的WinCE操作系统的驱动的中断分析。WinCE驱动分为两类,这里介绍流驱动,流驱动比较简单。
关于流驱动,下面是一张框图,描叙了流驱动的地位:
我们从右往左看上面的那张图,最右边是应用程序。应该程序通过CreateFile、WriteFile、ReadFile、IoCtrl、CloseFile这几个函数来访问驱动,这和其他的操作系统是一样的,WindowsXP、Linux都是如此。
流驱动是实现了一批函数的库(DLL),包括XXX_Init、XXX_Deinit,上面的框图都列出来了。
在使用驱动之前,需要加载驱动(激活驱动),也就是说让驱动就绪,以便可以让应用程序访问。采用函数ActivateDeviceEx函数来激活,ActivateDeviceEx接收一个注册表路径作为参数,所以,我们需要把驱动信息按照格式写入到注册表内。下面是一个GPIO的注册表示例:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\GPIO]
"Dll" = "s3c6410_gpio.dll"
"Prefix" = "GIO"
"Order" = dword:63
"Index" = dword:1
"FriendlyName" = "GPIO Driver"
在驱动内部,如果使用中断,那么操作步骤如下:
1、驱动初始化时,由物理中断号获取虚拟中断号,调用函数KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR…)
2、驱动初始化时,事件句柄绑定虚拟中断号,函数函数InterruptInitialize,然后创建一个IST线程,并Waiting事件
3、中断处理:硬件中断产生了,在IST线程内的等待事件就会返回,接下来处理中断,最后调用函数InterruptDone,意指中断处理完毕
4、退出驱动前,调用InterruptDisable,禁用当前中断,它与InterruptInitialize相反。
5、退出驱动前,释放虚拟中断号资源KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR...)
如果开发一个以太网驱动,那么怎么知道以太网芯片的硬件中断号是什么?答案是,需要问BSP开发人员或硬件开发人员。它不像Windows驱动,Windows驱动的中断号是由系统通过消息的方式发送给驱动。
像Windows XP操作系统的驱动中断号
这篇文章介绍基于ARM的WinCE操作系统的驱动的中断分析。WinCE驱动分为两类,这里介绍流驱动,流驱动比较简单。
关于流驱动,下面是一张框图,描叙了流驱动的地位:
我们从右往左看上面的那张图,最右边是应用程序。应该程序通过CreateFile、WriteFile、ReadFile、IoCtrl、CloseFile这几个函数来访问驱动,这和其他的操作系统是一样的,WindowsXP、Linux都是如此。
流驱动是实现了一批函数的库(DLL),包括XXX_Init、XXX_Deinit,上面的框图都列出来了。
在使用驱动之前,需要加载驱动(激活驱动),也就是说让驱动就绪,以便可以让应用程序访问。采用函数ActivateDeviceEx函数来激活,ActivateDeviceEx接收一个注册表路径作为参数,所以,我们需要把驱动信息按照格式写入到注册表内。下面是一个GPIO的注册表示例:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\GPIO]
"Dll" = "s3c6410_gpio.dll"
"Prefix" = "GIO"
"Order" = dword:63
"Index" = dword:1
"FriendlyName" = "GPIO Driver"
在驱动内部,如果使用中断,那么操作步骤如下:
1、驱动初始化时,由物理中断号获取虚拟中断号,调用函数KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR…)
2、驱动初始化时,事件句柄绑定虚拟中断号,函数函数InterruptInitialize,然后创建一个IST线程,并Waiting事件
3、中断处理:硬件中断产生了,在IST线程内的等待事件就会返回,接下来处理中断,最后调用函数InterruptDone,意指中断处理完毕
4、退出驱动前,调用InterruptDisable,禁用当前中断,它与InterruptInitialize相反。
5、退出驱动前,释放虚拟中断号资源KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR...)
如果开发一个以太网驱动,那么怎么知道以太网芯片的硬件中断号是什么?答案是,需要问BSP开发人员或硬件开发人员。它不像Windows驱动,Windows驱动的中断号是由系统通过消息的方式发送给驱动。
像Windows XP操作系统的驱动中断号
相关文章推荐
- ARM中断分析之三:WinCE驱动的中断分析
- ARM中断分析之三:WinCE驱动的中断分析
- ARM中断分析之四:WinCE的OAL层的中断分析
- ARM中断分析之四:WinCE的OAL层的中断分析
- 从键盘驱动分析wince中断机制
- ARM中断分析之四:WinCE的OAL层的中断分析
- [arm 驱动]Linux输入子系统分析
- WinCE驱动中设备中断的处理
- ARM-Linux驱动--MTD驱动分析(一)
- 【堪称经典】WinCE 5.0下鼠标键盘驱动分析 重点讲解PS/2键盘驱动
- Linux时间子系统(十七) ARM generic timer驱动代码分析
- Linux时间子系统之(十七):ARM generic timer驱动代码分析
- WINCE键盘驱动流程不完全分析
- WINCE键盘驱动流程分析
- WinCE驱动中设备中断的处理
- ARM中断分析
- WinCE串口驱动PDD层代码简单分析
- Exynos4412 中断驱动开发(二)—— 中断处理流程分析
- Wince驱动中的_try,_except涵义分析
- S3C2410 && WinCE6.0的中断处理分析 (转载自博客园牛人we-hjb)