当前位置:首页 » 操作系统 » linuxarm中断

linuxarm中断

发布时间: 2022-06-16 23:40:09

❶ 在arm-linux下,如何确定中断号

这个由主板的硬件决定。

❷ arm linux下的串口中断有没有像单片机的开中断和关中断的控制位

linux下串口属于用户空间的问题。
中断属于内核控件的问题。
如果需要对中断进行操作,
要看你的驱动有没有在ioctl函数中做了相应支持。

❸ Linux如何及时响应外部中断

FPGA每隔100us给运行linux的ARM一个中断,要求在20us内响应中断,并读走2000*16bit的数据。
目前主要的问题是,当系统同时发生多个中断时,会严重影响linux对FPGA中断的响应时间。如何解决?

1、首先想到了ARM的FIQ,它可以打断IRQ中断服务程序,保证对外部FIQ的及时响应。但是发现linux只实现了IRQ,没有显示FIQ。
linux是从devicetree读取中断号,加入中断向量表的。

interrupts = <0x0 0x32 0x0>;中的第一个字段0表示非共享中断,非零表示共享中断,SDK产生的dts统一为0,此时第二字段的值比XPS中的小32;如果第一字段非零,则第二字段比XPS小16.
最后字段表示中断的触发方式。
IRQ_TYPE_EDGE_RISING =0x00000001,
IRQ_TYPE_EDGE_FALLING =0x00000002,
IRQ_TYPE_LEVEL_HIGH =0x00000004,
IRQ_TYPE_LEVEL_LOW =0x00000008,
很明显,devicetree根本没有提供通知linux有FIQ的渠道。
2、再来看linux的IRQ
linux的中断分为上半部和下半部,上半部运行在IRQ模式,会屏蔽所有中断,下半部运行在SVC模式,会重新打开中断。
也就是说,当一个中断的上半部正在运行时(不能再次响应中断),FPGA的中断是不能被linux响应的;
反过来,当FPGA中断的上半部正在运行时(不能再次响应中断),其他的中断也不能被linux响应;
unsigned long flags;
...
local_irq_save(flags);
....

local_irq_restore(flags);

3.
ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。
我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin.
在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ的。
先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着pc的指示去做事情,当CPSR中的I和F位为1的时候,IRQ和FIQ全部处于禁止状态。无论你在irq
pin和fiq pin上面发什么样的中断信号,ARM是不会理你的,你根本不能打断他,因为他耳聋了,眼也瞎了。
在I位和F位为0的时候,当irq
pin上有中断信号过来的时候,就会打断arm的当前工作,并且切换到IRQ模式下,并且跳到相应的异常向量表(vector)位置去执行代码。这个过程是自动的,但是返回到被中断打断的地方就得您亲自动手了。当你跳到异常向量表,处于IRQ的模式的时候,这个时候如果irq
pin上面又来中断信号了,这个时候ARM不会理你的,irq
pin就跟秘书一样,ARM核心就像老板,老板本来在做事,结果来了一个客户,秘书打断它,让客户进去了。而这个时候再来一个客户,要么秘书不断去敲门问,要么客户走人。老板第一个客户没有会见完,是不会理你的。
但是有一种情况例外,当ARM处在IRQ模式,这个时候fiq pin来了一个中断信号,fiq
pin是什么?是快速中断呀,比如是公安局的来查刑事案件,那才不管你老板是不是在会见客户,直接打断,进入到fiq模式下,并且跳到相应的fiq的异常向量表处去执行代码。那如果当ARM处理FIQ模式,fiq
pin又来中断信号,又就是又一批公安来了,那没戏,都是执法人员,你打不断我。那如果这个时候irq
pin来了呢?来了也不理呀,正在办案,还敢来妨碍公务。
所以得出一个结论: IRQ模式只能被FIQ模式打断,FIQ模式下谁也打不断。
在打不断的情况下,irq pin 或 fiq pin随便你怎么发中断信号,都是白发。
所以除了fiq能打断irq以外,根本没有所谓中断嵌套的情况。
Linux不用FIQ,只用到了IRQ。但是我们有时候一个中断需要处理很长时间,那我们就需要占用IRQ模式那么长的时间吗?没有,linux在IRQ模式下只是简单的记录是什么中断,马上就切换回了SVC模式,换句话说,Linux的中断处理都是在SVC模式下处理的。
只不过SVC模式下的ISR上半部关闭了当前中断线,下半部才重新打开

❹ 如何在ARM Linux内核中使用硬件断点

在ARM Linux内核中使用硬件断点 一般的CPU都支持硬件断点,也就是通过处理器提供专门断点寄存器保存一个地址,处理器在执行程序过程,会不断去匹配,可以设置成不同的模式来触发程序中断,如执行到这个地址,读这个地址或写这个地址

❺ 现在在学arm Linux嵌入式,刚写的裸机程序,想用中断的方式来控制LED灯的亮灭,可为什么我

硬件平台:FS2410开发平台:MDK3.5程序源码:GPFCON EQU 0x56000050 ;Port F control GPFDAT EQU 0x56000054 ;Port F data GPFUP EQU 0x56000058 ;Pull-up control F AREA myarea, CODE ENTRY LDR r0, =0x5500 LDR r1, = GPFCON STR r0,[r1] LDR...

❻ arm linux如何限制大量高频发硬件中断

可以帮你不想要的文件删除了这样的话就不会冲动

❼ ARM +linux 驱动程序,GPIO中断,上升沿触发,请问处理器能够承受的最大中断频率怎么算!!!

你好!
理论上中断频率再高都不会导致系统死机。但是会导致触发丢失,比如有100个触发输入,实际只产生了80个中断。
而实际上,中断频率过高导致死机,很有的可能是因为中断处理占用太多CPU时间,导致其他程序的响应中断,系统死机。而查询方式能保证其他任务还有一定的CPU时间分配。
希望对你有所帮助,望采纳。

❽ arm-linux 驱动编程中,C代码中的IRQ_EINT(2)与硬件手册中的XEINT2与外部中断号2有什么关系

EINT2表示外部中断2,IRQ_EINT(2)是程序中的中断号,对应的就是外部中断EINT2

❾ linux 在中断处理时,要进去SVC模式,请问这到底是什么原因

对ARM来说,当发生中断的时候,CPU进入的是中断mode, 只是Linux在SVC mode下处理中断了. 当然,理论上来说,不在SVC下,而在 中断mode下处理也可以。我猜想Linux这样做的原因是,Linux要兼容绝大多数的ARCH,每一个ARCH相关的代码都放在arch/目录下,比如ARM是放在arch/arm下。所以,如果arm要是不利用现有Linux的框架,把绝大多数的代码都放在arch/arm下(中断处理的代码也放在arch/arm下的irq mode中处理),那linux就非常臃肿。所以,arm Linux为了最大程度的利用Linux已有的架构,就放在SVC模式下处理了(Linux最早是在i386上开发的,i386只利用了2个ring, 即,ring0 和 ring 3, ring 0,对应于ARM的svc mode)。 事实上,到了现在的ARMV8,AARCH64已经取消了这么多的MODE,而采取了4个Level, 分别是 0,1,2,3. 对于OS来说,支持0和1 两个Level就可以了, Level 2 是用于虚拟化,Level 3 是用于monitor.

当fiq中断发生的时候,也会进入FIQ mode, 只是 在ARM SOC中,很少有FIQ的外设。所以,Linux中,没有对FIQ进行处理,但接口还是有的。

热点内容
动态规划01背包算法 发布:2024-11-05 22:17:40 浏览:849
nasm编译器如何安装 发布:2024-11-05 22:01:13 浏览:181
登录密码在微信的哪里 发布:2024-11-05 22:00:29 浏览:739
c防止反编译工具 发布:2024-11-05 21:56:14 浏览:248
安卓虚拟机怎么用 发布:2024-11-05 21:52:48 浏览:344
php时间搜索 发布:2024-11-05 20:58:36 浏览:479
燕山大学编译原理期末考试题 发布:2024-11-05 20:13:54 浏览:528
华为电脑出现临时服务器 发布:2024-11-05 20:05:08 浏览:408
斗战神免费挖矿脚本 发布:2024-11-05 19:53:25 浏览:665
网吧服务器分别是什么 发布:2024-11-05 19:45:32 浏览:392