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

相关推荐
智商偏低2 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen4 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
沉在嵌入式的鱼4 小时前
使用nomachine远程连接ARM设备桌面
arm开发·rk3588·远程连接·nomachine
森焱森5 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白6 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D6 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术9 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt10 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘10 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang10 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c