《如何访问硬件幻灯片.ppt》由会员分享,可在线阅读,更多相关《如何访问硬件幻灯片.ppt(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如何访问硬件第1页,共10页,编辑于2022年,星期五常用的I/O资源类型资源类型资源类型处理概述处理概述Port可能映射I/O端口范围;应在设备扩展中保存端口范围基址Memory映射内存范围;应在设备扩展中保存内存范围基址Dma调用IoGetDmaAdapter函数创建适配器对象Interrupt调用IoConnectInterrupt函数创建中断对象,中断对象指向ISR(中断服务例程)第2页,共10页,编辑于2022年,星期五第3页,共10页,编辑于2022年,星期五访问端口和内存寄存器的HAL函数第4页,共10页,编辑于2022年,星期五读写I/O端口UCHAR READ_PORT_UC
2、HAR(IN PUCHAR Port);ULONG READ_PORT_ULONG(IN PULONG Port);USHORT READ_PORT_USHORT(IN PUSHORT Port);VOID WRITE_PORT_UCHAR(IN PUCHAR Port,IN UCHAR Value);VOID WRITE_PORT_USHORT(IN PUCHAR Port,IN USHORT Value);VOID WRITE_PORT_ULONG(IN PUCHAR Port,IN ULONG Value);如果设备要求将其寄存器映射到I/O地址空间,则对于具有独立的I/O地址空间的CP
3、U(如Intel)会满足其要求;而对于没有独立的I/O地址空间的CPU则将其映射到内存地址空间。开发人员不用关心这些细节,只须用READ_PORT_XXX函数或WRITE_PORT_XXX访问该寄存器就可以了。第5页,共10页,编辑于2022年,星期五第6页,共10页,编辑于2022年,星期五配置中断typedef struct _DEVICE_EXTENSION .PKINTERRUPT InterruptObject;DEVICE_EXTENSION,*PDEVICE_EXTENSION;ULONG vector;/中断向量中断向量KIRQL irql;/中断请求级中断请求级KINTERR
4、UPT_MODE mode;/中断触发模式中断触发模式(电平电平/边缘边缘)KAFFINITY affinity;/CPU亲和性亲和性BOOLEAN irqshare;/是否与其它设备共享是否与其它设备共享.(接下页接下页)第7页,共10页,编辑于2022年,星期五配置中断status=IoConnectInterrupt(&pdx-InterruptObject,/存放内核中断对象的内存地址存放内核中断对象的内存地址 (PKSERVICE_ROUTINE)OnInterrupt,/中断服务例程中断服务例程 (PVOID)pdx,/传递给传递给ISR的上下文参数的上下文参数 NULL,/当设备
5、有多个中断时必须提供一个自旋锁当设备有多个中断时必须提供一个自旋锁 vector,/中断向量中断向量 irql,/中断请求级中断请求级 irql,/驱动中其它例程与驱动中其它例程与ISR同步时将被提高到该级别同步时将被提高到该级别 mode,/中断触发模式中断触发模式(电平电平/边缘边缘)irqshare,/是否与其它设备共享中断是否与其它设备共享中断 affinity,/该中断的该中断的CPU亲和掩码亲和掩码 FALSE);/是否需要操作系统保存浮点上下文是否需要操作系统保存浮点上下文第8页,共10页,编辑于2022年,星期五中断服务例程的实现当设备生成中断时,HAL将基于你指定的CPU亲合
6、掩码选择一个CPU来服务这个中断。然后该CPU的IRQL提升到合适的同步级并请求一个与中断对象关联的自旋锁。最后调用ISR因为有可能多个设备共享一个中断向量,所以在ISR中首先应该判断是否是自己的设备产生了中断。如果不是则返回FALSE,以便HAL能把中断送往其它设备驱动程序。如果是,应该先清除该中断清除该中断然后返回TRUE。ISR执行在高于DISPATCH_LEVEL的IRQL上。因此ISR中使用的所有代码和数据必须存在于非分页内存中,此外,ISR只能调用有限的内核服务函数。在ISR中应该做尽量少的工作,如果有大量的工作应该请求一个DPC来完成。第9页,共10页,编辑于2022年,星期五中断服务例程的实现BOOLEAN OnInterrupt(PKINTERRUPT InterruptObject,PVOID Context)if(自己的设备没有发出中断自己的设备没有发出中断)return FALSE;return TRUE;第10页,共10页,编辑于2022年,星期五