ARM11外部中断C语言编程实现总结.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM11(3)——外部中断 WF 2013.1.24 最近正在学习ARM11(S3C6410开发板)的外部中断部分,稍有心得,特此总结一些学习笔记,分享出来,献给那些像我一样正在ARM11上裸奔的嵌入式学徒们,同时也希望看到此文的业界前辈多多指教。 外部中断基础知识总结: ARM11(S3C6410开发板)共有187根多功能I/O口,其中127根可用于外部中断,而这127个外部中断引脚又被分为十组:EINT0~EINT9,这十组对应VICX(中断矢量寄存器)中0、1、32、33、53五个中断号。十组外部中断和五个中断号之间的对应关系却是略显复杂:EINT0共28根引脚被分为了四部分分别对应了0、1、32、33四个中断号,EINT1~EINT9这9组共99根引脚却只对应了53一个中断号。 外部中断逻辑图: 矢量寄存器 中断代号 中断数目 中断组 引脚名 引脚数 VIC0 0 28 EINT0 GPN0~GPN3 4 1 GPN4~GPN11 8 VIC1 32 GPN12~GPN15 GPL8~GPL11 8 33 GPM0~GPM4 GPL12~GPL14 8 53 99 EINT1~EINT9 99 外部中断的基本编程思想总结: 初始化I/O引脚设置——GPX; (1)、必须设置所需引脚为中断模式——GPXCON; (2)、可选性设置上下拉电阻和数据位——GPXPUD、GPXDAT; 2、初始化外部中断设置——EINTX; (1)、选择外部中断的触发方式——EINTXCON; (2)、清除外部中断屏蔽——EINTXMASK; (3)、外部中断悬挂给1置0——EINTXPEND; 3、初始化总中断设置——VICX; (1)、选择中断模式——VICXINTSELECT; (2)、设置中断函数入口——VICXVECTADDR; (3)、中断使能——VICXINTENABLE; 4中断函数出口处设置; (1)、清除当前中断函数记录——VICXADDR; (2)、给1置0外部中断悬挂位——EINTXPEND。 程序实例: 程序说明:实现按键中断控制LED灯的显示,每按一个键LED会显示一种方案。 .c文件代码: //引入GPN引脚(外接按键)三个寄存器的地址标号 #define rGPNCON (*(volatile unsigned*)(0x7f008830)) #define rGPNDAT (*(volatile unsigned*)(0x7f008834)) #define rGPNPUD (*(volatile unsigned*)(0x7f008838)) //引入GPM引脚(外接LED灯)三个寄存器的地址标号 #define rGPMCON (*(volatile unsigned*)(0x7f008820)) #define rGPMDAT (*(volatile unsigned*)(0x7f008824)) #define rGPMPUD (*(volatile unsigned*)(0x7f008828)) //引入外部中断控制寄存器的地址标号 #define rEINT0CON0 (*(volatile unsigned*)(0x7f008900)) #define rEINT0MASK (*(volatile unsigned*)(0x7f008920)) #define rEINT0PEND (*(volatile unsigned*)(0x7f008924)) //引入总中断控制寄存器的地址标号 #define rVIC0INTSELECT (*(volatile unsigned*)(0x7120000C)) #define rVIC1INTSELECT (*(volatile unsigned*)(0x7130000C)) #define VIC0VECTADDR0 (*(volatile unsigned*)(0) #define VIC0VECTADDR1 (*(volatile unsigned*)(0) #define rVIC0INTENABLE (*(volatile unsigned*)(0) #define rVIC0ADDR (*(volatile unsigned*)(0x71200f00)) #define rVIC1ADDR (*(volatile unsigned*)(0x71300f00)) int keyva=0;//定义全局变量keyva,用于记录键值 int wait(int tm)//延时函数 { int i,j; for(i=0;itm;i++) for(j=0;j125;j++

文档评论(0)

新起点 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档