- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 保持党的纯洁性活动方案-第九支部.doc
- 东风小康6S基础管理培训.ppt
- 09级高三化学测试题1.doc
- (写意葡萄).ppt
- 化工原理精馏章节复习.ppt
- 西坪小学校园周边环境整改方案.doc
- 外墙工程统一做法.doc
- 安全性评价第一阶段工作总结.doc
- MALTAB实验.doc
- 功率计和频率计实际操作基础.ppt
- 2024至2030年中国人造棉面料行业投资前景及策略咨询报告.docx
- 重庆市渝中区遴选公务员2024年国家公务员考试考试大纲历年真题10340笔试历年典型考题及解题思路附.docx
- 2024至2030年中国甲基苯乙酮行业深度调研及发展预测报告.docx
- 2024至2030年中国羚羊角类饮片行业深度调查与前景预测分析报告.docx
- 重庆市面向中国农业大学定向选调2024届大学毕业生2024年国家公务员考试考试大纲历年真题14笔试历.docx
- 重庆市面向西北工业大学定向选调2024届大学毕业生00笔试历年典型考题及解题思路附答案详解.docx
- 中国不动杆菌感染治疗药行业市场现状分析及竞争格局与投资发展研究报告2024-2029版.docx
- 2024至2030年全球与中国ETL软件市场现状及未来发展趋势.docx
- 初中八年级(初二)生物下册期末考试1含答案解析.docx
- 干簧式继电器项目申请报告.docx
文档评论(0)