<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          MAX3420E中斷系統(tǒng)

          ——
          作者: 時(shí)間:2007-01-26 來(lái)源:《Maxim公司》 收藏
          引言

          max3420e可與任何spi主控制器相連,構(gòu)成全速u(mài)sb外設(shè)器件。盡管由max3420管理底層usb信令,但是需要處理usb事件時(shí),spi主控制器必須參與處理。max3420的int引腳指示有中斷發(fā)生,spi主控制器讀取14個(gè)中斷請(qǐng)求位,確定需要服務(wù)的中斷。主要由這些中斷請(qǐng)求(irq)位確定max3420e的工作過(guò)程。

          注意:spi主控制器可以是微控制器、dsp、asic或者任何具備spi端口的器件,并能提供sclk信號(hào)。本文檔使用的術(shù)語(yǔ)“spi主控制器”和“微控制器”含義相同。

          max3420e中斷邏輯
          圖1所示為max3420e中斷邏輯。陰影部分是可通過(guò)spi訪問(wèn)的寄存器位。

          irq位
          每一個(gè)中斷源都有一個(gè)用于鎖存服務(wù)請(qǐng)求的觸發(fā)器。觸發(fā)器的輸出即為irq,它出現(xiàn)在max3420e寄存器中。irq位提供兩種功能:

          本文引用地址:http://www.ex-cimer.com/article/20822.htm

          讀取一個(gè)irq位,將返回irq觸發(fā)器的狀態(tài)。
          寫(xiě)入一個(gè)“1”至irq位,將清除irq觸發(fā)器,寫(xiě)入“0”至irq位,不改變觸發(fā)器狀態(tài)。
          可以在任意時(shí)刻讀取irq位,它反映了irq觸發(fā)器的狀態(tài)。按照上面第2條,寫(xiě)入1而不是0來(lái)清除所選的irq位,這一過(guò)程不需要讀-修改-寫(xiě)周期。舉例說(shuō)明,假設(shè)max3420e的irq位與普通的寄存器位一樣,寫(xiě)1置位,寫(xiě)0清除。現(xiàn)在,我們想要清除usbirq寄存器的uresirq位。圖2所示為實(shí)現(xiàn)該操作的代碼。

          由于spi主控制器通過(guò)寫(xiě)1來(lái)清除一個(gè)max3420e irq位,而寫(xiě)0不改變其他寄存器位,因此spi主控制器可以直接寫(xiě)入位屏蔽值來(lái)清除uresirq位。所以,圖2中的最后三條語(yǔ)句可以由圖3中的單條語(yǔ)句替代。

          ien位
          14個(gè)max3420e中斷的每一個(gè)都有相應(yīng)的中斷使能(ien)位。ien位和irq觸發(fā)器輸出進(jìn)行“與”操作,決定是否向int引腳傳送中斷請(qǐng)求(圖1)。14個(gè)irq觸發(fā)器通過(guò)門(mén)控電路后,進(jìn)行“或”操作,形成一個(gè)內(nèi)部中斷請(qǐng)求信號(hào),傳送至中斷引腳邏輯模塊。

          注意,無(wú)論ien位的狀態(tài)如何,irq位都指示中斷懸掛狀態(tài)。這樣,即使中斷不觸發(fā)int引腳,固件仍可以檢查該懸掛中斷。如果您的程序需要檢查一個(gè)irq寄存器“是否懸掛中斷”,一個(gè)簡(jiǎn)單的方法是讀取irq和ien寄存器,對(duì)它們進(jìn)行“與”操作,檢查現(xiàn)在指示“等待和被使能的irq”位。零值表示沒(méi)有使能的中斷處于懸掛狀態(tài)。

          ie位
          spi主控制器通過(guò)ie位使能或者禁止int引腳。由于該位影響到所有的中斷,因此通常稱(chēng)之為全局中斷使能。不論irq或者ien位的狀態(tài)如何,當(dāng)ie = 0時(shí),int引腳無(wú)效。

          中斷引腳邏輯
          兩個(gè)寄存器位intlevel (參考下面的討論)和posint控制int引腳的工作方式。在設(shè)置ie = 1之前,應(yīng)先設(shè)置這兩個(gè)配置位。

          電平模式,intlevel = 1
          某些微控制器系統(tǒng)使用低電平有效中斷。采用這種配置時(shí),max3420e采用一個(gè)開(kāi)漏極晶體管驅(qū)動(dòng)int引腳至地。由于引腳只能驅(qū)動(dòng)為低電平,因此,需要在int引腳和邏輯電源之間接一個(gè)上拉電阻。該模式支持多個(gè)芯片的int引腳輸出(每個(gè)均為開(kāi)漏輸出)連接在一起,并使用單個(gè)上拉電阻。由于任何一個(gè)芯片輸出都可將該引腳拉低,因此這種邏輯有時(shí)也稱(chēng)為“線或”。對(duì)于這種類(lèi)型的系統(tǒng),設(shè)置intlevel = 1。

          邊沿模式,intlevel = 0 (缺省值)
          max3420e int引腳也可以驅(qū)動(dòng)邊沿有效的中斷系統(tǒng),此時(shí)微控制器在其中斷輸入引腳上檢查0-1或者1-0跳變。這是max3420e的缺省模式,intlevel = 0。spi主控制器通過(guò)第二個(gè)posint位設(shè)置邊沿極性。當(dāng)posint = 1時(shí),max3420e為懸掛中斷輸出一個(gè)0-1跳變。當(dāng)posint = 0 (缺省值)時(shí),max3420e為懸掛中斷輸出一個(gè)1-0跳變。

          在圖1中,請(qǐng)注意以下幾方面:

          如果一個(gè)irq位置位,而其對(duì)應(yīng)的ien位清零,則irq不會(huì)影響int輸出引腳。但是,中斷仍處于懸掛狀態(tài)。永遠(yuǎn)可以讀取irq位以獲得其狀態(tài),可向?qū)?yīng)的寄存器位寫(xiě)1,將irq位清零。
          懸掛中斷(irq位是1)的ien位出現(xiàn)0-1跳變時(shí)將產(chǎn)生中斷
          int引腳可連接至微控制器的中斷系統(tǒng)。此外,微控制器可以輪詢(xún)int引腳,以確定max3420e是否有中斷處于懸掛狀態(tài)。最適合輪詢(xún)的模式是電平模式(intlevel = 1),這是因?yàn)樵谶呇啬J街?,int引腳輸出的脈沖可能太窄,微控制器無(wú)法探測(cè)到(參考下面的討論)。請(qǐng)注意,電平模式需要在int引腳和vl之間連接一個(gè)上拉電阻。
          int引腳波形
          電平模式

          圖4所示為電平模式下的max3420e int引腳波形。int引腳靜態(tài)為高電平(上拉至vl)。假設(shè)圖中兩個(gè)中斷的ien位置為1,全局ie位置為1,那么將出現(xiàn)以下事件。(下面標(biāo)有字母的條目對(duì)應(yīng)圖4中相同字母標(biāo)出的事件。)


          發(fā)生一個(gè)中斷請(qǐng)求,使max3420e int引腳置低。

          注意:盡管max3420e中斷輸出引腳被稱(chēng)為int引腳,它有時(shí)也是負(fù)極性(例如在電平模式下)。

          spi主控制器完成中斷服務(wù)后,向irq位寫(xiě)入1,將其清零。int引腳返回至靜態(tài)高電平。(a)和(b)之間的間隔是中斷置位其irq位和spi主控制器清除irq位之間的時(shí)間。
          產(chǎn)生另一個(gè)中斷請(qǐng)求,將int引腳拉低。
          當(dāng)?shù)谝粋€(gè)中斷請(qǐng)求處于懸掛狀態(tài)時(shí),產(chǎn)生了第二個(gè)中斷請(qǐng)求。int電平?jīng)]有變化,因?yàn)橹辽儆幸粋€(gè)中斷處于懸掛狀態(tài)。(實(shí)際上,此刻有兩個(gè)中斷處于懸掛狀態(tài)。)
          spi主控制器完成一個(gè)中斷服務(wù)后,向irq位寫(xiě)入1,將其清零。由于仍有一個(gè)中斷處于懸掛狀態(tài),int引腳保持低電平。
          spi主控制器處理完剩下的中斷請(qǐng)求,向irq位寫(xiě)入1,將其清零。沒(méi)有中斷處于懸掛狀態(tài),因此int引腳返回至靜態(tài)高電平。

          注意:如果一個(gè)中斷的irq觸發(fā)器(圖1)置位,則認(rèn)為該中斷處于懸掛狀態(tài)。
          這種邏輯可以很好地處理int引腳輪詢(xún)。如果max3420e的任何部分需要服務(wù),并且其中斷已被使能,那么int引腳變?yōu)榈碗娖健T谖⒖刂破髑宄詈笠粋€(gè)懸掛irq位之前,int引腳一直保持低電平。

          邊沿模式

          圖5所示為兩種極性邊沿模式下的max3420e int引腳波形,極性由posint位控制。波形與電平模式的相似,但有兩處不同。在兩種條件下,int引腳產(chǎn)生邊沿跳變:

          一個(gè)irq位變?yōu)橛行顟B(tài)(其irq觸發(fā)器產(chǎn)生0-1跳變)。
          處理器清除一個(gè)irq位(向其寫(xiě)入1),其他irq處于懸掛狀態(tài)。
          第二個(gè)條件確保還有中斷需要服務(wù)時(shí)處理器能夠檢測(cè)到邊沿跳變。
          除了產(chǎn)生邊沿跳變外,與電平模式一樣,int引腳也具有有效和無(wú)效狀態(tài)。int引腳的無(wú)效狀態(tài)取決于posint位設(shè)置的邊沿極性。在這點(diǎn)上,邊沿模式與電平模式相似,查看int引腳的狀態(tài)就可以知道是否有中斷處于懸掛狀態(tài):

          在負(fù)極性邊沿模式下,如果沒(méi)有懸掛中斷,int引腳為高電平;如果有懸掛中斷,則為低電平。
          在正極性邊沿模式下,如果沒(méi)有懸掛中斷,int引腳為低電平;如果有懸掛中斷,則為高電平。
          以下說(shuō)明解釋了int引腳的有效和無(wú)效狀態(tài)。有效狀態(tài)意味著至少有一個(gè)中斷處于懸掛狀態(tài);無(wú)效狀態(tài)是指沒(méi)有中斷處于懸掛狀態(tài)。假設(shè)中斷已被使能,將出現(xiàn)以下事件。(下面標(biāo)有字母的條目對(duì)應(yīng)圖5中相同字母標(biāo)出的事件。)
          產(chǎn)生一個(gè)中斷請(qǐng)求時(shí),max3420e int引腳出現(xiàn)一個(gè)邊沿跳變。邊沿的極性取決于posint位的設(shè)置。由于中斷仍處于懸掛狀態(tài),int引腳保持其有效狀態(tài)。
          spi主控制器完成中斷服務(wù)后,向irq位寫(xiě)入1,將其清零。max3420e int引腳返回至無(wú)效狀態(tài)。圖中(a)和(b)之間的間隔(1)是產(chǎn)生中斷和spi主控制器清除irq位之間的時(shí)間。
          產(chǎn)生另一個(gè)中斷請(qǐng)求時(shí),max3420e int引腳產(chǎn)生一個(gè)邊沿跳變,并保持其有效狀態(tài)。
          當(dāng)?shù)谝粋€(gè)中斷請(qǐng)求處于懸掛狀態(tài)時(shí),又產(chǎn)生了第二個(gè)中斷請(qǐng)求。max3420e int引腳必須產(chǎn)生另一個(gè)邊沿跳變,因此該引腳在無(wú)效和有效狀態(tài)之間產(chǎn)生跳變脈沖,從而提供正確的邊沿極性。在max3420e中,該脈沖的寬度固定為10.67μs。由于還有中斷處于懸掛狀態(tài),int引腳保持在有效狀態(tài)。
          spi主控制器完成一個(gè)懸掛中斷服務(wù)后,向其irq位寫(xiě)入1,將其清除。與第(d)步一樣,int引腳產(chǎn)生另一個(gè)邊沿跳變。
          spi主控制器處理完剩下的中斷請(qǐng)求,向其irq位寫(xiě)入1,將其清除。沒(méi)有中斷處于懸掛狀態(tài),因此,int引腳返回至無(wú)效狀態(tài)。
          中斷寄存器
          表1. 陰影部分的max3420e寄存器位控制中斷系統(tǒng)

          max3420e具有兩類(lèi)usb中斷,由表1中陰影部分的寄存器控制。中斷位分為兩類(lèi):位于epirq (r11)和epien (r12)寄存器的端點(diǎn)控制,以及位于usbirq (r13)和usbien (r14)寄存器的usb控制。全局ie位在cpuctl寄存器中。

          表2. 14個(gè)max3420e中斷源


          表2說(shuō)明了14個(gè)中斷控制位,maxq3420e內(nèi)部邏輯何時(shí)對(duì)它們進(jìn)行置位,以及spi主控制器怎樣清除它們。


          中斷請(qǐng)求位
          bav位
          三個(gè)緩沖區(qū)就緒(bav) irq位指示spi主控制器可以裝入一個(gè)in端點(diǎn)fifo。芯片復(fù)位或者in數(shù)據(jù)由端點(diǎn)緩沖區(qū)成功地發(fā)送給主機(jī)后,max3420e置位這些irq位。該irq通知spi主控制器緩沖區(qū)可以裝入新數(shù)據(jù)。

          圖6所示為in傳輸?shù)目偩€過(guò)程,主機(jī)從max3420e申請(qǐng)數(shù)據(jù)。在數(shù)據(jù)包7145到達(dá)前,spi主控制器先將字節(jié)00 00 08裝入端點(diǎn)3-in fifo (ep3infifo)。然后,spi主控制器將數(shù)值3寫(xiě)入ep3inbc (端點(diǎn)3 in字節(jié)計(jì)數(shù))寄存器。寫(xiě)入字節(jié)計(jì)數(shù)寄存器,可完成以下三項(xiàng)功能:

          通知max3420e當(dāng)in請(qǐng)求到達(dá)時(shí)有多少字節(jié)要發(fā)送。
          使端點(diǎn)為傳輸數(shù)據(jù)做好準(zhǔn)備(而不是非應(yīng)答)。
          清除ep3inbav irq位。
          max3420e以數(shù)據(jù)包7146響應(yīng)以端點(diǎn)3為地址的in數(shù)據(jù)包。主機(jī)發(fā)送應(yīng)答(ack)數(shù)據(jù)包7147,響應(yīng)接收到的無(wú)誤碼數(shù)據(jù)。當(dāng)max3420e檢測(cè)到主機(jī)ack包后,設(shè)置ep3inbav中斷請(qǐng)求位,通知spi主控制器端點(diǎn)fifo可以裝入新數(shù)據(jù)。
          如果在spi主控制器準(zhǔn)備好端點(diǎn)之前到達(dá)in數(shù)據(jù)包,max3420e會(huì)響應(yīng)一個(gè)nak握手信號(hào)(圖7)。nak握手信號(hào)通知主機(jī)稍后重發(fā)in請(qǐng)求。

          如果在in數(shù)據(jù)傳輸至主機(jī)過(guò)程中出現(xiàn)誤碼,當(dāng)主機(jī)重發(fā)in請(qǐng)求時(shí),max3420e自動(dòng)重發(fā)數(shù)據(jù)(以及相同的數(shù)據(jù)觸發(fā)data0/data1)。只有接收到來(lái)自主機(jī)的ack握手信號(hào)后,max3420e才會(huì)置位端點(diǎn)的bav irq位,指示緩沖區(qū)準(zhǔn)備好接收新數(shù)據(jù)。

          重要提示:與所有的max3420e irq位一樣,也可以通過(guò)寫(xiě)入1來(lái)三個(gè)清除bav irq位。千萬(wàn)不要這樣做。相反,應(yīng)采用上面列出的方法:通過(guò)寫(xiě)入in端點(diǎn)的字節(jié)計(jì)數(shù)寄存器來(lái)清除bav irq位。這是因?yàn)閙ax3420e使用一個(gè)in端點(diǎn)的bav中斷請(qǐng)求位作為鎖定機(jī)制。該機(jī)制確保spi主控制器和max3420e的串行接口引擎(sie)不會(huì)同時(shí)使用端點(diǎn)緩沖區(qū)。例如,如果清除bav位,然后以?xún)蓷l單獨(dú)指令裝入字節(jié)計(jì)數(shù)器,那么當(dāng)您更新字節(jié)計(jì)數(shù)寄存器時(shí),可能開(kāi)始了數(shù)據(jù)包傳輸,從而導(dǎo)致數(shù)據(jù)出錯(cuò)。

          bav irq缺省值
          三個(gè)bav irq位(見(jiàn)表2 default列中的1)的缺省值為1。這表明,上電或者復(fù)位后spi主控制器將讀取到epirq = 0x19。如果任何一個(gè)對(duì)應(yīng)的ien位置位,int引腳將指示中斷處于懸掛狀態(tài)。

          雙緩沖端點(diǎn)ep2-in
          max3420e ep2-in端點(diǎn)為雙緩沖結(jié)構(gòu)。這表明它有兩組64字節(jié)fifo和字節(jié)計(jì)數(shù)寄存器。雙緩沖提高了傳輸帶寬,這是因?yàn)樵谘b入另一個(gè)數(shù)據(jù)包之前,spi主控制器不需要等待數(shù)據(jù)包傳輸至主機(jī)。采用雙緩沖結(jié)構(gòu),spi主控制器可以在一個(gè)in fifo向主機(jī)傳輸其in數(shù)據(jù)的同時(shí)裝入另一個(gè)in fifo。當(dāng)您裝載ep2inbc寄存器時(shí),兩個(gè)緩沖區(qū)“自動(dòng)輪換”。這將另一個(gè)fifo (第二組)和字節(jié)計(jì)數(shù)寄存器提供給spi主控制器使用。這種雙緩沖機(jī)制對(duì)固件來(lái)說(shuō)是透明的。

          雙緩沖機(jī)制使我們能夠觀察到的唯一影響出現(xiàn)在初始化過(guò)程中。上電或者芯片復(fù)位時(shí),in2bavirq位置位。一般情況下,初始化程序把數(shù)據(jù)裝入ep2in fifo,然后裝載ep2inbc寄存器,為傳輸做好準(zhǔn)備,同時(shí)清除了in2bavirq位。這樣做時(shí),您會(huì)很奇怪地發(fā)現(xiàn)max3420e立即重新置位in2bavirq位。這表明第二個(gè)緩沖區(qū)已經(jīng)準(zhǔn)備就緒,允許spi主控制器裝入第二個(gè)數(shù)據(jù)包。

          dav中斷請(qǐng)求位
          out端點(diǎn)的數(shù)據(jù)就緒(dav) irq位指示已經(jīng)從主機(jī)接收到了新數(shù)據(jù)。max3420e自動(dòng)處理總線重試操作,只有當(dāng)接收到的數(shù)據(jù)無(wú)誤碼時(shí),才會(huì)產(chǎn)生中斷請(qǐng)求。當(dāng)spi主控制器收到dav中斷請(qǐng)求時(shí),它將讀取端點(diǎn)字節(jié)計(jì)數(shù)寄存器,確定有效數(shù)據(jù)的大小。然后spi主控制器從端點(diǎn)的outfifo讀取相應(yīng)數(shù)目的字節(jié)。spi主控制器以向outdav irq位寫(xiě)入1的正常方式對(duì)其清零。這樣,使端點(diǎn)再次準(zhǔn)備好接收下一個(gè)out數(shù)據(jù)包。

          在圖8中,主機(jī)發(fā)送一個(gè)out pid和四個(gè)字節(jié)的數(shù)據(jù),max3420e將其傳送至ep1out fifo。當(dāng)max3420e驗(yàn)證傳送無(wú)誤碼后,將更新其ep1outbc寄存器,指示四個(gè)字節(jié),向主機(jī)發(fā)送ack包,并置位ep1outdav irq,通知spi主控制器可以提取端點(diǎn)1 fifo內(nèi)已經(jīng)準(zhǔn)備好的數(shù)據(jù)。

          雙緩沖端點(diǎn)ep1-out
          max3420e ep1-out端點(diǎn)為雙緩沖結(jié)構(gòu),這表明它具有兩組64字節(jié)fifo和字節(jié)計(jì)數(shù)寄存器。雙緩沖意味著spi主控制器對(duì)out1davirq清零后,如果有另一個(gè)主機(jī)數(shù)據(jù)包在等待,它可以立即重新置位。

          sudav中斷請(qǐng)求位
          當(dāng)主機(jī)向max3420e發(fā)送一個(gè)control傳輸時(shí),max3420e在一個(gè)8字節(jié)fifo中存儲(chǔ)8個(gè)setup字節(jié),spi主控制器可從sudfifo寄存器中讀取該數(shù)據(jù)。由于外設(shè)總是從該緩沖區(qū)中接收主機(jī)數(shù)據(jù),sudavirq的作用類(lèi)似一個(gè)out端點(diǎn)fifo,當(dāng)主機(jī)來(lái)的新數(shù)據(jù)接收完畢后,max3420e置位其sudav irq。一個(gè)setup數(shù)據(jù)包總是包含8個(gè)字節(jié),因此,setup數(shù)據(jù)不需要字節(jié)計(jì)數(shù)寄存器。

          oscok中斷請(qǐng)求位
          當(dāng)max3420e上電、芯片復(fù)位完畢、或者退出關(guān)電狀態(tài)時(shí),需要時(shí)間來(lái)啟動(dòng)內(nèi)部振蕩器和pll,以達(dá)到穩(wěn)定。振蕩器就緒(oscok) irq指示max3420e已經(jīng)準(zhǔn)備好工作。

          圖9所示為實(shí)例代碼,采用chipres寄存器位復(fù)位max3420e。由于芯片復(fù)位將停止內(nèi)部振蕩器工作,代碼設(shè)置chipres=0清除復(fù)位信號(hào)后,在使用max3420e之前應(yīng)該等待振蕩器穩(wěn)定下來(lái)。

          rwudn中斷請(qǐng)求位
          處于掛起狀態(tài)時(shí),usb外設(shè)可以發(fā)出遠(yuǎn)程喚醒(rwu)信號(hào),通知主機(jī)恢復(fù)總線工作。usb規(guī)范定義了一個(gè)1ms至15ms k-state的遠(yuǎn)程喚醒信號(hào)。spi主控制器通過(guò)設(shè)置遠(yuǎn)程喚醒信號(hào)(sigrwu)位等于1,來(lái)觸發(fā)rwu信號(hào)。

          當(dāng)spi主控制器置位sigrwu位時(shí),max3420e等待5ms,驅(qū)動(dòng)k-state 10ms,然后置位遠(yuǎn)程喚醒完成中斷請(qǐng)求(rwudnirq)位。5ms延時(shí)保證符合另一usb要求:在外設(shè)發(fā)出恢復(fù)信號(hào)前,總線必須至少空閑(j-state) 5ms。

          圖10所示為發(fā)送遠(yuǎn)程喚醒的實(shí)例代碼。注意,max3420e實(shí)現(xiàn)信號(hào)定時(shí),完成后置位irq。max3420e對(duì)于所有的定時(shí)usb事件均這樣處理,完成時(shí)產(chǎn)生一個(gè)中斷,因此spi主控制器不需要定時(shí)控制信號(hào)間隔。

          圖10中的代碼置位sigrwu位,然后循環(huán)等待rwudnirq置位,以確定持續(xù)10ms信號(hào)時(shí)間。然后,spi主控制器設(shè)置sigrwu = 0,并清除irq位。一般地,在多任務(wù)spi主控制器中,應(yīng)響應(yīng)rwudnirq中斷請(qǐng)求,而不要浪費(fèi)時(shí)間直接檢查irq位。

          接收到rwudnitq中斷后的5ms內(nèi),spi主控制器應(yīng)關(guān)閉sigrwu位。如果沒(méi)有這樣做,max3420e將啟動(dòng)另一個(gè)10ms k-state,重復(fù)這一過(guò)程(等待5ms, 然后10ms k-state),直到sigrwu = 0。在rwu信號(hào)處理過(guò)程中設(shè)置sigrwu = 0,不會(huì)終止rwu信號(hào)。

          如果spi主控制器設(shè)置sigrwu = 1時(shí)max3420e正處于關(guān)電狀態(tài)(pwrdown = 1),那么max3420e會(huì)自動(dòng)重新啟動(dòng)振蕩器,等待其達(dá)到穩(wěn)定,然后開(kāi)始發(fā)送rwu信號(hào)。在這種情況下,spi主控制器不需要檢查oscok irq。

          busact中斷請(qǐng)求位
          當(dāng)max23420e探測(cè)到在usb數(shù)據(jù)包的開(kāi)始位置有sync模式時(shí),置位busact irq位。usb總線復(fù)位過(guò)程不是總線活動(dòng)狀態(tài),因此不會(huì)觸發(fā)busack中斷請(qǐng)求。

          ures和uresdn中斷請(qǐng)求位

          usb主機(jī)通過(guò)至少保持50ms的單端零(se0)狀態(tài)(d+和d-同時(shí)驅(qū)動(dòng)至低電平),來(lái)復(fù)位外設(shè)。探測(cè)到2.5μs的se0狀態(tài)后,max3420e置位usb復(fù)位irq (uresirq)。然后,當(dāng)主機(jī)完成復(fù)位后,max3420e置位usb復(fù)位完成irq (uresdnirq)。

          由于spi主控制器需要監(jiān)視usb總線復(fù)位事件,在總線復(fù)位期間,max3420e不會(huì)清除uresie、uresdnie或ie中斷使能位。但在總線復(fù)位期間它會(huì)清除epien和usbien寄存器中的所有其他中斷使能位。

          susp中斷請(qǐng)求位

          當(dāng)max3420e探測(cè)到總線停止工作3ms (持續(xù)j-state)后,它產(chǎn)生掛起中斷請(qǐng)求(suspirq)。如果使用max3420e的外設(shè)是由總線供電的,它必須進(jìn)入低功耗狀態(tài),以最大程度降低從vbus上吸收的電流。在這種情況下,spi主控制器應(yīng)關(guān)斷消耗功率的外設(shè),然后設(shè)置pwrdown = 1,使max3420e進(jìn)入低功耗模式。這樣一來(lái),max3420e振蕩器停止工作,并進(jìn)入最低功耗狀態(tài)。

          需要注意下面兩條編程提示:

          清除suspirq位不能阻止3ms后中斷重新產(chǎn)生。總線掛起時(shí),為避免產(chǎn)生重復(fù)的掛起中斷,在總線恢復(fù)工作之前,應(yīng)清除掛起ien位。

          內(nèi)部掛起定時(shí)器邏輯由max3420e的內(nèi)部振蕩器提供時(shí)鐘。因此,如果您將器件置為關(guān)斷模式(設(shè)置pwrdown = 1),然后試圖向suspirq位寫(xiě)入1來(lái)清除該位,max3420e將不會(huì)清除該位。max3420e離不開(kāi)現(xiàn)在已停止工作的內(nèi)部時(shí)鐘。

          vbus和novbus中斷請(qǐng)求位

          一個(gè)自供電外設(shè)可以探測(cè)自己是否插入usb接口,利用這些中斷進(jìn)行上電。內(nèi)部vbus比較器觸發(fā)這些中斷,它比較vbcomp引腳電壓和內(nèi)部基準(zhǔn)電壓。它們均為邊沿觸發(fā),當(dāng)vbus電壓(vbusirq)進(jìn)行供電或者停止供電(novbusirq)時(shí)置位。

          總線供電的外設(shè)不需要探測(cè)vbus,因?yàn)樗蓈bus供電。這樣,可以釋放vbcomp引腳,用作通用輸入。在這種應(yīng)用中,vbcomp引腳沒(méi)有內(nèi)部上拉電阻,因此,應(yīng)在vbcomp引腳和vl之間連接一個(gè)上拉電阻。


          編程提示
          清除ien位
          芯片復(fù)位
          芯片復(fù)位期間,所有ie位被清除。出現(xiàn)以下情況時(shí),芯片復(fù)位:
          vl電源為max3420e供電(上電復(fù)位)。
          max3420e res#引腳置低。
          spi主控制器設(shè)置chipres = 1。
          總線復(fù)位
          當(dāng)max3420e探測(cè)到一個(gè)usb總線復(fù)位(總線暫停3ms)后,除了三個(gè)ie位外,其他ie位全部清零。spi主控制器可能需要處理總線復(fù)位中斷,以監(jiān)視總線復(fù)位信號(hào)的狀態(tài)。因此,總線復(fù)位不會(huì)影響以下ie位:
          uresie
          uresdnie
          ie (全局中斷使能)
          由于usb總線復(fù)位清除大部分ie位,當(dāng)總線完成復(fù)位后,控制固件應(yīng)重新使能所需的中斷。
          清除bav和dav irq位
          請(qǐng)注意,dav irq位以正常的寫(xiě)1方式進(jìn)行清除。bav位(用于in端點(diǎn))的清除方式不同,采用的方法是寫(xiě)入字節(jié)計(jì)數(shù)寄存器。



          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();