ARM中断分析之三:WinCE驱动的中断分析

现在有许多高端的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操作系统的驱动中断号

posted @ 2012-05-11 17:11  yfm1202  阅读(1197)  评论(0编辑  收藏  举报