一个ISR怎么会知道是什么针造成的中断?

问题描述 投票:0回答:2

中断可以为数字I / O端口上的特定引脚(S)启用,是否正确?将如何ISR确定哪些针造成的中断?

因为矢量表只有一个用于端口1 ISR槽。所以同样的ISR函数被调用无论哪个端口1输入引脚需要注意的,除非我错了......

interrupt microprocessors isr msp432
2个回答
1
投票

至于其他人的意见建议这可能是MCU依赖,但对于ARM(后面MSP432核心)通常的答案是它不知道,它会寻找它。 ARM有vectored interrupt system,这意味着每个源都有自己的中断向量,所以CPU可以很容易地找出哪些源触发THR中断。到现在为止还挺好。 但随后发生这样的设备可以触发多个中断,就像GPIO如你所说,在这种情况下,CPU知道哪个端口触发的中断,从而触发它的ISR但随后是ISR责任轮询设备寄存器来找出确切的中断源也有很多这样的外设有多个中断,计时器剂,DMA只是仅举几例。 这就是为什么通常外设有一个中断使能位,这让他们触发中断,但他们也有控制究竟可以触发内部中断位掩码, 也有动作例子看看这个link一个,特别是在他们ISR但这正是由于上述相同


0
投票

在一个典型的MCU,有数百个,或一气甚至数千潜在的中断源。根据应用的不同,只有一些将是重要的,更是少之又少将真正关键时序。

对于一个GPIO端口,通常只启用这很有趣,以产生一个中断引脚。如果能够安排只有一个端口引脚来产生中断,作业完成后,你的处理程序,该端口可以做的工作,安全地知道,权当引脚激活它才会被调用。

当你关心在一个单一的外围的原因,并没有单独向量处理器的奢侈品,你需要依傍“非向量”的方针,并制定出其最终的处理函数需要前检查状态寄存器叫做。

有趣的是,你不能工作了,其引脚引起了中断 - 所有你能看到的是哪些引脚仍处于活动状态,一旦你得到全面轮询状态寄存器。如果你关心两个脉冲之间的相位,你可能无法除非有专门的硬件支持,以实现单一GPIO内这种歧视。即使多个异常向量不会帮助,除非你能肯定的是,第一个例外是第二个销之前一直采取可能成为集。

© www.soinside.com 2019 - 2024. All rights reserved.