ARM中断及相关寄存器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM中断及相关寄存器

要正确应用ARM处理器必须首先对它的系统寄存器进行正确配置,下面简要介绍一下ARM寄存器,包括一些中断寄存器设置如中断状态(0x8000.0240,0x8000.1240,0x8000.2240)和中断屏蔽寄存器(0x8000.0280,0x8000.1280,0x8000.2280)。

ARM中断寄存器主要包括:

·中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。

·中断挂起寄存器,当有中断请求产生时,相应的位会被硬件置1,处于挂起状态。当进入中断处理程序时,必须通过软件清除这个标志位,以标志响应中断请求。

·中断屏蔽寄存器,当需要屏蔽某些中断源时,可以设置相对应的位。

·中断优先级寄存器可以设置21个中断源优先级的高低。

·中断偏移寄存器,中断响应时通过读这个寄存器可以查到当前的中断源。

如表1所示是ARM的一些系统寄存器列表。

表1 ARM系统寄存器列表

系统寄存器中的每一位或几位都对应系统功能的控制、状态等信息。例如:

·SYSCON1中的UARTIEN、LCD EN位分别控制异步串口1与LCD显示的使能。

·SYSCON2中的SDRAM Z用来设置SDRAM存储器的位宽。

·SYSCON3中的CLKCTL用来在18MHz、37MHz、49MHz和74MHz中选择一种作

为系统工作频率。

与系统运行紧密相关的其他寄存器如表2所示,对它们进行正确设置,就可以启用

SDRAM、LCD或者串行通信口。

表2 ARM的其他重要寄存器列表

数据手册上是这么说的:

INTPND 寄存器中的26 个位对应着每一个中断源。当某个中断产生时,INTPND 中相

应的pending 位就会置1,说明该中断还未被处理。中断服务程序中必须清除该pending 位,从而使系统能够及时响应下一次中断。INTPND 是一个只读寄存器,清除pending 位的方式

是向I_ISPC/F_ISPC 的相应位写入“1”。在多个中断同时发生时,INTPND 将所有发生的中断pending 位都置1。虽然中断请求可以通过INTMSK 寄存器屏蔽,但是如果被屏蔽的中断

发生了,INTPND 中的pending 位仍然会被置1。

但是为什么三星的中断例子里面是这样:

void __irq Eint4567Isr(void)

{

which_int=rEXTINPND;

rEXTINPND=0xf; //clear EXTINPND reg.

rI_ISPC=BIT_EINT4567; //clear pending_bit

}

void __irq Eint2Isr(void)

{

rI_ISPC=BIT_EINT2; //clear pending_bit

which_int=9;

}

void __irq timer_Int(void)

{

//clear pending_bit

rI_ISPC=BIT_TIMER0;

uart_printf("*");

}

我觉得很奇怪,按照手册上说的应该为:

void __irq timer_Int(void)

{

//clear pending_bit

rI_ISPC |= BIT_TIMER0;

uart_printf("*");

}

如果有几个中断发生,优先级高的直接赋值不是就把优先级低的中断给清除了吗?

相关文档
最新文档