ARM-外部中断,ADC模数转换器

根据您提供的图片,我们可以看到一个S3C2440微控制器的中断处理流程图。这个流程图展示了从中断请求源到CPU的整个中断处理过程。以下是流程图中各个部分与您提供的寄存器之间的关系:

  1. 请求源(带sub寄存器)

    • 这些是具体的中断源,例如UART0-ERR、UART0-RXD、UART0-TXD等。

    • 每个请求源可能有一个对应的子中断源挂起标志(SUBSRCPND),用于指示该请求源下的具体中断事件。

  2. 子中断源开关(SUBMASK)

    • 这个开关用于使能或禁用子中断源的中断请求。

    • 例如,如果SUBMASK寄存器的某位被清除(即设置为0),则对应的子中断源的中断请求将被屏蔽。

  3. 源挂起标志(SRCPND)

    • 这个寄存器用于记录哪些中断源的中断请求已经发生但尚未被处理。

    • 在流程图中,SRCPND寄存器的值会被传递到开关(MASK)和优先级(MODE)模块。

  4. 开关(MASK)

    • 这个模块用于使能或禁用中断请求的传递。

    • 它使用INTMSK寄存器的值来决定是否允许中断请求通过。

    • 在代码中,INTMSK &= ~(1 << 5);操作使能了EINT8_23中断组。

  5. 优先级(MODE)

    • 这个模块用于设置中断的优先级。

    • 它可能涉及到优先级寄存器(例如INTPR),但在您提供的代码中没有直接使用。

  6. 中断挂起标志(INTPND)

    • 这个寄存器用于记录哪些中断已经发生但尚未被处理。

    • 在流程图中,INTPND寄存器的值会被传递到CPU。

    • 在代码中,INTPND = INTPND;操作用于清零中断挂起寄存器。

  7. CPSR(I, F)

    • 这是当前程序状态寄存器(CPSR)中的两个位,用于控制中断使能和禁止。

    • CPSR寄存器的I位用于使能或禁止IRQ中断,F位用于使能或禁止FIQ中断。

    • 在代码中,通过修改CPSR寄存器来使能IRQ中断。

  8. CPU(ARM920T)

    • 最终,处理完的中断请求会被传递到CPU进行处理。

    • CPU会根据中断的优先级和当前的中断使能状态来决定是否响应中断。

总结来说,流程图中展示了从中断请求源到CPU的整个中断处理过程,而您提供的寄存器在这个过程中起到了关键的作用。每个寄存器都有其特定的功能,共同协作以确保中断能够被正确地处理。

发生中断处理

  1. mrs r0, cpsr

    • 这条指令将当前程序状态寄存器(CPSR)的值移动到通用寄存器r0中。

    • CPSR包含了处理器的状态信息,如条件标志、中断使能位等。

  2. bic r0, r0, #0x1f

    • 这条指令对r0寄存器进行位清除(Bit Clear)操作,用于清除CPSR中的模式位(最低的5位,即0x1F)。

    • 这样做是为了将当前的处理器模式位清零,为下一步设置新的模式做准备。

  3. orr r0, r0, #0x12

    • 这条指令对r0寄存器进行位或(Bit OR)操作,将模式位设置为0x12。

    • 在ARM架构中,0x12代表IRQ模式。

  4. msr cpsr_c, r0

    • 这条指令将r0寄存器的值移回CPSR。

    • 由于使用了cpsr_c而不是cpsr,这条指令仅修改CPSR中的条件码标志位和模式位,而不会影响其他位(如中断使能位)。

    • 这一步完成了处理器模式从当前模式切换到IRQ模式的操作。

  5. ldr sp, =0x40000C00

    • 这条指令将立即数0x40000C00加载到栈指针(SP)寄存器中。

    • 这样做是为了初始化IRQ模式的栈指针,为即将到来的中断处理程序准备栈空间。

    • 0x40000C00是为IRQ模式预设的栈地址。

INTOFFSET为中断的偏移量,反映的是那种中断

在S3C2440微控制器中,涉及到中断处理的寄存器有多个,每个寄存器都有其特定的作用。以下是您提供的代码中涉及到的寄存器及其作用的详细说明:

1. GPGCON

  • 作用:配置GPIO端口G的引脚功能。

  • 操作

    • GPGCON &= ~(0x3 << 0);:清除GPG0引脚的功能设置,确保其不被其他功能占用。

    • GPGCON |= (0x2 << 0);:将GPG0引脚设置为外部中断(EINT8)模式。

2. EXTINT1

  • 作用:外部中断控制寄存器,用于设置外部中断的触发方式。

  • 操作

    • EXTINT1 &= ~(0x7 << 0);:清除EINT8的触发方式设置,确保其不被其他设置影响。

    • EXTINT1 |= (0x2 << 0);:将EINT8设置为下降沿触发。

3. EINTMASK

  • 作用:外部中断屏蔽寄存器,用于使能或禁用特定的外部中断。

  • 操作

    • EINTMASK &= ~(1 << 8);:使能EINT8中断,即清除屏蔽位,允许EINT8中断请求被发送到中断控制器。

4. INTMSK

  • 作用:中断屏蔽寄存器,用于使能或禁用一组中断。

  • 操作

    • INTMSK &= ~(1 << 5);:使能EINT8_23中断组,即清除屏蔽位,允许EINT8_23组中的中断请求被发送到中断控制器。

5. EINTPEND

  • 作用:外部中断挂起寄存器,用于记录哪些外部中断已经发生但尚未被处理。

  • 操作

    • EINTPEND |= (1 << 8);:清零EINT8的挂起位,表示EINT8中断已经被处理。

6. SRCPND

  • 作用:源挂起寄存器,用于记录哪些中断源的中断请求已经发生但尚未被处理。

  • 操作

    • SRCPND |= (1 << irq_num);:清除特定中断源的挂起位,表示该中断已经被处理。

7. INTPND

  • 作用:中断挂起寄存器,用于记录哪些中断已经发生但尚未被处理。

  • 操作

    • INTPND = INTPND;:通过将寄存器的值写回自身,清零所有挂起的中断位,表示所有挂起的中断已经被处理。

8. INTOFFSET

  • 作用:中断偏移量寄存器,用于提供当前发生的中断的编号。

  • 操作

    • unsigned int irq_num = INTOFFSET;:读取当前中断的编号,用于确定是哪种中断发生了。

这些寄存器共同工作,实现了S3C2440微控制器的中断处理机制,确保了系统能够正确响应和处理各种中断请求。

将value读取出来计算电压为3.3/1024*value

相关推荐
charlie1145141911 小时前
从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——第2章——构建简单的ESP8266驱动
stm32·单片机·物联网·学习·c·esp8266
zhmc2 小时前
Cortex-M系列MCU的位带操作
单片机·嵌入式硬件
旅行的橘子汽水3 小时前
【嵌入式-stm32电位器控制以及旋转编码器控制LED亮暗】
stm32·单片机·嵌入式硬件
Zevalin爱灰灰4 小时前
面试可能会遇到的问题&回答(嵌入式软件开发部分)
stm32·单片机·面试·操作系统·嵌入式·ucos
【云轩】4 小时前
《信号革命:从模拟到数字的通信进化史诗》
人工智能·嵌入式硬件·语音识别
矿渣渣4 小时前
ARM Cortex-A7处理器中`ISB`汇编指令解析
汇编·arm开发
lzb7595 小时前
积分赛——读取实时时间
单片机
基极向上的三极管6 小时前
【51单片机】2-5【I/O口】433无线收发模块控制继电器
单片机·51单片机
最后一个bug8 小时前
PCI与PCIe接口的通信架构是主从模式吗?
linux·开发语言·arm开发·stm32·嵌入式硬件
古希腊掌握嵌入式的神8 小时前
[CH32] RISC-V汇编指令解释
单片机·嵌入式硬件