ARM9的中断处理技术详细深入剖析-三星S3C2440处理器

发布时间:2022-12-07  

1、中断的生命周期

中断信号产生(中断源)—》中断信号过滤(中断控制器)—》中断信号处理(CPU)

1.1 中断源
在中断的生命周期中,中断源的作用是负责产生中断信号。

S3C2440支持60个中断源(包含子中断源,不包括EINT8_23等里面的独立中断源,例如串口的发送中断、接收中断、错误中断属于串口的子中断源。);

S3C6410支持64个中断源;

S5PV210支持93个中断源;

1.2 中断控制器


1.3 中断处理
1)非向量方式(2440)


2)向量方式(6410/210)


(对于向量方式,是直接进入中断函数(而不是跳转到中断程序总入口),因为中断函数(的地址)保存在相应寄存器里,根据相应中断源跳转到对应的中断函数处)

1.4 总结
中断代码的编辑过程:
初始化中断源–>初始化中断控制器–>中断处理代码


2 、按键中断点亮LED

先将之前写的代码进行优化(将各个部分的代码移植到相应新建的.c文件中)
(主要是touch ~~.c chmod 777 ~~.c)

1)中断源的初始化

将四个按键对应的引脚设为外部中断模式



#define GPGCON  (volatile unsigned long *)0x56000060
 /* K1,K2,K3,K4对应GPG0、GPG3、GPG5、GPG6*/
#define GPG5_int(0x2<

2)初始化中断控制器

在初始化程序中,首先将外部中断8、11、13、14使能。


因为外部中断8、11、13、14属于中断源EINT8_23,将其使能。



操作状态寄存器cpsr的第7位,打开IRQ中断


3)中断处理
因为外部中断源为EINT8_23,所以直接使用寄存器INTOFFSET(判断中断请求源寄存器)是不行的,需要使用寄存器EINTPEND(外部中断未决寄存器)(当这个寄存器的对应位为1时,表示产生了相应中断,在产生完中断后,需要将该位写1来清除中断)。



中断控制器初始化和中断处理的源代码如下:

/*interrupt registes*/

#define SRCPND(volatile unsigned long *)0x4A000000

#define INTMOD(volatile unsigned long *)0x4A000004

#define INTMSK(volatile unsigned long *)0x4A000008

#define PRIORITY(volatile unsigned long *)0x4A00000c

#define INTPND(volatile unsigned long *)0x4A000010

#define INTOFFSET(volatile unsigned long *)0x4A000014

#define SUBSRCPND(volatile unsigned long *)0x4A000018

#define INTSUBMSK(volatile unsigned long *)0x4A00001c

#define EINTMASK (volatile unsigned long *)0x560000a4

{// 在EINTMASK寄存器中使能它们

 *(EINTMASK) &= (~(1<<8)) & (~(1<<11)) & (~(1<<13)) & (~(1<<14));// EINT8_23使能

*(INTMSK)   &= ~(1<<5);

__asm__( 

/*开中断*/  

"mrs r0,cpsrn"

"bic r0, r0, #0x80n"

"msr cpsr_c, r0n"            

  );

}void handle_int()

{    /*读取产生中断的源*/

unsigned long value = *(EINTPEND) & ((1<<8)|(1<<11)|(1<<13)|(1<<14));    

switch(value) 

{ case (1<<8): //K1

led_on();break;case (1<<11): //K2

led_off();break; case (1<<13): //K3

led_on();break;case (1<<14): //K4

led_off(); break;

default:break;

} /* 中断清除 */

*(EINTPEND) = value; //SRCPND:记录当前有哪些中断发生?依据是否有多个中断同时发生,可能会有多个置位

//INTPND:记录经过INTMSK,优先仲裁后,哪个中断会被当前处理

//通过对中断未决寄存器SRCPND和INTPND相应位写1 来清除未决条件

*(SRCPND) = 1 << 5; //Indicate the interrupt request status.

*(INTPND) = 1 << 5;start.S中,当程序发生中断时,就会跳到中断处执行


[object Object]


(对于main.c只需要调用相应的函数就行了,为了验证中断的效果,使用宏定义的方式将MMU关闭,则将控制led的IO口的地址设为实际地址。)
在完成了以上的工作后,发现LED还是不能 点亮,其原因是因为在start.S文件中,程序首先进入的是SVC模式,在对栈的设置时,实际上是SVC模式下对栈指针SP(R13_svc)的设置,而中断中cpu进入的是IRQ模式,需要在此模式下对栈进行初始化。

代码如下:

init_stack:
  msr cpsr_c, #0xd2   //进入中断模式
  ldr sp, =0x33000000 //初始化r13_irq
  msr cpsr_c, #0xd3   //进入svc模式
  ldr sp, =0x34000000 //初始化R13_svc
  mov pc ,lr

附main.c代码:

int gboot_main()
{#ifdef MMU_ON
    mmu_init();#endif
    led_init();
    button_init();
    init_irq();    while(1);    return 0;    
}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    推出了基于长鑫A-Die颗粒的绝影RGB DDR4-4266内存时序CL18-22-22-42,电压1.35V。 朗科绝影RGB DDR4 4266MHz内存的时序和电压已经足够低了,在这......
    RTL设计出现时序很难优化的情况。 对应这个情况,举一个简单的例子。如果一个FPGA工程中含有一个PCIE和一个DDR接口,并且,需要用到PCIE与外......
    于过去两年一直大举支出的芯片制造商而言,削减运营成本和资本支出并不容易,特别是欧美各国扶持芯片产业政策,以致厂商扩产,且不少项目已处于在建阶段,资本支出调整空间有限。 中国的芯片制造业真的很差吗?看完这个权威排名,你的......
    主端口或双向主端口。 -through:一组合法的管脚或端口,注意节点的顺序很重要。如果约束中仅使用了-through,没有使用-from和-to选项,Vivado会从时序......
    文件”就是从这个文件的文件名中来的。 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,WINDOWS运用了虚拟内存......
    当打开工程说明的时候发现大神用的板子是25M的外部晶振,自己的板子是8M的外部晶振,如果直接下载程序的话,那么程序相关的时序就会被破坏,模块之间就没办法正常通信,这时候该怎么办?换外部晶振吗?还是再买一个新板子? 本着......
    游戏内存怎么选?科赋BOLT X电竞内存超频测试;前言 电脑内存只看容量?容量当然重要,但只是选择内存的第一步。虽然普通的办公电脑对于内存的主频和时序的要求并不高,但是......
    手里也是搞到了一根科赋DDR4 8GB 3200MHz内存,到手价为185元,算是一个比较不错的价格了。这款内存使用了海力士CJR颗粒,工作电压为1.2V,时序为CL22-22-22,频率为3200MHz......
    的必备硬件: 1. (必要)STM32F103系列最小系统版一个 2. (必要)LCD屏一块。 2.8寸就可以了,价格便宜。 3. (非必要)FC游戏手柄一个,驱动时序很简单(后面......
    s3c2440裸机-内存控制器(三-2、norflash编程之适配访问时序);前面我们了解了norFlash的特性和原理,那么cpu是如何和nor进行通信的呢?下面开始详细介绍。 1.内存......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>