我的中断处理程序应该禁用中断还是 ARM 处理器自动执行此操作?

2024-01-19

我们的小组使用定制驱动程序在共享 I2C 总线上连接四个 MAX3107 UART。四个 MAX3107 的中断连接(即通过逻辑或运算共享中断))到 ARM9 处理器(LPC3180 模块)上的 GPIO 引脚。当这些设备中的一个或多个中断时,它们会将配置为电平敏感中断的 GPIO 线拉低。我的问题涉及是否需要禁用处理程序代码中的特定中断线。 (我应该补充一点,我们正在运行 Linux 2.6.10)。

根据我阅读的几个关于中断的特定于 ARM 的应用程序说明,​​似乎当 ARM 处理器接收到中断时,它会自动禁用(屏蔽?)相应的中断线(在我们的例子中,这似乎是与我们选择的 GPIO 引脚)。如果这是真的,那么我们似乎不必在中断处理程序代码中禁用此 GPIO 引脚的中断,因为这样做似乎是多余的(尽管它似乎工作正常)。换句话说,在我看来,如果 ARM 处理器在发生中断时自动禁用 GPIO 中断,那么如果有的话,我们的中断处理程序代码应该只需要在设备得到服务后重新启用中断。

我们正在使用的中断处理程序代码包括disable_irq_nosync(irqno);在处理程序的最开始和相应的enable_irq()在处理程序的末尾。如果 ARM 处理器已经禁用了中断线(在硬件中),这些调用的效果是什么(即调用disable_irq_nosync()随后致电enable(irq())?


来自 Arm 信息中心文档:

进入异常(中断)时:

  • 对于所有异常,中断请求 (IRQ) 均被禁用

  • 对于 FIQ 和复位异常,快速中断请求 (FIQ) 被禁用。

然后它接着说:

处理 FIQ 会导致 IRQ 和后续 FIQ 被禁用, 在 FIQ 处理程序启用之前阻止它们被处理 他们。这通常是通过从 SPSR 恢复 CPSR 来完成的。 处理程序结束。

因此,您不必担心禁用它们,但您必须担心重新启用它们。

您需要在例程末尾包含enable_irq(),但不需要在开始时禁用任何内容。我不认为在硬件中调用disable_irq_nosync(irqno)后在软件中调用它不会产生任何影响。由于硬件调用肯定是在软件调用有机会接管之前调用的。但最好将其从代码中删除以遵循约定,并且不要让下一个查看它的程序员感到困惑。

更多信息请点击这里:

Arm 信息中心 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/BABGCFHB.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的中断处理程序应该禁用中断还是 ARM 处理器自动执行此操作? 的相关文章

  • Linux 内核线程没有地址空间

    为什么Linux内核线程没有地址空间 对于任何要执行的任务 它都应该有一个内存区域 对吗 内核线程的文本和数据去了哪里 内核线程确实有一个地址空间 只是他们都有同一个 这并不妨碍它们各自拥有不同的堆栈 文本和数据放置在内核地址空间 由所有线
  • 使用 GCC 为 Linux 设备驱动程序编译 Intel AVX 内联

    我在 corei7 上的 ubuntu 上运行 gcc 版本 4 8 2 从谷歌搜索中找到了有关 AVX 内在函数的信息 但我不确定这组内在函数是否可以用于 Linux 设备驱动程序并进行编译 如果可以的话 这里的任何人都可以告诉我 mak
  • M1 MacBook Pro 上的 Android Studio 无法使用 ABI armeabi-v7a 模拟系统映像

    我的 M1 Macbook Pro 上的 Android Studio 可以很好地模拟 ABI arm64 v8a 的所有系统映像 API 24 29 30 31 但是 它无法使用 ABI armeabi v7a 运行所有映像 例如 API
  • arm-thumb指令集的blx指令如何支持4MB范围

    读自https www keil com support man docs armasm armasm dom1361289866046 htm https www keil com support man docs armasm arma
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • “do { ... } while (0)”在内核代码中到底做了什么? [复制]

    这个问题在这里已经有答案了 可能的重复 当我们定义宏时 do while 0 有什么用 https stackoverflow com questions 923822 whats the use of do while0 when we
  • 内存地址是否指向一个字节的信息?

    以下是 DTS 文件的摘录 linux arch powerpc boot dts 板名 dts memory device type memory reg lt 0x00000000 0x40000000 gt 1GB at 0 嵌入式设
  • 为什么当大小大于 50 时,该程序花费的时间会呈指数级增长?

    所以我正在为类编写一个 ARM 汇编快速排序方法 我对大部分内容都有了解 除了复杂性没有意义 我们将其与我们制作的另一种冒泡排序方法进行比较 它对于具有 1 个参数和 10 个参数的示例表现更好 然而 我什至无法比较 100 个参数测试 因
  • 当IRQL下降时,Windows中如何触发软件中断?

    我知道对于硬件中断 当 KeAcquireInterruptSpinLock 调用 KeLowerIrql 时 HAL 会调整 LAPIC 中的中断掩码 这将允许自动服务排队的中断 可能在 IRR 中 但是对于软件中断 例如 ntdll d
  • 大会,你好世界问题

    我正在 Linux 上学习 asm noobuntu 10 04 我得到了以下代码 http asm sourceforge net intro hello html http asm sourceforge net intro hello
  • 内核与系统中的 Windows 进程

    我有一些与内核和用户模式下的 Windows 进程相关的问题 如果我有一个 hello world 应用程序和一个公开新系统调用 foo 的 hello world 驱动程序 我很好奇一旦处于内核模式 我能做什么和不能做什么 对于初学者来说
  • AOSP 的“午餐”组合是什么意思?我需要选择什么?

    我是 Android 设备 ROM 开发的新手 无论如何 我现在正在为具有 64 位处理器的中国设备构建 AOSP 我按照 source android com 上的菜单进行操作 当我运行 午餐 命令时 终端显示 午餐菜单 选择一个组合 我
  • gdb 不会从外部架构读取核心文件

    我正在尝试在 Linux 桌面上读取 ARM 核心文件 但似乎无法找出我的核心文件 有什么方法可以指示 gdb 我的核心文件是什么类型吗 file daemon daemon ELF 32 bit LSB executable ARM ve
  • Qemu flash 启动不起作用

    我有一本相当旧的 2009 年出版 嵌入式 ARM Linux 书 其中使用u boot and qemu 的用法qemu与u boot书中对二进制的解释如下 qemu system arm M connex pflash u boot b
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 同步 I/O 是否会使线程繁忙?

    假设我正在同步 I O 套接字上执行 I O 该套接字已准备好read or write手术 这意味着调用线程不会在操作上被阻塞 无论非阻塞 SOCK NONBLOCK 套接字的阻塞性质 但以下事情我不清楚 实际转移何时发生 当套接字标记为
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • 什么是遗留中断?

    我正在开发一个项目 试图弄清楚 ARM 架构的全局中断控制器中如何处理中断 我正在使用 pl390 中断控制器 我看到有一条线被称为传统中断 它绕过了分配器逻辑 假设有 2 个中断可以被编程为传统中断 任何人都可以帮助解释一下什么是遗留中断
  • 树莓派的设备树驱动内核

    我想用设备树驱动的 Linux 内核启动树莓派 有什么特别的事情要做吗 谁能指出为树莓派设置基于设备树的内核启动需要什么 我可能需要有树莓派内核源代码 其中设备驱动程序应与设备树兼容 如果是这样 我在哪里可以找到 Raspberry Pi

随机推荐

  • 是否在数据库级别或服务器/实例级别启用了“CLR 集成”?

    我试图了解启用 CLR 是否在数据库级别或服务器级别 实例级别启用它 在线书籍根本不清楚 如果我使用此命令启用 CLR 会发生什么 它会在所有服务器上启用吗 sp configure clr enabled 1 GO RECONFIGURE
  • “结合更牢固”这句话是什么意思?

    我知道这可能是一个新手问题 但我试图理解这句话 来自一篇关于使用 EBNF 的元语言的论文 Logical and binds stronger than logical or 在此之前它说 Conditions are condition
  • 无法从 master 连接到 kubernetes pod:i/o 超时

    我配置了 1 个主节点和一个节点的 kubernetes 集群 运行主节点和节点的机器不在同一网络中 对于网络 我安装了 calico 并且所有 pod 都在运行 为了测试我使用的集群获取外壳示例 https kubernetes io d
  • 用 Java 写入文件

    我对 Java 很陌生 由于某种原因我无法写入文件 我的代码如下所示 FileWriter fstream try fstream new FileWriter fileLocation BufferedWriter out new Buf
  • 如何定期更新 Label 控件的值?

    我试图让标签显示一些文本 然后在一段时间后刷新自身并能够稍后重新显示其他内容 但目前我不知道如何使标签暂停 如果可能的话 到目前为止我的代码 foreach var x in mod labelWARNING Visible true la
  • 全屏纹理采样的最佳方式

    在片段着色器中采样全屏纹理的最佳方法是什么 例如延迟渲染器中的 g 缓冲区 或后处理着色器中的场景纹理 目前我使用以下两种方式 将屏幕尺寸作为统一值传递给着色器并计算 u v gl FragCoord vec2 texCoord gl Fr
  • 在 .each 循环中显示一个条目的模式 - Rails / Bootstrap

    我想要一个链接来打开一个模式 显示单击的对象 word title 显示在每个循环中 现在它会打开模式 但随后会为循环中的每个项目再次显示它 h1 Glossary of words h1 p Pagination at 25 p tabl
  • 如何将 CSV 或 JSON 导入到 firebase cloud firestore

    有没有办法像 Firebase 实时数据库一样将 CSV 或 JSON 导入到 firebase cloud firestore 通用解决方案 我发现许多脚本允许上传 JSON 但没有一个允许子集合 我上面的脚本处理任何级别的嵌套和子集合
  • 如何使用XNA加载文件夹中的所有文件?

    我想加载文件夹中的所有文件 内容 纹理 进入游戏使用Content Load 文件名 但是 我无法以这种方式 找到 位于 Content 内的文件 该程序而是查看 bin 调试 内容 纹理 但是当尝试使用 Content Load 加载 j
  • 模板类成员特化声明

    当我在模板类中专门化一个 静态 成员函数 常量时 我 对声明的去向感到困惑 这是我要做什么的一个例子 直接来自IBM 关于模板专业化的参考 http publib boulder ibm com infocenter comphelp v8
  • Koa 中的 Promise 错误处理

    如果我在 Koa 中做出承诺 它们可能会被拒绝 function fetch var deferred q defer Some async action which calls deferred reject return deferre
  • 如何让Android上的工具栏占据全宽?

    结果如下 https i stack imgur com VgbZT png https i stack imgur com VgbZT png 我希望它位于状态栏正下方且全宽 就像这样 https i stack imgur com FF
  • Internet Explorer 8 在哪里存储其故障转储?

    我正在对抗一个错误 该错误不会在我的计算机上重现 但每次都会在我客户的计算机上重复 我已经尝试了一切 现在我正在寻找 IE8 崩溃后留下的任何调试数据 或其他数据 谷歌和微软的搜索没有给我任何结果 Internet Explorer 8 在
  • npm 错误! npm install 时代码 EINTEGRITY

    当我尝试进行 npm install 时 出现此错误 npm ERR code EINTEGRITY npm ERR sha512 boQj1WFgQH3v4clhu3mTNfP vOBxorDlE8EKiMjUlLG3C4qAESnn9A
  • 将 div 定位到包含 div 的底部

    如何将 div 定位到包含 div 的底部 div class outside div class inside inside div div 此代码将文本 inside 放置在页面底部 outside width 200px height
  • aov 公式错误项:矛盾的例子

    我已经看到了 R 中受试者内设计的通用公式的两种基本方法aov R 随机 X 依赖 W 内 B 之间 Pure within X Error R W1 W2 or X W1 W2 Error R W1 W2 Mixed X B1 B2 Er
  • deep=True 在 pyyaml.Loader.construct_mapping 中做什么?

    在网上搜索自定义构造函数的用法时 我看到如下内容 def some constructor loader node value loader construct mapping node deep True return SomeClass
  • Fortran I/O:指定大记录大小

    我正在尝试将一个数组写入文件 我以这种方式打开文件 open unit 20 FILE output txt form unformatted access direct recl sizeof u Here u是一个数组并且sizeof
  • 如何调整散景轴上的刻度数(标签在小数字上重叠)

    我有一个由垂直堆叠和对齐的图形组成的多图形散景图 因为我想垂直对齐图 所以 y 轴标签旋转为垂直而不是水平 在某些情况下 散景会产生太多刻度 以致刻度标签完全重叠 导致难以辨认 这是一个例子 import bokeh plotting as
  • 我的中断处理程序应该禁用中断还是 ARM 处理器自动执行此操作?

    我们的小组使用定制驱动程序在共享 I2C 总线上连接四个 MAX3107 UART 四个 MAX3107 的中断连接 即通过逻辑或运算共享中断 到 ARM9 处理器 LPC3180 模块 上的 GPIO 引脚 当这些设备中的一个或多个中断时