ARM-Linux s3c2440 之中断分析(二)

发布者:真瓷堂最新更新时间:2016-06-12 来源: eefocus关键字:ARM  Linux  s3c2440  中断分析 手机看文章 扫描二维码
随时随地手机看文章
软件篇:

       上一篇文章回顾了s3c2440的中断控制器原理的相关硬件知识,有了这个基础再来分析Linux中的软件分析方式,心里就有底了。面对浩瀚如海的Linux源代码,s3c2440的中断到底是怎样呢,如何处理,如何实现的呢?一步一步来揭开它神秘的面纱吧,当然需要从Linux内核源码入手!

 

在Linux中start_kernel()时会进行体系结构的初始化:init_IRQ(), 故名思议,其源代码如下:

 

[cpp] view plain copy
 
  1. void __init init_IRQ(void)  
  2. {  
  3.        intirq;  
  4.    
  5.        for(irq = 0; irq < NR_IRQS; irq++)  
  6.               irq_desc[irq].status|= IRQ_NOREQUEST | IRQ_NOPROBE;  
  7.    
  8. #ifdef CONFIG_SMP  
  9.        cpumask_setall(bad_irq_desc.affinity);  
  10. bad_irq_desc.cpu= smp_processor_id();  
  11. #endif  
  12. init_arch_irq();    //这里是系统初始化irq的入口  
  13. }  

 

init_arch_irq()初始值为:void (*init_arch_irq)(void)__initdata = NULL; 相当于一个变量函数(函数就像变量一样,被赋值),默认值为NULL,那么在其他地方应该被再次赋值。其实在setup_arch()中init_arch_irq()已经有所指向了,在arch/arm/kernel/setup.c中setup_arch进行体系平台相关初始化:

  1. void __init setup_arch(char **cmdline_p)  
  2. {  
  3.        structtag *tags = (struct tag *)&init_tags;  
  4.        structmachine_desc *mdesc;  
  5.        char*from = default_command_line;  
  6.    
  7.        unwind_init();  
  8.    
  9.        setup_processor();  
  10.        mdesc= setup_machine(machine_arch_type);  
  11.        machine_name= mdesc->name;  
  12. …  
  13.        cpu_init();  
  14. …  
  15.        init_arch_irq= mdesc->init_irq;   //这里是init_arch_irq()指向的函数  
  16.        system_timer= mdesc->timer;  
  17.        init_machine= mdesc->init_machine;  
  18. …  
  19. early_trap_init()   //初始化中断向量表  
  20. }  

 

mdesc是一个struct machine_desc的数据结构,msdesc 通过 setup_machine(machine_arch_type) 获取平台体系的MACHINE_START相关参数。

  1. #define MACHINE_START(_type,_name)                  \  
  2. static const struct machine_desc__mach_desc_##_type    \  
  3.  __used                                            \  
  4.  __attribute__((__section__(".arch.info.init")))= {     \  
  5.        .nr          = MACH_TYPE_##_type,            \  
  6.        .name             = _name,  
  7.    
  8. #define MACHINE_END                            \  
  9. };  

 

这个参数如下:

  1. MACHINE_START(S3C2440, "SMDK2440")  
  2.        /*Maintainer: Ben Dooks  */  
  3.        .phys_io         = S3C2410_PA_UART,  
  4.        .io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) &0xfffc,  
  5.        .boot_params  = S3C2410_SDRAM_PA + 0x100,  
  6.    
  7.        .init_irq          = s3c24xx_init_irq,    //这里是目标CPU的irq初始化函数  
  8.        .map_io          = smdk2440_map_io,  
  9.        .init_machine  = smdk2440_machine_init,  
  10.        .timer             = &s3c24xx_timer,  
  11. MACHINE_END  

 

可见s3c24xx_init_irq()才是所要找得中断初始化入口程序,所以执行init_arch_irq()实际是执行s3c24xx_init_irq()程序。中断的初始化工作:首先,清空各interrupt pending的值,然后再向系统注册主要的中断,从上篇中我们知道s3c2440有60个中断,但系统中主要用了58个中断,

注册中断主要用下面三个函数:

 

  1. int set_irq_chip(unsigned int irq, structirq_chip *chip)  
  2. static inline void set_irq_handler(unsigned intirq, irq_flow_handler_t handle)  
  3. static inline void set_irq_chained_handler(unsignedint irq, irq_flow_handler_t handle)  

 

至此,中断的初始化过程完成了,那么它是怎样工作的,具体的流程由如何,各中断函数的回调函数怎么理解,下文将继续深入探讨。。

关键字:ARM  Linux  s3c2440  中断分析 引用地址:ARM-Linux s3c2440 之中断分析(二)

上一篇:ARM-Linux s3c2440 之中断分析(三)
下一篇:ARM-Linux s3c2440 之中断分析(一)

推荐阅读最新更新时间:2024-03-16 14:56

基于arm920T嵌入式Linux的实验平台环境的构建
面向A R M微处理器构架的嵌入式操作系统的使用量这些年持续增长,在各种嵌入式操作系统中, L inux是获得支持最多的第三大力量。 目前,ARM L inux支持包括ARM610、A RM710、ARM720T cores、ARM920T cores、StrongARM 110、StrongARM1100、XScale等系列的arm处理器。 Gameboy是目前比较流行的8位掌上游戏机,通常被简称为GB,它的最终态Game Boy Color (GBC)是完全向后兼容的。Gnuboy是GB /GBC的软件模拟器,是一种自由软件,它是基于Qt系统的,能够运行几乎所有的黑白和彩色的GB /GBC游戏ROM,但运行复杂
[单片机]
基于<font color='red'>arm</font>920T嵌入式<font color='red'>Linux</font>的实验平台环境的构建
恩智浦推出集成USB驱动器的ARM Cortex-M0微控制器
恩智浦半导体NXP Semiconductors N.V.近日宣布推出LPC11U2x系列,这是业界首款基于ARM® Cortex™-M0处理器并集成USB驱动程序的微处理器。LPC11U2x在其ROM中集成了多款USB驱动程序,而使其闪存达到利用率最大化,可节省最多16KB的代码空间,同时还提供经全面测试并且易于使用的API程式,只需几分钟即可完成USB集成。恩智浦LPC11U00系列微处理器搭载了最高128 KB闪存和最高4K EEPROM,专门针对消费、工业、手持和计算应用而设计,为工程师提供低成本、易用型USB解决方案的理想选择。 恩智浦同时还宣布将启动一项全球计划,向MCU客户提供供应商ID(VID)的可转让授权
[单片机]
恩智浦推出集成USB驱动器的<font color='red'>ARM</font> Cortex-M0微控制器
ARM处理器NEON编程及优化技巧—左移右移等移位操作
ARM的NEON协处理器技术是一个64/128-bit的混合SIMD架构,用于加速包括视频编码解码、音频解码编码、3D图像、语音和图像等多媒体和信号处理应用。本文主要介绍如何使用NEON的汇编程序来写SIMD的代码,包括如何开始NEON的开发,如何高效的利用NEON。首先会关注内存操作,即如何变更指令来灵活有效的加载和存储数据。接下来是由于SIMD指令的应用而导致剩下的若干个单元的处理,然后是用一个矩阵乘法的例子来说明用NEON来进行SIMD优化,最后关注如何用NEON来优化各种各样的移位操作,左移或者右移以及双向移位等。本节详述NEON提供的各种各样的移位操作,左右移位,移位插入以及移位限定符如饱和舍入等以及这些移位操作如何能有效
[单片机]
<font color='red'>ARM</font>处理器NEON编程及优化技巧—左移右移等移位操作
研华引领嵌入式ARM平台之标准化
研华科技---2014年4月16-17日,全球智能系统领导厂商研华科技在协同创新研发中心(Advantech Plus Technology Campus,简称A+TC)举办“ARM-Based嵌入式技术论坛暨伙伴会议”,在为期两天的会议中,研华与嵌入式产业内知名厂商Freescale、Oracle和ARM等以及重要客户、渠道伙伴共同探讨RISC精简型计算机未来商机与应用, 以及如何联盟产业链伙伴加速RISC架构系统更加智能化,助力智慧城市发展。 强大的在地化Ecosystem Partner协作 在物连网的发展趋势下, 嵌入式领域蕴藏着巨大商机。此次FPC,研华也邀请到了业内产业链上下的重要合作伙伴。ARM公
[嵌入式]
研华引领嵌入式<font color='red'>ARM</font>平台之标准化
基于DSP和ARM的音频处理系统设计
  1 引言   随着计算机技术、电子技术和通信技术的迅猛发展,音频处理技术也在众多领域得到广泛应用。如通信领域中的 手机 、IP电话,消费类电子产品中的MP3和CD播放器以及控制领域中的语音识别、声控系统等 。针对 DSP 强大的数字信号处理能力和ARM 处理器 良好的实时性能,结合音频编解码芯片TLV320AIC23的接口特点,本文阐述了由三者组成的音频处理系统的硬件接口设计和软件编程,提供了有效和实用的音频处理系统方案。   TLV320AIC23(简称AIC23)是TI公司的一款高性能立体声音频编解码器Codec芯片。其内部集成的模数转换器(ADCs)和数模转换器(DACs)采用了带有过采样数字插补滤波的
[嵌入式]
基于DSP和<font color='red'>ARM</font>的音频处理系统设计
嵌入式Linux的动态电源管理技术
摘要 在SoC硬件对电源管理支持基础上,通过设计电源管理操作点、管理类、管理策略等结构,把系统创建的任务和具体电源管理硬件参数联系起来,为任务间精细电源管理提供包括应用层、操作系统层以及硬件层的框架结构。结合用户层制定的策略,实时、动态、低延迟管理系统动态功耗,调整CPU工作频率和电压、外部总线时钟频率、外部设备时钟/电源参数。实践证明,节能效果良好。关键词 嵌入式Linux 动态电源管理 智能终端 DPM 引 言 如何有效地管理嵌入式系统,尤其是移动终端的电源功耗,是一个很有价值的课题。动态电源管理DPM(Dynamic Power, Management)技术提供一种操作系统级别的电源管理能力,包含CPU工作频率和电压,外部总线
[电源管理]
Linux 6.5内核增加对高通开源GPU Adreno 690的支持
即将推出的Linux 6.5内核将把对高通Adreno 690 GPU的支持添加到开源的MSM内核图形/显示驱动程序中。A690主要用于骁龙8cx第三代(SC8280XP)平台,而联想ThinkPad X13s笔记本电脑和其他硬件也采用了该平台。 MSM Adreno Direct Rendering Manager (DRM)驱动程序已经排队支持Adreno A690,包含近200行代码,超过了对现有Adreno 600系列硬件的支持。该支持是通过Linaro提供的。 本周,Adreno A690支持作为drm-msm-next的一部分被送入,DRM-next的MSM驱动变化将在即将到来的Linux 6.5内核合并窗口排
[嵌入式]
基于ARM920T的嵌入式静力测量系统设计
  引言   静力测量可用于许多不同的测量系统中。目前大多数工业控制系统、地质勘测系统以及建筑测量中所使用的计量设备(衡器)的测量模型大多建立于杠杆原理或弹性原理,其平衡方程均建立在静力平衡的基础之上。随着微电子技术的进一步发展、嵌入式芯片的大量引入、控制功能的完善、速度及组态软件以及图像处理技术的发展,目前已出现了很多新型静力测量系统。当今的静力测量系统正沿着微型化、智能化和网络化的主流方向发展。   在以前主从式单片机实现的静力测量系统中,主单片机负责管理整个系统,从单片机负责实现具体的功能,然后通过增加外设来实现显示和打印功能。整个系统只有一个主程序,其中包括系统控制模块、驱动和用户界面程序。这样,系统的硬件软件功能的可
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved