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

上传人:罗晋 文档编号:9078001 上传时间:2021-02-01 格式:DOC 页数:5 大小:34.50KB
返回 下载 相关 举报
ARM11外部中断C语言编程实现总结.doc_第1页
第1页 / 共5页
ARM11外部中断C语言编程实现总结.doc_第2页
第2页 / 共5页
ARM11外部中断C语言编程实现总结.doc_第3页
第3页 / 共5页
ARM11外部中断C语言编程实现总结.doc_第4页
第4页 / 共5页
ARM11外部中断C语言编程实现总结.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《ARM11外部中断C语言编程实现总结.doc》由会员分享,可在线阅读,更多相关《ARM11外部中断C语言编程实现总结.doc(5页珍藏版)》请在三一文库上搜索。

1、ARM11(3)外部中断WF 2013.1.24 最近正在学习ARM11(S3C6410开发板)的外部中断部分,稍有心得,特此总结一些学习笔记,分享出来,献给那些像我一样正在ARM11上裸奔的嵌入式学徒们,同时也希望看到此文的业界前辈多多指教。外部中断基础知识总结:ARM11(S3C6410开发板)共有187根多功能I/O口,其中127根可用于外部中断,而这127个外部中断引脚又被分为十组:EINT0EINT9,这十组对应VICX(中断矢量寄存器)中0、1、32、33、53五个中断号。十组外部中断和五个中断号之间的对应关系却是略显复杂:EINT0共28根引脚被分为了四部分分别对应了0、1、32

2、、33四个中断号,EINT1EINT9这9组共99根引脚却只对应了53一个中断号。外部中断逻辑图:矢量寄存器中断代号中断数目中断组引脚名引脚数VIC0028EINT0GPN0GPN341GPN4GPN118VIC132GPN12GPN15GPL8GPL11833GPM0GPM4GPL12GPL1485399EINT1EINT999外部中断的基本编程思想总结:1、 初始化I/O引脚设置GPX;(1)、必须设置所需引脚为中断模式GPXCON;(2)、可选性设置上下拉电阻和数据位GPXPUD、GPXDAT;2、初始化外部中断设置EINTX;(1)、选择外部中断的触发方式EINTXCON;(2)、清除

3、外部中断屏蔽EINTXMASK;(3)、外部中断悬挂给1置0EINTXPEND;3、初始化总中断设置VICX;(1)、选择中断模式VICXINTSELECT;(2)、设置中断函数入口VICXVECTADDR;(3)、中断使能VICXINTENABLE;4中断函数出口处设置;(1)、清除当前中断函数记录VICXADDR;(2)、给1置0外部中断悬挂位EINTXPEND。程序实例:程序说明:实现按键中断控制LED灯的显示,每按一个键LED会显示一种方案。.c文件代码:/引入GPN引脚(外接按键)三个寄存器的地址标号#define rGPNCON (*(volatile unsigned*)(0x7

4、f008830) #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)/引入外部中断控制寄存器的地址

5、标号#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 V

6、IC0VECTADDR0 (*(volatile unsigned*)(0x71200100)#define VIC0VECTADDR1 (*(volatile unsigned*)(0x71200104)#define rVIC0INTENABLE (*(volatile unsigned*)(0x71200010)#define rVIC0ADDR (*(volatile unsigned*)(0x71200f00)#define rVIC1ADDR (*(volatile unsigned*)(0x71300f00)int keyva=0;/定义全局变量keyva,用于记录键值int w

7、ait(int tm)/延时函数int i,j;for(i=0;itm;i+)for(j=0;j125;j+)return 0;void GPM_Init(void)/GPM(LED灯)状态初始化rGPMCON=(rGPMCON & (0xffff) | (10) | (14) | (18) | (112);rGPMPUD=0x00;rGPMDAT=rGPMDAT&0x00;void Key14_ISR(void) _irq;/中断函数声明void Key56_ISR(void) _irq;void INT_Init(void) /中断初始化设置 rGPNCON = (rGPNCON & 0x

8、FFFFF000) | 0x0AAA; rEINT0CON0 = (rEINT0CON0 & 0xFFFFF000)|0xfffff222;/EINT0CON0=0010 0010 0010 rEINT0MASK &= 0xFFFFFFc0;/ rEINT0PEND |= 0x0000003F; rVIC0INTSELECT = 0x0; rVIC1INTSELECT = 0x0; VIC0VECTADDR0 = (unsigned int)Key14_ISR; VIC0VECTADDR1 = (unsigned int)Key56_ISR; rVIC0INTENABLE |= 0x03; v

9、oid _irq Key14_ISR(void) /中断函数1 unsigned int pend14; int i; pend14=rEINT0PEND; pend14=pend14&0x0f; for(i=0;i4;i+)if(pend14&(1i) keyva=i+1; rEINT0PEND|=0x0000003f; rVIC0ADDR = 0x00000000; void _irq Key56_ISR(void) 中断函数2 unsigned int pend56; int i; pend56=rEINT0PEND; pend56=pend56&0x30; for(i=4;i6;i+)

10、if(pend56&(1i)=0) keyva=i+1; rEINT0PEND|=0x0000003f; rVIC0ADDR = 0x00000000; void dis1(void)/亮灯方案1rGPMDAT=rGPMDAT & (0x0f) | (10);wait(10);void dis2(void) /亮灯方案2rGPMDAT=rGPMDAT & (0x0f) | (11);wait(10);void dis3(void) /亮灯方案3rGPMDAT=rGPMDAT & (0x0f) | (12);wait(10);void dis4(void) /亮灯方案4rGPMDAT=rGPMD

11、AT & (0x0f) | (13);wait(10);void dis5(void) /亮灯方案5rGPMDAT=rGPMDAT & (0x0f) | (13) | (10);wait(10);void dis6(void) /亮灯方案6rGPMDAT=rGPMDAT & (0x0f) | (11) | (12);wait(10);void dis0(void) /亮灯方案7rGPMDAT=rGPMDAT & (0x0f) | (11) | (12)| (13) | (10);wait(10);void main(void)GPM_Init();INT_Init(); while(1) sw

12、itch(keyva)case 0:dis0();break;case 1:dis1();break;case 2:dis2();break;case 3:dis3();break;case 4:dis4();break;case 5:dis5();break;case 6:dis6();break; .s文件代码:IMPORT main ;引入C语言入口 EXPORT ENTRY AREA Init,CODE,READONLYENTRY b ResetHandler b . ResetHandler mrc p15,0,r0,c1,c0,0;开启ARM11中断模式 orr r0,r0,#(124) mcr p15,0,r0,c1,c0,0 b main;跳到C语言函数 END注:本人没有学过汇编,故.s文件写的不好,见谅!学过汇编的可以自己写.s文件。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1