新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > MAX3420E外设控制器的中断系统

MAX3420E外设控制器的中断系统

——
作者: 时间:2007-01-26 来源:《电子元器件应用》 收藏

max3420e可与任何spi主控制器相连,以构成全速usb外设器件。尽管一般都由max3420来管理底层usb信令,但是需要处理usb事件时,spi主控制器必须参与处理,当max3420的int引脚指示有中断发生时,spi主控制器将读取14个中断请求位,以确定需要服务的中断,一般情况下,主要由这些中断请求(irq)位确定max3420e的工作过程,在选择器件时,spi主控制器可以是微控制器、dsp、asic或具备spi端口的其他器件,并应能提供sclk信号。

max3420e的中断逻辑

◇ irq位

图1所示为max3420e中断逻辑。阴影部分是可通过spi访问的寄存器位,图中有一个irq位,实际上,每一个中断都有一个用于锁存服务请求的触发器。触发器的输出即为irq,它出现在max3420e寄存器中,irq位提供两种功能:一是读取一个irq位,然后返回irq触发器的状态;二是写入一个“1”至irq位,以清除irq触发器,而写入“0”至irq位,则不改变触发器状态。

事实上,可以在任意时刻读取irq位,它反映了irq触发器的状态,当按照写入1而不是0来清除所选的irq位时,这一过程不需要读-修改-写周期,假设max3420e的irq位与普通的寄存器位一样,即写1置位,写0清除,那么,清除usbirq寄存器的usesirq位的操作代码如下:

#define rusbirq 13 //register 13

#define bmuresirq 0x08 //uresirq is bit4,bm means“bit mask”

unsigned char dum;

dum=rreg(rusbirq); //read the register

dum=dum&—bmuresirq; //chear one bit

wreg(rusbirq,dum); //write it back

由于spi主控制器可通过写1来清除一个max3420e irq位,而写0则不改变其他寄存器位,因此,spi主控制器可直接写入位屏蔽值以清除uresirq位。这样,上述代码中的最后三条语句便可由下面的单条语句所替代:

wreg(rusbirq,bmuresirq);//1 cheras an irq bit,0 leaves it alone

◇ ien位

14个max3420e中断的每一个都有相应的中断使能(ien)位,ien位和irq触发器输出进行“与”操作,可决定是否向int引脚传送中断请求。14个irq触发器通过门控电路后再进行“或”操作,也会形成一个内部中断请求信号,并传送至中断引脚逻辑模块。

实际上,无论ien位的状态如何,irq位都指示中断悬挂状态,这样,即使中断不触发int引脚,固件仍可以检查该悬挂中断,如果您的程序需要检查一个irq寄存器“是否悬挂中断”,比较简单的方法是读取irq和ien寄存器,并对它们进行“与”操作,然后检查“等待和被使能的irq”位,零值表示没有使能的中断,系统处于悬挂状态。

◇ ie位

sip主控制器通过ie位来使能或者禁止int引脚,由于该位影响到所有的中断,因此通常称之为全局中断使能,不论irq或者ien位的状态如何,当ie为0时,int引脚均无效。

可用两个寄存器位intlevel(参考下面的讨论)和posint来控制int引脚的工作方式,在设置ie为1之间,应先设置这两个配置位。其操作如下:

本文引用地址:https://www.eepw.com.cn/article/21394.htm

(1)电平模式

某些微控制器系统使用低电平有效中断。当采用这种配置时,max3420e采用一个开漏极晶体管驱动int引脚至地,由于引脚只能驱动低电平,因此,需要在int引脚和逻辑电源之间接一个上拉电阻,该模块支持多个芯片的int引脚输出(每个均为开漏输出)连接在一起,并使用单个上拉电阻。由于任何一个芯片输出都可将引脚拉低,因此这种逻辑有时也称为“线或”。对于这种类型的系统,可设置intlevel为1。

(2)边沿模式

max3420e的int引脚可以驱动边沿有效的中断系统,此时,微控制器在其中中断输入脚上将检查0到1或者1到0跳变,intlevel为0是max3420e的缺省模式。spi主控制器通过第二个posint位设置边沿极性,posint为1时,max3420e为悬挂中断输出一个0到1的跳变。posint为0(缺省值)时,max3420为悬挂中断输出一个1到0的跳变。

需要说明的是:如果一个irq位置位,而其对应的ien位清零,则irq将不会影响int输出引脚,但是,中断仍处于悬挂状态,永远可以读取irq位以获得其状态,可向对应的寄存器位写1,并将irq位清零。

悬挂中断(irq位是1)的ien位出现0到1跳变时将产生中断。

int引脚可连接至微控制器的中断系统,此外,微控制器可以轮询int引脚,以确定max3420e是否有中断处于悬挂状态,最适合轮询的模式是电平模式(intlevel=1),这是因为在边沿模式中,int引脚输出的脉冲可能太窄,微控制器无法探测到(参考下面的讨论)。请注意,电平模式需要在int引脚和v1之间连接一个上拉电阻。

int引脚状态与波形

◇ 电平模式

图2所示为电平模式下的max3420e的int引脚波形。int引脚静态为高电平(上拉至vl)。假设图中两个中断的ien位均置为1,全局ie位也置1,那么将发生一个中断请求,使max3420e int引脚置低,实际上,尽管max3420e中断输出引脚被称为int引脚,它有时也是负极性(例如在电平模式下)。

spi主控制器完成中断服务后将向irq位写入1,并将其清零,并使int引脚返回至静态高电平。(a)和(b)之间的间隔是中断置位其irq位和spi主控制器清除irq位之间的时间,当系统产生另一个中断请求,会将int引脚拉低,而当第一个中断请求处于悬挂状态时,系统可能产生第二个中断请求,而此时int电平没有变化,因此至少有一个中断处于悬挂状态(实际上,此刻有两个中断处于悬挂状态。)

当spi主控制器完成一个中断服务向irq位写入1并将其清零后,由于仍有一个中断处于悬挂状态,int引脚将保持低电平,此后sip主控制器处理完剩下的中断请求,并向irq位写入1,在将其清零,此后由于没有中断处于悬挂状态,因此,int引脚将返回至静态高电平。

这种逻辑可以很好地处理int引脚轮询,如果max3420e的任何部分需要服务,并且其中断已被使能,那么int引脚将变为低电平,在微控制器清除最后一个悬挂irq位之前,int引脚一直保持低电平。

◇ 边沿模式

图3所示为两种极性边沿模式下max3420e的int引脚波形,极性由posint位控制。该波形与电平模式相似,但有两处不同,在两种条件下,int引脚将产生边沿跳变:第一是一个irq位变为有效状态(其irq触发器产生0到1跳变),此时处理器将清除一个irq位(向其写入1),其他irq处于悬挂状态,第二个条件是在确保还有中断需要服务时,处理器能够检测到边沿跳变。

除了产生边沿跳变外,与电平模式一样,int引脚也具有有效和无效状态,int引脚的无效状态取决于posint位设置的边沿极性,在这一点上,边沿模式与电平模式相似,察看int引脚的状态就可以知道是否有中断处于悬挂状态,当在负极性边沿模式下如果没有悬挂中断,int引脚为高电平,如果有悬挂中断,则为低电平,而在正极性边沿模式下,如果没有悬挂中断,int引脚为低电平,如果有悬挂中断,则为高电平。

int引脚的有效状态意味着至少有一个中断处于悬挂状态,无效状态是指没有中断处于悬挂状态,假设中断已被使能,那么,系统将出现以下事件;

(1)产生一个中断请求时,max3420e int引脚出现一个边沿跳变,边沿的极性取决于posint位的设置,由于中断仍处于悬挂状态,int引脚保持其有效状态。

(2)spi主控制器完成中断服务后,并向irq位写入1,并将其清零。max3420e int引脚返回至无效状态,图中(a)和(b)之间的间隔(1)是产生中断和spi主控制器清除irq位之间的时间。

(3)产生另一个中断请求时,max3420e int引脚产生一个边沿跳变,并保持其有效状态。

(4)当第一个中断请求处于悬挂状态时,系统又将产生第二个中断请求,由于max3420e int引脚必须产生另一个边沿跳变。因此,该引脚将在无效和有效状态之间产生跳变脉冲,从而提供正确的边沿极性,在max3420e中,该脉冲的宽度固定为10.67μs,由于还有中断处于悬挂状态,int引脚可保持在有效状态。

(5)spi主控制器完成一个悬挂中断服务后,向其irq位写入1,将其清除。与第(d)步一样,int引脚产生另一个边沿跳变。

(6)spi主控制器处理完剩下的中断请求,并向其irq位写入1,将其清除。由于此时已没有中断处于悬挂状态,因此,int引脚返回至无效状态。

中断寄存器

表1是max3420e寄存器控制位,其中阴影部分可用于控制usb中断系统。max3420e具有两类usb中断,可由表1中阴影部分的寄存器控制,中断位分为两类:一是位于epirq(r11)和epien(r12)寄存器的端点控制,二是位于usbirq(r13)和usbien(r14)寄存器的usb控制,全局ie位在cpuctl寄存器中。

中断请求位bav

该器件的三个缓冲区就绪(bav)irq位可用于指示是否可以将spi主控制器装入一个in端点fifo,芯片复位或者in数据由端点缓冲区成功地发送给主机后,max3420将置位这些irq位,此后该irq将通知spi主控制器缓冲区可以装入新数据。

与所有的max3420e irq位一样,也可以通过写入1来三个清除bav irq位,但是千万不要这样做,相反,应通过写入in端点的字节计数寄存器来清除bav irq位,这是因为max3420e要使用一个in端点的bav中断请求位作为锁定机制。

事实上,上述机制可以确保spi主控制器和max3420e的串行接口引擎(sie)不会同时使用端点缓冲区。例如,如果清除bav位,然后以两条单独指令装入字节计数器。那么当您更新字节计数寄存器时,可能已经开始了数据包传输,从而导致数据出错。



关键词:

评论


相关推荐

技术专区

关闭