MAX3420E外设控制器的中断系统
发布时间:2010-12-8 12:05
发布者:techshare
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之间,应先设置这两个配置位。其操作如下: [tr]
中断请求位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位,然后以两条单独指令装入字节计数器。那么当您更新字节计数寄存器时,可能已经开始了数据包传输,从而导致数据出错。 |
网友评论