EVC应用程序实现IO中断流程。
来源:互联网 发布:mac安装ipa到手机 编辑:程序博客网 时间:2024/05/06 14:19
首先是映射物理地址了。应该都知道。
常见的是virtualalloc和virtualcopy,用完后需要virtualfree.
也可以使用:
PHYSICAL_ADDRESS potadress = {0x56000000 ,0};//根据需要自己定义自己的地址
(volatile IOPreg*)MmMapIoSpace(potadress, sizeof(IOPreg),FALSE);
释放使用:MmUnmapIoSpace((PVOID)gpio_base,sizeof(IOPreg));
然后操作是:配置具体io实现中断,然后通过开发板提供bsp的XXXIntr.h。找到对应的中断号
比如:
UINT g_CAN_EINT = IRQ_EINT11; // Determined by 2440 board layout.
UINT g_CAN_SYSTR = SYSINTR_UNDEFINED;
然后申请中断:
KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_CAN_EINT, sizeof(UINT32), &g_CAN_SYSTR, sizeof(UINT32), NULL);//是驱动/应用程序和kernel通讯的一个接口函数,具体的调用意义是看该函数的IOCTRL是什么以及kernel中对应的处理函数(ioctrl table);当然需要判断是否执行成功。
然后创建event,将该事件与中断号绑定
g_CAN_LISTEN_EVENT = CreateEvent(NULL, FALSE, FALSE, NULL);
(InterruptInitialize(g_CAN_SYSTR, g_CAN_LISTEN_EVENT, 0, 0))//也需要判断绑定成功与否。
然后就可以创建中断线程CreateThread
;;;WaitForSingleObject(g_CAN_LISTEN_EVENT, INFINITE) == WAIT_OBJECT_0
每次中断响应完后需要使用 InterruptDone(g_CAN_SYSTR);
释放的时候就需要做一下几步:
CloseHandle 中断线程(可以在创建线程后就执行)
CloseHandle event
InterruptDisable g_CAN_SYSTR
KernelIoControl(IOCTL_HAL_RELEASE_SYSINTR,&g_CAN_SYSTR, sizeof(UINT32),NULL,0, NULL);//释放。
呵呵这是我的一次尝试,执行成功,估计还有不足,请大家指出!
- EVC应用程序实现IO中断流程。
- EVC应用程序打包工具
- 中断流程 中断向量
- WindowsCE 应用程序开发(基于EVC)
- WinCE 应用程序开发(基于EVC)
- WindowsCE 应用程序开发(基于EVC)
- WindowsCE 应用程序开发(基于EVC)
- EVC实现WIN CE下截屏
- EVC实现WIN CE下截屏
- eVC实现文件遍历查找
- EVC实现WIN CE下截屏
- EVC中实现中文显示
- MSP430利用IO中断方式来实现按键检测
- EVC
- 中断/IO/DMA
- 中断/IO/DMA
- STM8S IO外部中断
- Io与中断
- C++中建立对象间消息连接的系统方法
- for循环里的i++和++i的效率
- 进制转换
- GB学习【4】--场景管理--节点方式
- jsp连接sql server2005
- EVC应用程序实现IO中断流程。
- 当代数字示波器的发展
- asp.net2.0回发或回调参数无效问题的解决
- Flash8 Date类
- C++中建立对象间消息连接的系统方法
- SQL Server 2008新特性:更改跟踪
- Jakarta 的 验证器。有时间学习以下
- 我现在常用的git命令
- SQL Server 存储字符数大于8000的问题WRITETEXT,UPDATETEXT