嵌入式实验二报告.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式实验二报告

实时嵌入式系统 实验报告 实验名称: 外部中断 信息与通信学院 电子信息工程 李保卫 0800220216 实验时间:第四周 星期一 第三大节 【实验目的】 学习LPC系列处理器向量中断控制器VIC的功能原理; 掌握外部中断引脚功能设置及外部中断的工作模式设置; 了解中断服务函数的编写方法。 【实验要求】 了解LPC系列处理器中断控制器的功能原理。 【实验原理】 一、LPC系列处理器中断控制器的原理 参见《ARM原理与嵌入式应用——基于LPC2400处理器和IAR开发环境》中有关中断系统的章节,重点要掌握向量中断控制器、外部中断引入以及系统控制寄存器中对外部中断的设置等。 二、实验板上的外部中断 1.原理图 2.说明 实验板上使用EINT0脚引入外部中断,在实验板上用一个按键实现。EINT0引脚先被上拉电阻上拉为高电平,当按键按下时,电平下降为低电平,因此中断方式应设置为下降沿触发。电路里的电容起到按键去抖动的功能。 三、驱动程序说明 1. irq.c说明 irq.c实现中断系统的初始化和中断服务子程序安装功能,它提供2个函数: 1) Init_VIC( ):对向量中断控制器VIC的初始化,一般由目标板启动初始化函数TargetResetInit( )调用; 2) install_irq ( ):将用户编写的中断服务函数安装,三个参数分别为中断号、中断服务函数地址、优先级。 2. extint.c说明 extint.c提供外部中断EINT0的驱动,它提供2个函数: 1) EINTInit( ):EINT0的初始化,实现EINT0使能、设置为下降沿触发、安装EINT0中断服务函数; 2) EINT0_Handler( ):EINT0中断服务函数,流程为:清除发生的EINT0中断、开中断、按键中断计数器eint0_counter加一、关中断、中断向量地址复位。其中按键中断计数器eint0_counter可以声明为外部全局变量,每发生一次按键中断自加一,用户即可在自己的应用程序中利用这个变量来实现不同的功能。 四、实验内容及程序代码 1、Init_VIC( )函数: void init_VIC(void) { DWORD i = 0; DWORD *vect_addr, *vect_cntl; VICIntEnClr = 0xffffffff; // 使能全部清零 VICVectAddr = 0; // 默认向量地址为0 VICIntSelect=0; /*设置中断选择寄存器VICIntSelect,将32个中断请求全部分配为IRQ*/ for ( i = 0; i VIC_SIZE; i++ ) // 32个中断服务向量复位 { vect_addr = (DWORD *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + i*4); vect_cntl = (DWORD *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + i*4); *vect_addr = 0x0; //中断服务函数都指向开头 *vect_cntl = 0xF; //优先级最低 } return; } 2、install_irq ( )函数: DWORD install_irq( DWORD IntNumber, void *HandlerAddr, DWORD Priority ) { DWORD *vect_addr; DWORD *vect_cntl; VICIntEnClr=1IntNumber; /*根据参数IntNumber(中断号)将中断使能清除寄存器VICIntEnClr相应位清零,禁止该中断*/ if ( IntNumber = VIC_SIZE ) { return ( FALSE ); } else { /* find first un-assigned VIC address for the handler */ vect_addr = (DWORD *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + IntNumber*4); vect_cntl = (DWORD *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + IntNumber*4); *vect_addr = (DWORD)HandlerAddr; /* se

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档