新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MAX3420E中斷系統

        MAX3420E中斷系統

        ——
        作者: 時間:2007-01-26 來源:《Maxim公司》 收藏
        引言

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

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

        max3420e中斷邏輯
        圖1所示為max3420e中斷邏輯。陰影部分是可通過spi訪問的寄存器位。

        irq位
        每一個中斷源都有一個用于鎖存服務請求的觸發器。觸發器的輸出即為irq,它出現在max3420e寄存器中。irq位提供兩種功能:

        本文引用地址:http://www.104case.com/article/20822.htm

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

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

        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中,請注意以下幾方面:

        如果一個irq位置位,而其對應的ien位清零,則irq不會影響int輸出引腳。但是,中斷仍處于懸掛狀態。永遠可以讀取irq位以獲得其狀態,可向對應的寄存器位寫1,將irq位清零。
        懸掛中斷(irq位是1)的ien位出現0-1跳變時將產生中斷
        int引腳可連接至微控制器的中斷系統。此外,微控制器可以輪詢int引腳,以確定max3420e是否有中斷處于懸掛狀態。最適合輪詢的模式是電平模式(intlevel = 1),這是因為在邊沿模式中,int引腳輸出的脈沖可能太窄,微控制器無法探測到(參考下面的討論)。請注意,電平模式需要在int引腳和vl之間連接一個上拉電阻。
        int引腳波形
        電平模式

        圖4所示為電平模式下的max3420e int引腳波形。int引腳靜態為高電平(上拉至vl)。假設圖中兩個中斷的ien位置為1,全局ie位置為1,那么將出現以下事件。(下面標有字母的條目對應圖4中相同字母標出的事件。)


        發生一個中斷請求,使max3420e int引腳置低。

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

        spi主控制器完成中斷服務后,向irq位寫入1,將其清零。int引腳返回至靜態高電平。(a)和(b)之間的間隔是中斷置位其irq位和spi主控制器清除irq位之間的時間。
        產生另一個中斷請求,將int引腳拉低。
        當第一個中斷請求處于懸掛狀態時,產生了第二個中斷請求。int電平沒有變化,因為至少有一個中斷處于懸掛狀態。(實際上,此刻有兩個中斷處于懸掛狀態。)
        spi主控制器完成一個中斷服務后,向irq位寫入1,將其清零。由于仍有一個中斷處于懸掛狀態,int引腳保持低電平。
        spi主控制器處理完剩下的中斷請求,向irq位寫入1,將其清零。沒有中斷處于懸掛狀態,因此int引腳返回至靜態高電平。

        注意:如果一個中斷的irq觸發器(圖1)置位,則認為該中斷處于懸掛狀態。
        這種邏輯可以很好地處理int引腳輪詢。如果max3420e的任何部分需要服務,并且其中斷已被使能,那么int引腳變為低電平。在微控制器清除最后一個懸掛irq位之前,int引腳一直保持低電平。

        邊沿模式

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

        一個irq位變為有效狀態(其irq觸發器產生0-1跳變)。
        處理器清除一個irq位(向其寫入1),其他irq處于懸掛狀態。
        第二個條件確保還有中斷需要服務時處理器能夠檢測到邊沿跳變。
        除了產生邊沿跳變外,與電平模式一樣,int引腳也具有有效和無效狀態。int引腳的無效狀態取決于posint位設置的邊沿極性。在這點上,邊沿模式與電平模式相似,查看int引腳的狀態就可以知道是否有中斷處于懸掛狀態:

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

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

        表2. 14個max3420e中斷源


        表2說明了14個中斷控制位,maxq3420e內部邏輯何時對它們進行置位,以及spi主控制器怎樣清除它們。


        中斷請求位
        bav位
        三個緩沖區就緒(bav) irq位指示spi主控制器可以裝入一個in端點fifo。芯片復位或者in數據由端點緩沖區成功地發送給主機后,max3420e置位這些irq位。該irq通知spi主控制器緩沖區可以裝入新數據。

        圖6所示為in傳輸的總線過程,主機從max3420e申請數據。在數據包7145到達前,spi主控制器先將字節00 00 08裝入端點3-in fifo (ep3infifo)。然后,spi主控制器將數值3寫入ep3inbc (端點3 in字節計數)寄存器。寫入字節計數寄存器,可完成以下三項功能:

        通知max3420e當in請求到達時有多少字節要發送。
        使端點為傳輸數據做好準備(而不是非應答)。
        清除ep3inbav irq位。
        max3420e以數據包7146響應以端點3為地址的in數據包。主機發送應答(ack)數據包7147,響應接收到的無誤碼數據。當max3420e檢測到主機ack包后,設置ep3inbav中斷請求位,通知spi主控制器端點fifo可以裝入新數據。
        如果在spi主控制器準備好端點之前到達in數據包,max3420e會響應一個nak握手信號(圖7)。nak握手信號通知主機稍后重發in請求。

        如果在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內已經準備好的數據。

        雙緩沖端點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所示為實例代碼,采用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所示為發送遠程喚醒的實例代碼。注意,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位被清除。出現以下情況時,芯片復位:
        vl電源為max3420e供電(上電復位)。
        max3420e res#引腳置低。
        spi主控制器設置chipres = 1。
        總線復位
        當max3420e探測到一個usb總線復位(總線暫停3ms)后,除了三個ie位外,其他ie位全部清零。spi主控制器可能需要處理總線復位中斷,以監視總線復位信號的狀態。因此,總線復位不會影響以下ie位:
        uresie
        uresdnie
        ie (全局中斷使能)
        由于usb總線復位清除大部分ie位,當總線完成復位后,控制固件應重新使能所需的中斷。
        清除bav和dav irq位
        請注意,dav irq位以正常的寫1方式進行清除。bav位(用于in端點)的清除方式不同,采用的方法是寫入字節計數寄存器。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 永昌县| 汝城县| 曲周县| 绥江县| 英吉沙县| 自治县| 凉城县| 玉田县| 鄂伦春自治旗| 宁国市| 鹤壁市| 慈利县| 宜昌市| 深州市| 张家口市| 陈巴尔虎旗| 湘阴县| 婺源县| 莆田市| 阿城市| 上高县| 嫩江县| 同心县| 荔波县| 浦北县| 安徽省| 南投县| 宁陵县| 古浪县| 双牌县| 桃园市| 柘城县| 万山特区| 景泰县| 大城县| 芜湖市| 瑞昌市| 贵阳市| 子洲县| 敦煌市| 司法|