- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7 lpc2132系统结构与资源
西安邮电学院 计算机学院 * * IRQ中断的地址向量映射过程 IRQ中断产生之后,微控制器跳转到地址0x18执行代码,该地址处的指令为: LDR PC, [PC, #-0xff0] 在执行该指令时,PC = 0x20 PC – 0xff0 = 0x20 – 0xFF0 = 0xFFFFF030 即将0xfffff030的内容存入PC,该地址正是 VICVectAddr 寄存器。 所以一条ARM指令即可实现程序向中断服务程序的跳转。 西安邮电学院 计算机学院 * * 7.6.5 中断方式应用举例 举例:设置EINT0(#VIC_CH=14)产生向量IRQ中断,发生EINT0后执行(ISR) IRQ_Eint0( );其编码步骤如下: ... PINSEL1 = (PINSEL10xFFFFFFFC)|0x01; VICIntSelect = 0xfffffbfff; VICVectCntl0 = (0x20 | 14); VICVectAddr0 = (int)IRQ_Eint0; EXTINT = 0x01; VICIntEnable = (1 14); ... C代码: 1.设置引脚连接模块,将P0.16设置为EINT0; 2.设置所有中断为IRQ中断; 3.将EINT0(在中断源列表中序号14)设置到优先级0中,并使能IRQ中断; 4.将EINT0的ISR入口地址写入对应优先级的地址寄存器中; 5.清除EINT0的标志后使能EINT0; (1) (2) (3) (4) (5) (5) 西安邮电学院 计算机学院 * * ③ IRQ_Eint0 ??? VICVectAddr0 VICVectAddr IRQ_Eint0 图示IRQ中断的发生过程 00xFFFFFFFF 用户程序 中断服务程序 异常向量表 1.正在执行用户程序; ① 2.外部中断0发生中断; ② 3.VIC硬件将中断服务程序地址装入VICVectAddr寄存器; ④ 4.程序跳转至异常向量表中IRQ入口0x0018处; 5.执行指令跳转至VICVectAddr寄存器中的中断服务地址; ⑤ ⑥ 6.中断服务程序执行完毕,返回被中断的用户程序继续执行被中断的代码。 ⑤ LDR PC, [PC, #-0xff0] 西安邮电学院 计算机学院 * * 例 7?3 使用定时器中断方式实现1s的定时,控制BEEP鸣响1s,静音1s发出间隔的蜂鸣。 资源分析:使用Timer0作为1s的定时,使用P0.7控制BEEP,在Timer0的中断服务程序Timer0_ISR中翻转P0.7引脚状态即可。 7.6.5 中断方式应用举例 西安邮电学院 计算机学院 * * #define BEEP 1 7 /* P0.7控制BEEP蜂鸣 */ /* Timer0 中断服务程序 */ void __irq Timer0_ISR (void) { if ((IO0SET BEEP) == 0) IO0SET = BEEP; /* 静音BEEP */ else IO0CLR = BEEP; /* 鸣响BEEP */ T0IR = 0x01; /* 清除中断标志 */ VICVectAddr = 0x00; /* 通知VIC中断处理结束 */ } int main (void) // 写法1 { PINSEL0 = 0 /* 设置管脚 P0[15:0] 连接 GPIO*/ IO0DIR = BEEP; /* 设置BEEP控制口输出*/ IRQEnable( ); /* 启动代码中的一个宏,清零CPSR_I */ /* 定时器0初始化 */ T0TC = 0; /* 定时器TC0计数初值设置为0*/ T0PR = 0; /* 时钟不分频*/ T0MCR = 0x03; /* 设置T0MR0匹配后复位T0TC,并产生中断*/ T0MR0 = Fpclk; /* 1S定时 匹配目标值*/ T0TCR = 0x01; /* 启动定时器*/ /* 设置定时器0中断IRQ */ VICIntSelect = 0x0
原创力文档


文档评论(0)