新聞中心

        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之間,應先設置這兩個配置位。其操作如下:

        本文引用地址:http://www.104case.com/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位,然后以兩條單獨指令裝入字節計數器。那么當您更新字節計數寄存器時,可能已經開始了數據包傳輸,從而導致數據出錯。



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 海阳市| 马山县| 阆中市| 田林县| 饶河县| 高陵县| 万盛区| 新疆| 余干县| 大姚县| 东城区| 林西县| 逊克县| 赤壁市| 金川县| 察哈| 萝北县| 娄烦县| 酉阳| 亚东县| 普宁市| 漳平市| 溧水县| 古交市| 卓尼县| 迁西县| 江孜县| 定陶县| 金平| 琼海市| 盘锦市| 江孜县| 新民市| 保康县| 平凉市| 长春市| 黄浦区| 桦甸市| 德州市| 丰城市| 武汉市|