应用笔记 3661

MAX3420E中断系统


摘要 : MAX3420E可为微控制器等任何SPI主控制器加入USB外设功能。MAX3420E的工作主要通过中断请求(IRQ)位协助完成,这些中断请求位提示SPI主控制器处理USB事件。本应用笔记对MAX3420E中断系统和每一个中断请求位进行了阐述。

引言

MAX3420E可与任何SPI主控制器相连,构成全速USB外设器件。尽管由MAX3420管理底层USB信令,但是需要处理USB事件时,SPI主控制器必须参与处理。MAX3420的INT引脚指示有中断发生,SPI主控制器读取14个中断请求位,确定需要服务的中断。主要由这些中断请求(IRQ)位确定MAX3420E的工作过程。


注意:SPI主控制器可以是微控制器、DSP、ASIC或者任何具备SPI端口的器件,并能提供SCLK信号。本文档使用的术语“SPI主控制器”和“微控制器”含义相同。

MAX3420E中断逻辑

图1. MAX3420E中断逻辑。阴影部分为寄存器位。
图1. MAX3420E中断逻辑。阴影部分为寄存器位。

图1所示为MAX3420E中断逻辑。阴影部分是可通过SPI访问的寄存器位。

IRQ位
每一个中断源都有一个用于锁存服务请求的触发器。触发器的输出即为IRQ,它出现在MAX3420E寄存器中。IRQ位提供两种功能:
  1. 读取一个IRQ位,将返回IRQ触发器的状态。
  2. 写入一个“1”至IRQ位,将清除IRQ触发器,写入“0”至IRQ位,不改变触发器状态。
可以在任意时刻读取IRQ位,它反映了IRQ触发器的状态。按照上面第2条,写入1而不是0来清除所选的IRQ位,这一过程不需要读-修改-写周期。举例说明,假设MAX3420E的IRQ位与普通的寄存器位一样,写1置位,写0清除。现在,我们想要清除USBIRQ寄存器的URESIRQ位。图2所示为实现该操作的代码。

图2. 清除通用寄存器位需要一次RMW操作
图2. 清除通用寄存器位需要一次RMW操作

由于SPI主控制器通过写1来清除一个MAX3420E IRQ位,而写0不改变其他寄存器位,因此SPI主控制器可以直接写入位屏蔽值来清除URESIRQ位。所以,图2中的最后三条语句可以由图3中的单条语句替代。

图3. 用一次寄存器写操作来清除MAX3420E IRQ位
图3. 用一次寄存器写操作来清除MAX3420E IRQ位

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

注意,无论IEN位的状态如何,IRQ位都指示中断悬挂状态。这样,即使中断不触发INT引脚,固件仍可以检查该悬挂中断。如果您的程序需要检查一个IRQ寄存器“是否悬挂中断”,一个简单的方法是读取IRQ和IEN寄存器,对它们进行“与”操作,检查现在指示“等待和被使能的IRQ”位。零值表示没有使能的中断处于悬挂状态。

IE位
SPI主控制器通过IE位使能或者禁止INT引脚。由于该位影响到所有的中断,因此通常称之为全局中断使能。不论IRQ或者IEN位的状态如何,当IE = 0时,INT引脚无效。

中断引脚逻辑
两个寄存器位INTLEVEL (参考下面的讨论)和POSINT控制INT引脚的工作方式。在设置IE = 1之前,应先设置这两个配置位。

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

边沿模式,INTLEVEL = 0 (缺省值)
MAX3420E INT引脚也可以驱动边沿有效的中断系统,此时微控制器在其中断输入引脚上检查0-1或者1-0跳变。这是MAX3420E的缺省模式,INTLEVEL = 0。SPI主控制器通过第二个POSINT位设置边沿极性。当POSINT = 1时,MAX3420E为悬挂中断输出一个0-1跳变。当POSINT = 0 (缺省值)时,MAX3420E为悬挂中断输出一个1-0跳变。

在图1中,请注意以下几方面:
  1. 如果一个IRQ位置位,而其对应的IEN位清零,则IRQ不会影响INT输出引脚。但是,中断仍处于悬挂状态。永远可以读取IRQ位以获得其状态,可向对应的寄存器位写1,将IRQ位清零。
  2. 悬挂中断(IRQ位是1)的IEN位出现0-1跳变时将产生中断
  3. INT引脚可连接至微控制器的中断系统。此外,微控制器可以轮询INT引脚,以确定MAX3420E是否有中断处于悬挂状态。最适合轮询的模式是电平模式(INTLEVEL = 1),这是因为在边沿模式中,INT引脚输出的脉冲可能太窄,微控制器无法探测到(参考下面的讨论)。请注意,电平模式需要在INT引脚和VL之间连接一个上拉电阻。

INT引脚波形

电平模式

图4. 电平模式下MAX3420E INT引脚的变化(INTLEVEL = 1)
图4. 电平模式下MAX3420E INT引脚的变化(INTLEVEL = 1)

图4所示为电平模式下的MAX3420E INT引脚波形。INT引脚静态为高电平(上拉至VL)。假设图中两个中断的IEN位置为1,全局IE位置为1,那么将出现以下事件。(下面标有字母的条目对应图4中相同字母标出的事件。)

  1. 发生一个中断请求,使MAX3420E INT引脚置低。
    注意:尽管MAX3420E中断输出引脚被称为INT引脚,它有时也是负极性(例如在电平模式下)。
  2. SPI主控制器完成中断服务后,向IRQ位写入1,将其清零。INT引脚返回至静态高电平。(a)和(b)之间的间隔是中断置位其IRQ位和SPI主控制器清除IRQ位之间的时间。
  3. 产生另一个中断请求,将INT引脚拉低。
  4. 当第一个中断请求处于悬挂状态时,产生了第二个中断请求。INT电平没有变化,因为至少有一个中断处于悬挂状态。(实际上,此刻有两个中断处于悬挂状态。)
  5. SPI主控制器完成一个中断服务后,向IRQ位写入1,将其清零。由于仍有一个中断处于悬挂状态,INT引脚保持低电平。
  6. SPI主控制器处理完剩下的中断请求,向IRQ位写入1,将其清零。没有中断处于悬挂状态,因此INT引脚返回至静态高电平。

注意:如果一个中断的IRQ触发器(图1)置位,则认为该中断处于悬挂状态。


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

边沿模式

图5. 边沿模式下MAX3420E INT引脚的变化(INTLEVEL = 0)。间隔(1)是SPI主控制器清除IRQ的时间,间隔(2)是10.67µs。
图5. 边沿模式下MAX3420E INT引脚的变化(INTLEVEL = 0)。间隔(1)是SPI主控制器清除IRQ的时间,间隔(2)是10.67µs。

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

除了产生边沿跳变外,与电平模式一样,INT引脚也具有有效和无效状态。INT引脚的无效状态取决于POSINT位设置的边沿极性。在这点上,边沿模式与电平模式相似,查看INT引脚的状态就可以知道是否有中断处于悬挂状态:
  • 在负极性边沿模式下,如果没有悬挂中断,INT引脚为高电平;如果有悬挂中断,则为低电平。
  • 在正极性边沿模式下,如果没有悬挂中断,INT引脚为低电平;如果有悬挂中断,则为高电平。
以下说明解释了INT引脚的有效和无效状态。有效状态意味着至少有一个中断处于悬挂状态;无效状态是指没有中断处于悬挂状态。假设中断已被使能,将出现以下事件。(下面标有字母的条目对应图5中相同字母标出的事件。)
  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寄存器位控制中断系统


MAX3420E具有两类USB中断,由表1中阴影部分的寄存器控制。中断位分为两类:位于EPIRQ (R11)和EPIEN (R12)寄存器的端点控制,以及位于USBIRQ (R13)和USBIEN (R14)寄存器的USB控制。全局IE位在CPUCTL寄存器中。

表2. 14个MAX3420E中断源
Bit Name Default Location Set By Cleared By
IN0BAVIRQ 1 EPIRQ.0 EP0 FIFO is ready for µP loading Load the EP0BC register
OUT0DAVIRQ 0 EPIRQ.1 EP0-OUT FIFO has host data Write EPIRQ = 0x02
OUT1DAVIRQ 0 EPIRQ.2 EP1-OUT FIFO has host data Write EPIRQ = 0x04
IN2BAVIRQ 1 EPIRQ.3 EP2-IN FIFO is ready for µP loading Load the EP2INBC register
IN3BAVIRQ 1 EPIRQ.4 EP3-IN FIFO is ready for µP loading Load the EP3INBC register
SUDAVIRQ 0 EPIRQ.5 Setup Data is available in SUDFIFO Write EPIRQ = 0x20
OSCOKIRQ 0 USBIRQ.0 MAX3420E Oscillator/PLL is stable Write USBIRQ = 0x01
RWUDNIRQ 0 USBIRQ.1 SIE has finished signaling RWU Write USBIRQ = 0x02
BUSACTIRQ 0 USBIRQ.2 Bus is active Write USBIRQ = 0x04
URESIRQ 0 USBIRQ.3 Host started signaling bus reset Write USBIRQ = 0x08
SUSPIRQ 0 USBIRQ.4 Host suspended the bus Write USBIRQ = 0x10
NOVBUSIRQ 0 USBIRQ.5 VBUS comparator made 1-0 transition Write USBIRQ = 0x20
VBUSIRQ 0 USBIRQ.6 VBUS comparator made 0-1 transition Write USBIRQ = 0x40
URESDNIRQ 0 USBIRQ.7 Host finished signaling bus reset Write USBIRQ = 0x80

表2说明了14个中断控制位,MAXQ3420E内部逻辑何时对它们进行置位,以及SPI主控制器怎样清除它们。

中断请求位

BAV位
三个缓冲区就绪(BAV) IRQ位指示SPI主控制器可以装入一个IN端点FIFO。芯片复位或者IN数据由端点缓冲区成功地发送给主机后,MAX3420E置位这些IRQ位。该IRQ通知SPI主控制器缓冲区可以装入新数据。

图6. 主机向端点3发送一个IN请求的总线过程
图6. 主机向端点3发送一个IN请求的总线过程

图6所示为IN传输的总线过程,主机从MAX3420E申请数据。在数据包7145到达前,SPI主控制器先将字节00 00 08装入端点3-IN FIFO (EP3INFIFO)。然后,SPI主控制器将数值3写入EP3INBC (端点3 IN字节计数)寄存器。写入字节计数寄存器,可完成以下三项功能:
  1. 通知MAX3420E当IN请求到达时有多少字节要发送。
  2. 使端点为传输数据做好准备(而不是非应答)。
  3. 清除EP3INBAV IRQ位。
MAX3420E以数据包7146响应以端点3为地址的IN数据包。主机发送应答(ACK)数据包7147,响应接收到的无误码数据。当MAX3420E检测到主机ACK包后,设置EP3INBAV中断请求位,通知SPI主控制器端点FIFO可以装入新数据。

如果在SPI主控制器准备好端点之前到达IN数据包,MAX3420E会响应一个NAK握手信号(图7)。NAK握手信号通知主机稍后重发IN请求。

图7. 如果MAX3420E还没有准备好发送数据,则发出一个NAK包。
图7. 如果MAX3420E还没有准备好发送数据,则发出一个NAK包。

如果在IN数据传输至主机过程中出现误码,当主机重发IN请求时,MAX3420E自动重发数据(以及相同的数据触发DATA0/DATA1)。只有接收到来自主机的ACK握手信号后,MAX3420E才会置位端点的BAV IRQ位,指示缓冲区准备好接收新数据。


重要提示:与所有的MAX3420E IRQ位一样,也可以通过写入1来三个清除BAV IRQ位。千万不要这样做。相反,应采用上面列出的方法:通过写入IN端点的字节计数寄存器来清除BAV IRQ位。这是因为MAX3420E使用一个IN端点的BAV中断请求位作为锁定机制。该机制确保SPI主控制器和MAX3420E的串行接口引擎(SIE)不会同时使用端点缓冲区。例如,如果清除BAV位,然后以两条单独指令装入字节计数器,那么当您更新字节计数寄存器时,可能开始了数据包传输,从而导致数据出错。


BAV IRQ缺省值
三个BAV IRQ位(见表2 Default列中的1)的缺省值为1。这表明,上电或者复位后SPI主控制器将读取到EPIRQ = 0x19。如果任何一个对应的IEN位置位,INT引脚将指示中断处于悬挂状态。

双缓冲端点EP2-IN
MAX3420E EP2-IN端点为双缓冲结构。这表明它有两组64字节FIFO和字节计数寄存器。双缓冲提高了传输带宽,这是因为在装入另一个数据包之前,SPI主控制器不需要等待数据包传输至主机。采用双缓冲结构,SPI主控制器可以在一个IN FIFO向主机传输其IN数据的同时装入另一个IN FIFO。当您装载EP2INBC寄存器时,两个缓冲区“自动轮换”。这将另一个FIFO (第二组)和字节计数寄存器提供给SPI主控制器使用。这种双缓冲机制对固件来说是透明的。

双缓冲机制使我们能够观察到的唯一影响出现在初始化过程中。上电或者芯片复位时,IN2BAVIRQ位置位。一般情况下,初始化程序把数据装入EP2IN FIFO,然后装载EP2INBC寄存器,为传输做好准备,同时清除了IN2BAVIRQ位。这样做时,您会很奇怪地发现MAX3420E立即重新置位IN2BAVIRQ位。这表明第二个缓冲区已经准备就绪,允许SPI主控制器装入第二个数据包。

DAV中断请求位
OUT端点的数据就绪(DAV) IRQ位指示已经从主机接收到了新数据。MAX3420E自动处理总线重试操作,只有当接收到的数据无误码时,才会产生中断请求。当SPI主控制器收到DAV中断请求时,它将读取端点字节计数寄存器,确定有效数据的大小。然后SPI主控制器从端点的OUTFIFO读取相应数目的字节。SPI主控制器以向OUTDAV IRQ位写入1的正常方式对其清零。这样,使端点再次准备好接收下一个OUT数据包。

图8中,主机发送一个OUT PID和四个字节的数据,MAX3420E将其传送至EP1OUT FIFO。当MAX3420E验证传送无误码后,将更新其EP1OUTBC寄存器,指示四个字节,向主机发送ACK包,并置位EP1OUTDAV IRQ,通知SPI主控制器可以提取端点1 FIFO内已经准备好的数据。

图8. 主机向端点1发送OUT包的总线过程
图8. 主机向端点1发送OUT包的总线过程

双缓冲端点EP1-OUT
MAX3420E EP1-OUT端点为双缓冲结构,这表明它具有两组64字节FIFO和字节计数寄存器。双缓冲意味着SPI主控制器对OUT1DAVIRQ清零后,如果有另一个主机数据包在等待,它可以立即重新置位。

SUDAV中断请求位
当主机向MAX3420E发送一个CONTROL传输时,MAX3420E在一个8字节FIFO中存储8个SETUP字节,SPI主控制器可从SUDFIFO寄存器中读取该数据。由于外设总是从该缓冲区中接收主机数据,SUDAVIRQ的作用类似一个OUT端点FIFO,当主机来的新数据接收完毕后,MAX3420E置位其SUDAV IRQ。一个SETUP数据包总是包含8个字节,因此,SETUP数据不需要字节计数寄存器。

OSCOK中断请求位
当MAX3420E上电、芯片复位完毕、或者退出关电状态时,需要时间来启动内部振荡器和PLL,以达到稳定。振荡器就绪(OSCOK) IRQ指示MAX3420E已经准备好工作。

图9. 复位MAX3420E,在结束前等待OSCOK的实例代码。
图9. 复位MAX3420E,在结束前等待OSCOK的实例代码。

图9所示为实例代码,采用CHIPRES寄存器位复位MAX3420E。由于芯片复位将停止内部振荡器工作,代码设置CHIPRES = 0清除复位信号后,在使用MAX3420E之前应该等待振荡器稳定下来。

RWUDN中断请求位
处于挂起状态时,USB外设可以发出远程唤醒(RWU)信号,通知主机恢复总线工作。USB规范定义了一个1ms至15ms K-state的远程唤醒信号。SPI主控制器通过设置远程唤醒信号(SIGRWU)位等于1,来触发RWU信号。

当SPI主控制器置位SIGRWU位时,MAX3420E等待5ms,驱动K-state 10ms,然后置位远程唤醒完成中断请求(RWUDNIRQ)位。5ms延时保证符合另一USB要求:在外设发出恢复信号前,总线必须至少空闲(J-state) 5ms。

图10. 发送远程唤醒信号的实例代码
图10. 发送远程唤醒信号的实例代码

图10所示为发送远程唤醒的实例代码。注意,MAX3420E实现信号定时,完成后置位IRQ。MAX3420E对于所有的定时USB事件均这样处理,完成时产生一个中断,因此SPI主控制器不需要定时控制信号间隔。

图10中的代码置位SIGRWU位,然后循环等待RWUDNIRQ置位,以确定持续10ms信号时间。然后,SPI主控制器设置SIGRWU = 0,并清除IRQ位。一般地,在多任务SPI主控制器中,应响应RWUDNIRQ中断请求,而不要浪费时间直接检查IRQ位。

接收到RWUDNITQ中断后的5ms内,SPI主控制器应关闭SIGRWU位。如果没有这样做,MAX3420E将启动另一个10ms K-state,重复这一过程(等待5ms, 然后10ms K-state),直到SIGRWU = 0。在RWU信号处理过程中设置SIGRWU = 0,不会终止RWU信号。

如果SPI主控制器设置SIGRWU = 1时MAX3420E正处于关电状态(PWRDOWN = 1),那么MAX3420E会自动重新启动振荡器,等待其达到稳定,然后开始发送RWU信号。在这种情况下,SPI主控制器不需要检查OSCOK IRQ。

BUSACT中断请求位
当MAX23420E探测到在USB数据包的开始位置有SYNC模式时,置位BUSACT IRQ位。USB总线复位过程不是总线活动状态,因此不会触发BUSACK中断请求。

URES和URESDN中断请求位
USB主机通过至少保持50ms的单端零(SE0)状态(D+和D-同时驱动至低电平),来复位外设。探测到2.5µs的SE0状态后,MAX3420E置位USB复位IRQ (URESIRQ)。然后,当主机完成复位后,MAX3420E置位USB复位完成IRQ (URESDNIRQ)。

由于SPI主控制器需要监视USB总线复位事件,在总线复位期间,MAX3420E不会清除URESIE、URESDNIE或IE中断使能位。但在总线复位期间它会清除EPIEN和USBIEN寄存器中的所有其他中断使能位。

SUSP中断请求位
当MAX3420E探测到总线停止工作3ms (持续J-state)后,它产生挂起中断请求(SUSPIRQ)。如果使用MAX3420E的外设是由总线供电的,它必须进入低功耗状态,以最大程度降低从VBUS上吸收的电流。在这种情况下,SPI主控制器应关断消耗功率的外设,然后设置PWRDOWN = 1,使MAX3420E进入低功耗模式。这样一来,MAX3420E振荡器停止工作,并进入最低功耗状态。

需要注意下面两条编程提示:
  • 清除SUSPIRQ位不能阻止3ms后中断重新产生。总线挂起时,为避免产生重复的挂起中断,在总线恢复工作之前,应清除挂起IEN位。
  • 内部挂起定时器逻辑由MAX3420E的内部振荡器提供时钟。因此,如果您将器件置为关断模式(设置PWRDOWN = 1),然后试图向SUSPIRQ位写入1来清除该位,MAX3420E将不会清除该位。MAX3420E离不开现在已停止工作的内部时钟。
VBUS和NOVBUS中断请求位
一个自供电外设可以探测自己是否插入USB接口,利用这些中断进行上电。内部VBUS比较器触发这些中断,它比较VBCOMP引脚电压和内部基准电压。它们均为边沿触发,当VBUS电压(VBUSIRQ)进行供电或者停止供电(NOVBUSIRQ)时置位。

总线供电的外设不需要探测VBUS,因为它由VBUS供电。这样,可以释放VBCOMP引脚,用作通用输入。在这种应用中,VBCOMP引脚没有内部上拉电阻,因此,应在VBCOMP引脚和VL之间连接一个上拉电阻。

编程提示

清除IEN位
芯片复位
芯片复位期间,所有IE位被清除。出现以下情况时,芯片复位:
  1. VL电源为MAX3420E供电(上电复位)。
  2. MAX3420E RES#引脚置低。
  3. SPI主控制器设置CHIPRES = 1。
总线复位
当MAX3420E探测到一个USB总线复位(总线暂停3ms)后,除了三个IE位外,其他IE位全部清零。SPI主控制器可能需要处理总线复位中断,以监视总线复位信号的状态。因此,总线复位不会影响以下IE位:
  1. URESIE
  2. URESDNIE
  3. IE (全局中断使能)
由于USB总线复位清除大部分IE位,当总线完成复位后,控制固件应重新使能所需的中断。

清除BAV和DAV IRQ位
请注意,DAV IRQ位以正常的写1方式进行清除。BAV位(用于IN端点)的清除方式不同,采用的方法是写入字节计数寄存器。

相关型号
MAX3420E 免费样品
下一步
EE-Mail 订阅EE-Mail,接收关于您感兴趣的新文档的自动通知。
© , Maxim Integrated Products, Inc.
The content on this webpage is protected by copyright laws of the United States and of foreign countries. For requests to copy this content, contact us.
APP 3661:
应用笔记 3661,AN3661, AN 3661, APP3661, Appnote3661, Appnote 3661