毕业论文再次修改版- 副本 - 图文(7)
#define FPGA_RCV_COUNT_H_REG2 #define FPGA_RCV_COUNT_L_REG2 #define FPGA_CHECK_SUM_REG2 #define FPGA_RESERVED_REG2
FPGA_REG(0x09) //接收计数寄存器高 FPGA_REG(0x0A) //接收计数寄存器低 FPGA_REG(0x0B) //累加和 FPGA_REG(0x0C) //保留 FPGA_REG(0x0D) //波特率寄器高 FPGA_REG(0x0E) //波特率寄器低 FPGA_REG(0x0F) //控制寄存器
#define FPGA_BAUND_RATE_H_REG2 #define FPGA_BAUND_RATE_L_REG2 #define FPGA_CTRL_REG2
定义物理地址及RAM区长度。由于FPGA提供16个寄存器给CPU访问,因此长度应该为16字节。而EMC_nCS3片选信号挂了两个器件:FGPA和CAN,因此根据原理图,FPGA的地址应该为A16对应的片选,为0xXXXXXXXX XXXXX010 00000000 00000000=0xE3020000:
#define FPGA_ADDR_RANGE 16 #define FPGA_PHYSICAL_ADDR 0xE3020000 static volatile UINT8 *g_lpBaseFPGA = NULL; static volatile INTC_REGS_T *pINTCRegs = NULL;
物理地址映射: PHYSICAL_ADDRESS pa;
DWORD dwThreadID; BOOL bResult = FALSE; /*
* 分配FPGA 访问空间 */
pa.QuadPart = FPGA_PHYSICAL_ADDR;
g_lpBaseFPGA = (volatile UINT8 *) MmMapIoSpace(pa,
FPGA_ADDR_RANGE, FALSE);
if(g_lpBaseFPGA == NULL) { }
RETAILMSG(1, (TEXT(\))); return FALSE;
(2)中断驱动程序设计
第 30 页 (共41 页)
各种外设时通过中断和WinCE核心进行通信的。过程是: 1)硬件设备产生硬件中断
2)OAL完成硬件中断到逻辑中断(SYSINTR)的转换(OEMinit函数实现) 3)系统识别逻辑中断,同时进行处理。
分两步:中断服务例程(ISR)和中断服务线程(IST)。
ISR主要负责中断响应,一般要求短小精干,对执行效率有很高的要求,只负责最简单的工程,即响应设备并返回一个中断标示给核心。而对中断的实际处理则在IST中。
ISR的主要作用:
1 如果数据可能丢失或者被下一个中断改写,则ISR将数据从设备读到缓冲区 2 ISR清除设备上的中断条件 3 ISR向内核返回一个SYSINTR 4 内核设置供IST等待的中断事件
5 调度程序调度等待的IST以执行后续的中断服务操作。 ISR分为静态ISR和可安装的ISR。
静态ISR只能静态被编译到核心,在运行时不能改变,和IST通信是单向的,ISR-IST,支持中断嵌套,可以使用核心的堆栈。
可安装的ISR由内核管理程序从DLL中动态加载,是由IST-ISR,多个ISR可以同一个中断请求相连,按加载驱动的顺序进行调度,共享内存的使用比较灵活。
IST是运行在用户空间的中断服务线程,负责接到系统逻辑中断号之后的处理,使用中首先要注册自己,再与一个系统事件关联。
一般来说,使用InterruptInitialize函数注册自己,使用WaitForSingleObject函数来等待终端请求事件。系统调度器会调度这个线程来进行中断的处理。
流接口驱动一般在XXX_Init里面做这些事情,IST是Device.exe的一个附属线程。 具体实现过程是: 1 创建一个事件 2 得到系统的中断号
3 创建一个挂起的中断服务线程(IST) 4 设置中断服务线程的优先级别
5 调用函数InterruptInitialize通知系统注册中断 6 回复中断服务线程IST,IST开始服务 因此,WinCE6的中断发生和处理过程总结如下:
第 31 页 (共41 页)
? 硬件设备产生中断信号
? 中断信号被异常处理程序(ExceptionHandle)捕获 ? 异常处理程序激活挂载中断服务例程ISR ? ISR响应硬件,并操作硬件设备 ? ISR将中断映射
? ISR设置相应的核心中断标示
? 中断服务调度程序与OAL例程合作,设置中断事件,操纵在特定中断事件上的
等待队列
? OAL操作硬件,改变硬件的中断状态,将其设置为开中断
? 中断事件激活系统调度程序, 在相隔一段时间以后调度中断服务线程 ? IST处理中断的相关事件,并调用系统的支持库 ? 系统支持库访问硬件设备,完成对硬件设备的操作
LPC3250支持74个中断源,每个中断都有中断使能位,并可被配置为不同优先级,以及电平或者边沿触发方式,可根据条件对原始中断状态以及掩码中断寄存器访问。因此此款ARM9芯片对中断的支持是非常强大的,满足本课题的设计要求。
LPC3250所有的外部引脚中断通过同步电路连接到两个子中断控制器SIC1和SIC2,它们的四个输出被连接到主中断控制器(MIC)的四个输入端,建议配置这些输入为低电平有效。下图为sub2中断控制器基地址分配。
图5.5 Slave2(Sub2)中断控制寄存器基地址
本FPGA中断采用Slave interrupt controller 2,因此,定义其基地址为: #define SIC2_BASE 0x40010000 /* Slave2 int ctrl registers base*/
物理地址与虚拟地址映射: pa.QuadPart = SIC2_BASE;
pINTCRegs = (volatile INTC_REGS_T *) MmMapIoSpace(pa, sizeof (INTC_REGS_T), FALSE); if(pINTCRegs == NULL) {
RETAILMSG(1, (TEXT(\))); }
在分配完FPGA访问空间后,就需要从OAL请求一个SYSINTR值: if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_nFpgaIrq,
第 32 页 (共41 页)
sizeof(UINT32), &g_nFpgaSysIntr, sizeof(UINT32), NULL)) {
RETAILMSG(1,
(_T(\failed to request sysintr value for FPGA interrupt \\r\\n\))); goto exit; }
请求成功后,在驱动的初始化函数中通过CreateEvent的方式来创建事件对象,就可以创建中断线程:
g_htFpgaIST = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE) FPGA_IntrThread, NULL, 0,
&dwThreadID); if (g_htFpgaIST == 0) {
RETAILMSG(1, (_T(\))); //goto exit; return FALSE; }
g_hInterrupt = CreateEvent(NULL, FALSE, FALSE, NULL);
g_hRxEvent = CreateEvent(NULL, FALSE, FALSE, NULL); 最后在驱动的IST中,当硬件中断产生时,就通过SetEvent的方式来通知应用程序: static DWORD WINAPI FPGA_IntrThread(LPVOID pContext) {
DWORD dwRet;
if (!(InterruptInitialize(g_nFpgaSysIntr, g_hInterrupt, 0, 0))) {
RETAILMSG(1, (_T(\ return 0; }
RETAILMSG(1,(L\ /*中断线程开始运行*/ while (!g_bKillIST) {
dwRet = WaitForSingleObject(g_hInterrupt, INFINITE); if (g_bKillIST == TRUE) return 0;
SetEvent(g_hRxEvent);
RETAILMSG(1,(L\ InterruptDone(g_nFpgaSysIntr);
第 33 页 (共41 页)
}
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




