历史上的今天
返回首页

历史上的今天

今天是:2024年11月26日(星期二)

正在发生

2021年11月26日 | ARMv8-中断处理接口

2021-11-26 来源:eefocus

不考虑EL2和EL3,IRQ处理分两种情况:用户态发生的中断和内核态发生的中断,相应的中断处理接口分别为:


el1_irq

el0_irq


以内核态el1发生的irq为例:


358     .align  6

359 el1_irq:

360     kernel_entry 1 //压栈,保存上下文;

361     enable_dbg

362 #ifdef CONFIG_TRACE_IRQFLAGS

363     bl  trace_hardirqs_off

364 #endif

365    

366     irq_handler /*调用中断处理默认函数*/

367    

368 #ifdef CONFIG_PREEMPT

369     get_thread_info tsk

370     ldr w24, [tsk, #TI_PREEMPT]     // get preempt count

371     cbnz    w24, 1f             // preempt count != 0          

372     ldr x0, [tsk, #TI_FLAGS]        // get flags 

373     tbz x0, #TIF_NEED_RESCHED, 1f   // needs rescheduling?

374     bl  el1_preempt

375 1: 

376 #endif

377 #ifdef CONFIG_TRACE_IRQFLAGS

378     bl  trace_hardirqs_on

379 #endif

380     kernel_exit 1

381 ENDPROC(el1_irq)


irq_handler也是一个伪指令宏操作:


187 /* 

188  * Interrupt handling.    

189  */

190     .macro  irq_handler   

191     adrp    x1, handle_arch_irq  //把handle_arch_irq地址放到x1, handle_arch_irq是一个指针;

192     ldr x1, [x1, #:lo12:handle_arch_irq]//取出指针所指向的值;

193     mov x0, sp            

194     blr x1  //跳转到handle_arch_irq              

195     .endm


handle_arch_irq 在arch/arm64/kernel/irq.c设置:


 45 void __init set_handle_irq(void (*handle_irq)(struct pt_regs *))

 46 {

 47     if (handle_arch_irq)

 48         return;

 49 

 50     handle_arch_irq = handle_irq;  

 51 }


根据不同的中断控制器会设置不同的处理接口,通过在驱动控制器设置,代码在drivers/irqchip/,以irq-gic.c(通用中断控制器)为例,设置set_handle_irq(gic_handle_irq):


 437 static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)

 438 { 

 439     u32 irqstat, irqnr;

 440     struct gic_chip_data *gic = &gic_data[0];

 441     void __iomem *cpu_base = gic_data_cpu_base(gic);

 442   

 443     do {

 444         irqstat = readl_relaxed_no_log(cpu_base + GIC_CPU_INTACK);

 445         irqnr = irqstat & GICC_IAR_INT_ID_MASK;

 446   

 447         if (likely(irqnr > 15 && irqnr < 1021)) {

 448             uncached_logk(LOGK_IRQ, (void *)(uintptr_t)irqnr);

 449             handle_domain_irq(gic->domain, irqnr, regs);//根据中断号调用相应的中断处理函数;

 450             continue;

 451         }

 452         if (irqnr < 16) {

 453             writel_relaxed_no_log(irqstat, cpu_base + GIC_CPU_EOI);

 454             uncached_logk(LOGK_IRQ, (void *)(uintptr_t)irqnr);

 455 #ifdef CONFIG_SMP        

 456             handle_IPI(irqnr, regs);       

 457 #endif

 458             continue;

 459         }

 460         break;           

 461     } while (1);         

 462 } 

推荐阅读

史海拾趣

华大北斗(Allystar)公司的发展小趣事

在电子行业中,华大北斗(Allystar)公司以其卓越的技术实力和市场表现脱颖而出,其发展历程中充满了许多引人注目的故事。以下是关于华大北斗发展起来的五个相关故事:

一、华大北斗的南迁之旅

华大北斗的发展史上,一个重要的节点是2016年的南迁。当时,华大北斗主动选择深圳作为新的研发总部所在地,这是基于深圳电子制造业的雄厚基础和良好的创新环境。在短短几个月内,华大北斗完成了研发环境的选址与装修、研发团队的组建以及实验设备的部署,展现了其高效的执行力。这一举措得到了深圳市政府及各级领导的高度关注与认可,华大北斗也被列为深圳市重点引进的战略项目。

二、北斗芯片技术的突破

华大北斗在北斗芯片技术方面取得了重大突破。公司成功研发出支持北斗三号信号体制的多系统多频高精度SoC芯片,这一成果在芯片多频定位方面取得了重要进展。该芯片集成了射频、基带、处理器、存储器等单元,不仅大幅缩小了芯片尺寸,还优化了功耗,实现了单芯片双频北斗高精度定位一体化SoC解决方案。这一技术的突破为北斗应用的自主可控提供了关键支持,推动了北斗产业化、国际化、规模化应用的进程。

三、高精度芯片进入共享单车市场

随着共享经济的兴起,共享单车市场蓬勃发展。华大北斗凭借其高精度芯片技术,成功进入了共享单车市场。其高精度芯片为共享单车提供了精准的定位服务,有效提升了用户体验和车辆管理效率。这一成功应用不仅展示了华大北斗技术的市场竞争力,也为其在更多领域的应用提供了广阔的空间。

四、双频北斗手机的面市

基于华大北斗双频北斗芯片研发的全球首款双频北斗手机的面市,是华大北斗发展历程中的又一里程碑。这款手机的推出,标志着北斗导航技术在智能手机领域的成功应用,也展示了华大北斗在推动北斗产业化进程中的积极作用。双频北斗手机的出现,不仅提升了用户体验,也为北斗导航技术的普及和推广做出了贡献。

五、斩获香港环球创新奖

2023年,华大北斗荣获首届香港环球创新奖年度创新大奖,这是对其在北斗导航芯片领域技术创新和产业化应用的高度认可。这一奖项的获得,不仅提升了华大北斗的品牌形象和市场影响力,也为其在未来的发展中注入了强大的动力。华大北斗将继续坚持技术创新,针对行业应用的不同需求,用领先的技术研发和应用能力推动北斗产业的高质量规模化发展。

这些故事只是华大北斗发展历程中的一部分,但它们足以展现出华大北斗在电子行业中的技术实力和市场竞争力。华大北斗将继续秉持创新精神,不断推动北斗导航技术的发展和应用,为电子行业的进步做出更大的贡献。

海芯科技(AVIA)公司的发展小趣事

随着公司业务的不断拓展和市场份额的逐步扩大,海芯科技开始注重品牌建设和市场推广。公司积极参加各类行业展会和交流活动,与业内同行和客户进行深入交流和合作。同时,公司还加大了对品牌形象的宣传力度,通过广告、宣传册等多种方式提升品牌知名度和美誉度。这些举措不仅提升了公司的市场影响力,也为公司的长期发展奠定了坚实的基础。

Fillfactory Nv公司的发展小趣事

FIDELIX公司成立于1990年,是一家专注于存储芯片研发与销售的韩国企业。在公司成立初期,FIDELIX凭借对技术的深入研究和对市场的敏锐洞察,成功推出了多款性能优越的NAND FLASH(闪存)和SDR/DDR(单/双数率同步动态存储器)等存储芯片产品。这些产品不仅在韩国市场上获得了良好的口碑,同时也开始逐步进入国际市场。

随着技术的不断进步和市场的不断扩大,FIDELIX逐渐在韩国存储芯片领域崭露头角。公司不断投入研发资金,加强技术创新,努力提升产品的性能和品质。同时,FIDELIX也积极拓展销售渠道,与多家国内外知名厂商建立了合作关系,为公司的持续发展奠定了坚实的基础。

ETAL公司的发展小趣事

在产品质量和技术水平得到认可后,ETAL开始积极拓展市场。公司制定了详细的市场营销策略,通过参加国际电子展会、与知名企业合作等方式提高品牌知名度。同时,ETAL还注重客户服务,建立了完善的售后服务体系,确保客户在使用产品过程中得到及时、专业的支持。这些举措使得ETAL的市场份额不断扩大,品牌影响力逐渐增强。

EOZ Secme公司的发展小趣事

随着国内市场的饱和,EOZ Secme开始积极寻求海外市场的拓展。公司制定了详细的国际化战略,通过参加国际展会、建立海外销售渠道等方式,逐步打开了国际市场的大门。同时,EOZ Secme还积极与国际知名企业开展合作,共同研发新产品,拓展业务领域。这些努力使得EOZ Secme在国际市场上的影响力不断增强。

Antenna Factor公司的发展小趣事

为了进一步扩大市场份额,Antenna Factor公司积极寻求与各行各业的合作伙伴建立合作关系。他们与多家通信设备制造商、电信运营商以及互联网企业签订了战略合作协议,共同推动无线通信技术的发展和应用。这些合作不仅为公司带来了更多的商业机会,也提升了其在行业中的影响力。

问答坊 | AI 解惑

联想LJ2500打印机打印原理图出现错误的解决方法

联想LJ2500打印机由于驱动程序的问题,在WINXP系统下打印Protel原理图时,图中的字符都是反向的,即镜像打印,真是一大缺陷,不知道联想是怎么搞的。就是将原理图复制到WORD文档中打印也是一样的。      我找到了一个解决方法 ...…

查看全部问答>

刚入门-请教

看了几天的Vxworks的书,基本看明白了任务调度,信号量,中断I/O等知识。 今年毕业,出来工作是做Vxworks应用开发的。 想多学点东西,应该再往哪方面走呢?…

查看全部问答>

请大家指点一下以后的学习方向

    我是西南大学的学生,本科,现在刚刚大三,9月2号刚刚参加完全国大学生电子大赛,最后却是意想不到的那种失败。     我本身是学计算机的,计算机科学与技术专业,这个专业软、硬全学,但偏向软件,而我偏偏对硬件感兴趣, ...…

查看全部问答>

PPC2003

请问一下我在XP上显示一张位图(×.BMP)SetDIBitsToDevice调用显示了图片··· 同一样代码我在VC2008上 ·PPC2003项目 但是SetDIBitsToDevice收到同样参数·但是还是不显示 SetDIBitsToDevice( hdc, 0, 0, cxDib, cyDib, 0, 0,  0, cyD ...…

查看全部问答>

求教关于蓝牙驱动SLEEP后的问题!

我在控制面板扫描蓝牙设备能扫描到,可以当WINCESLEEP起来后,再在控制面板扫描时,就扫描不到了,并弹出对话框“BLUETOOTH HARDWARE ERROR 10050。。。。。。”有哪位兄弟遇到过这样的情况呀,是哪一块把连接断开了吗?请多多赐教呀!…

查看全部问答>

Mk7A11p,兼容em78p153,sn2501,性价比优

研发兼销售工程师:李泳生   13760155692   075581580452  QQ:252859106(技术交流) Mk7A11p,兼容em78p153,sn2501,性价比优,同比优惠15%, 广泛应用于电动车防盗器,闪灯控制,闪字棒,闪字风扇,i温度显示等。月 ...…

查看全部问答>

实在被MSP430FG439集成的OA运放搞晕了.

MSP430FG439集成的的三个运放,datasheet上引脚的标注不怎么看得明白,有相关的中文资料吗,实在是被弄晕了!这些运放能设置各自的放大倍数吗,有没有例子啊!救命!!…

查看全部问答>

【征询贴】关于先前论坛团购的Real6410

团购的事情忙完了,参加团购的网友不能让板子闲着,要玩起来,所以想征询下大家的意见,想从何玩起?想怎么玩?玩成什么样?有具体计划的网友请跟帖回复,过几天我把我的计划给大家分享一下!~前一段时间不用多说,肯定要按照计划来熟悉学习板子, ...…

查看全部问答>

zedboard学习

有学习zedboard的同学吗,一起来交流学习http://write.blog.csdn.net/postlist…

查看全部问答>