欢迎来到天天文库
浏览记录
ID:38363935
大小:164.50 KB
页数:3页
时间:2019-06-11
《ARM中断及相关寄存器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ARM中断及相关寄存器 要正确应用ARM处理器必须首先对它的系统寄存器进行正确配置,下面简要介绍一下ARM寄存器,包括一些中断寄存器设置如中断状态(0x8000.0240,0x8000.1240,0x8000.2240)和中断屏蔽寄存器(0x8000.0280,0x8000.1280,0x8000.2280)。 ARM中断寄存器主要包括: ·中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。 ·中断挂起寄存器,当有中断请求产生时,相应的位会被硬件置1,处于挂起状态。当进入中断处理程序时,必须通过软件清除这个标志位,以标志响应中断请求。 ·中断屏蔽寄存器,当需要屏蔽某些中断源时,
2、可以设置相对应的位。 ·中断优先级寄存器可以设置21个中断源优先级的高低。 ·中断偏移寄存器,中断响应时通过读这个寄存器可以查到当前的中断源。 如表1所示是ARM的一些系统寄存器列表。 表1ARM系统寄存器列表 系统寄存器中的每一位或几位都对应系统功能的控制、状态等信息。例如: ·SYSCON1中的UARTIEN、LCDEN位分别控制异步串口1与LCD显示的使能。 ·SYSCON2中的SDRAMZ用来设置SDRAM存储器的位宽。 ·SYSCON3中的CLKCTL用来在18MHz、37MHz、49MHz和74MHz中选择一种作 为系统工作频率。 与系统运行紧密相关的其他寄存
3、器如表2所示,对它们进行正确设置,就可以启用 SDRAM、LCD或者串行通信口。 表2ARM的其他重要寄存器列表数据手册上是这么说的:INTPND寄存器中的26个位对应着每一个中断源。当某个中断产生时,INTPND中相应的pending位就会置1,说明该中断还未被处理。中断服务程序中必须清除该pending位,从而使系统能够及时响应下一次中断。INTPND是一个只读寄存器,清除pending位的方式是向I_ISPC/F_ISPC的相应位写入“1”。在多个中断同时发生时,INTPND将所有发生的中断pending位都置1。虽然中断请求可以通过INTMSK寄存器屏蔽,但是如果被屏蔽的中断发生
4、了,INTPND中的pending位仍然会被置1。但是为什么三星的中断例子里面是这样:void__irqEint4567Isr(void){ which_int=rEXTINPND; rEXTINPND=0xf;//clearEXTINPNDreg. rI_ISPC=BIT_EINT4567;//clearpending_bit}void__irqEint2Isr(void){ rI_ISPC=BIT_EINT2;//clearpending_bit which_int=9;}void__irqtimer_Int(void){//clearpending_bit rI_ISPC=
5、BIT_TIMER0; uart_printf("*");}我觉得很奇怪,按照手册上说的应该为:void__irqtimer_Int(void){//clearpending_bit rI_ISPC
6、=BIT_TIMER0; uart_printf("*");}如果有几个中断发生,优先级高的直接赋值不是就把优先级低的中断给清除了吗?
此文档下载收益归作者所有