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中斷邏輯。SPI可訪問的寄存器位帶有陰影。
IRQ 位
每個中斷源都有一個觸發器來鎖存服務請求。該觸發器的輸出為IRQ,出現在MAX3420E寄存器中。IRQ 位有兩個屬性:
讀取 IRQ 位將返回 IRQ 觸發器的狀態。
將“1”寫入 IRQ 位會清除其 IRQ 觸發器,將“0”寫入 IRQ 位會保持觸發器不變。
可以隨時讀取的 IRQ 位反映了 IRQ 觸發器的狀態。在上面的 #2 之后,寫入 1 或 0 會清除選定的 IRQ 位,而無需讀取-修改-寫入周期。為了說明這一點,假設MAX3420E將IRQ位實現為簡單的寄存器位,其中寫入1設置位,寫入0清除位。現在我們要清除 USBIRQ 寄存器中的 URESIRQ 位。圖 2 顯示了執行此操作的代碼。
圖2.清除常規寄存器位需要RMW操作。
由于SPI主機通過寫入3420來清除MAX1E IRQ位,而0則保持其他寄存器位不變,因此SPI主機可以通過直接寫入位掩碼值來清除URESIRQ位。因此,圖 2 中的最后三個語句可以替換為圖 3 中的單個語句。
圖3.MAX3420E IRQ位通過單寄存器寫入清除。
IEN 位 MAX14E的3420個中斷中
的每一個都有一個相關的中斷ENable(IEN)位。IEN 位與 IRQ 觸發器輸出進行 AND 運算,以傳遞或阻止請求傳播到 INT 引腳(圖 1)。14 個 IRQ 觸發器被選通,然后通過 OR 組合在一起形成一個內部中斷請求信號,該信號傳遞到中斷引腳邏輯塊。
請注意,IRQ 位表示中斷的掛起狀態,而不考慮其 IEN 位的狀態。這使固件可以選擇在不觸發 INT 引腳的情況下檢查掛起的中斷。如果您的代碼需要檢查 IRQ 寄存器是否“無掛起”,一個簡單的解決方案是讀取 IRQ 和 IEN 寄存器,以及它們一起讀取,并檢查現在表示“掛起和已啟用的 IRQ”的位。零值表示所有已啟用的中斷均未掛起。
IE 位
SPI 主站啟用或禁用帶有 IE 位的 INT 引腳。這通常稱為全局中斷啟用,因為它會影響所有中斷。當 IE = 0 時,INT 引腳將變為非活動狀態,而與任何 IRQ 或 IEN 位的狀態無關。
中斷引腳邏輯
兩個寄存器位,INT電平(見下文討論)和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 位為 1),其 IEN 位進行 0-1 轉換會導致中斷
INT引腳可以連接到微控制器的中斷系統。或者,微控制器可以輪詢INT引腳,以確定是否有MAX3420E中斷處于掛起狀態。用于輪詢的最佳模式是電平模式(INTLEVEL = 1),因為在邊緣模式下,INT引腳可能會發出太窄的脈沖,微控制器無法看到(請參閱下面的討論)。請記住,電平模式需要一個從 INT 引腳到 V 的上拉電阻L.
國際引腳波形
水平模式
圖4.MAX3420E INT引腳在電平模式下的行為(INTLEVEL = 1)。
圖4所示為電平模式下MAX3420E INT引腳波形。INT 引腳的靜態狀態為高電平(上拉至 VL).假設圖中兩個中斷的 IEN 位設置為 1,全局 IE 位設置為 4,則會發生以下事件。(下面的字母項對應于圖 <> 中的字母事件。
中斷請求到達,導致MAX3420E INT引腳驅動低電平。
SPI 主機完成中斷服務,并通過向其寫入 1 來清除其 IRQ 位。INT 引腳返回到其高靜態狀態。(a) 和 (b) 之間的間隔是中斷置位其 IRQ 位和 SPI 主機清除 IRQ 位之間的時間。
另一個中斷請求到達,將 INT 引腳驅動為低電平。
當第一個中斷請求掛起時,第二個中斷請求到達。INT 級別不會更改,因為至少有一個中斷掛起。(實際上,目前有兩個待定。
SPI 主機完成對其中一個掛起中斷的處理,并通過向其寫入 1 來清除其 IRQ 位。INT 引腳保持低電平,因為一個中斷仍處于掛起狀態。
SPI 主機完成對剩余中斷請求的處理,并通過向其寫入 1 來清除其 IRQ 位。沒有掛起的中斷,因此 INT 引腳返回到其靜態高電平狀態。
注意:如果設置了中斷的IRQ觸發器(圖1),則認為中斷處于掛起狀態。
此邏輯非常適合輪詢 INT 引腳。如果MAX3420E中的任何內容需要維修,并且其中斷使能,則INT引腳為低電平。INT 引腳保持低電平,直到微控制器清除最后一個掛起的 IRQ 位。
邊緣模式
圖5.MAX3420E INT引腳在EDGE模式下的行為(INTLEVEL = 0)。間隔(1)是SPI主機清除IRQ所需的時間,間隔(2)為10.67μs。
圖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 主機完成中斷服務,并通過向其寫入 1 來清除其 IRQ 位。MAX3420E INT引腳返回非工作狀態。圖中(a)和(b)之間的間隔(1)是中斷置位和SPI主機清除IRQ位之間的時間。
另一個中斷請求到達,MAX3420E INT引腳提供邊沿并保持工作狀態。
當第一個中斷請求掛起時,第二個中斷到達。MAX3420E INT引腳必須提供另一個邊沿,因此它在非工作和工作狀態之間脈沖,以提供適當極性的邊沿。該脈沖的寬度固定在MAX10E中為67.3420μs。由于中斷處于掛起狀態,因此 INT 引腳保持活動狀態。
SPI 主機完成對其中一個掛起中斷的維護,并通過向其寫入 1 來清除其 IRQ 位。INT 引腳提供另一個邊沿,如步驟 (d) 所示。
SPI 主機完成對剩余中斷請求的處理,并通過向其寫入 1 來清除其 IRQ 位。沒有掛起的中斷,因此 INT 引腳返回到其非活動狀態。
中斷寄存器
表 1.陰影MAX3420E寄存器位控制中斷系統
MAX3420E具有兩組USB中斷,由表1中的陰影寄存器控制。中斷位分為EPIRQ (R11)和EPIEN (R12)中的端點控制,以及USBIRQ (R13)和USBIEN(R14)中的USB控制。全局 IE 位位于 CPUCTL 寄存器中。
位名 | 違約 | 位置 | 設置者 | 清除者 |
IN0BAVIRQ | 1 | EPIRQ.0 | EP0 先進先出可用于 μP 加載 | 加載 EP0BC 寄存器 |
OUT0DAVIRQ | 0 | EPIRQ.1 | EP0-OUT FIFO 具有主機數據 | 寫入 EPIRQ = 0x02 |
OUT1DAVIRQ | 0 | EPIRQ.2 | EP1-OUT FIFO 具有主機數據 | 寫入 EPIRQ = 0x04 |
IN2BAVIRQ | 1 | EPIRQ.3 | EP2-IN 先進先出可用于 μP 加載 | 加載 EP2INBC 寄存器 |
IN3BAVIRQ | 1 | EPIRQ.4 | EP3-IN 先進先出可用于 μP 加載 | 加載 EP3INBC 寄存器 |
SUDAVIRQ | 0 | EPIRQ.5 | 設置數據可在SUDFIFO中找到 | 寫入 EPIRQ = 0x20 |
OSCOKIRQ | 0 | USBIRQ.0 | MAX3420E振蕩器/PLL穩定 | 寫入 USBIRQ = 0x01 |
RWUDNIRQ | 0 | USBIRQ.1 | SIE 已完成 RWU 信號 | 寫入 USBIRQ = 0x02 |
BUSACTIRQ | 0 | USBIRQ.2 | 總線處于活動狀態 | 寫入 USBIRQ = 0x04 |
URESIRQ | 0 | USBIRQ.3 | 主機開始發出總線復位信號 | 寫入 USBIRQ = 0x08 |
SUSPIRQ | 0 | USBIRQ.4 | 主機暫停總線 | 寫入 USBIRQ = 0x10 |
NOVBUSIRQ | 0 | USBIRQ.5 | V總線比較器1-0過渡 | 寫入 USBIRQ = 0x20 |
VBUSIRQ | 0 | USBIRQ.6 | V總線比較器0-1過渡 | 寫入 USBIRQ = 0x40 |
URESDNIRQ | 0 | USBIRQ.7 | 主機完成信令總線復位 | 寫入 USBIRQ = 0x80 |
表2給出了14個中斷控制位,當MAXQ3420E內部邏輯設置它們時,以及SPI主機如何清除它們。
中斷請求位
BAV 位
三個緩沖器 AVailable (BAV) IRQ 位表示 IN 端點 FIFO 可供 SPI 主站加載。MAX3420E在芯片復位或IN數據從端點緩沖器成功發送到主機時置位這些IRQ位。此 IRQ 告訴 SPI 主站緩沖區已準備好接受新數據。
圖6.向終結點 3 發送 IN 請求的主機的總線跟蹤。
圖6為IN傳輸的總線走線,主機從MAX3420E請求數據。在數據包 7145 到達之前,SPI 主站將字節 00 00 08 加載到端點 3 IN FIFO (EP3INFIFO) 中。然后,SPI 主機寫入值為 3 的 EP3INBC(端點 3 IN 字節計數)寄存器。寫入字節計數寄存器可完成三件事:
當IN請求到達時,它告訴MAX3420E發送多少字節。
它使端點能夠傳輸數據(而不是 NAKing)。
它清除EP3INBAV IRQ位。
MAX3420E用數據包3應答發往終端7146的下一個IN數據包。主機通過發送 ACKnowledge (ACK) 數據包 7147 來確認無差錯地收到數據。當MAX3420E檢測到主機ACK數據包時,設置EP3INBAV中斷請求位,通知SPI主機終端FIFO可以加載新數據。
如果IN數據包在SPI主機布防終端之前到達,MAX3420E以NAK握手應答(圖7)。NAK 握手告知主機稍后重試 IN 請求。
圖7.如果MAX3420E尚未準備好發送數據,則發送NAK。
如果在向主機傳輸IN數據時出現錯誤,當主機重試IN請求時,MAX3420E自動重新發送數據(相同的數據切換DATA0/DATA1)。只有在收到主機的ACK握手后,MAX3420E才會置位終端的BAV IRQ位,以指示緩沖器已準備好接收新數據。
重要提示:
與所有MAX3420E IRQ位一樣,三個BAV IRQ位也可以通過寫入1來清除。
永遠不要這樣做。
相反,請使用上述方法:通過寫入 IN 端點的字節計數寄存器來清除 BAV IRQ 位。這是因為MAX3420E使用IN端點的BAV中斷請求位作為鎖定機制。這種機制確保SPI主機和MAX3420E的串行接口引擎(SIE)永遠不會同時嘗試使用端點緩沖器。例如,如果清除了 BAV 位,然后在兩個單獨的指令中加載字節計數,則在更新字節計數寄存器時可能會進行數據包傳輸,并且數據將損壞。
BAV IRQ 默認值
三個 BAV IRQ 位(在表 1 的默認列中顯示為 2)默認為 1s。這意味著SPI主機將在上電或復位后讀取EPIRQ = 0x19。如果設置了任何相應的 IEN 位,INT 引腳將指示中斷處于掛起狀態。
雙緩沖端點EP2輸入
MAX3420E EP2-IN端點為雙緩沖。這意味著它具有兩組 64 字節 FIFO 和字節計數寄存器。雙緩沖提高了傳輸帶寬,因為SPI主站不需要等待一個數據包傳輸到主機,然后再加載另一個數據包。通過雙緩沖,SPI主站可以在加載一個IN FIFO的同時加載另一個IN數據到主機。加載 EP2INBC 寄存器時,這兩個緩沖區會“乒乓球”。這將另一個FIFO(第二組)和字節數寄存器提供給SPI主機。此雙緩沖操作對固件是透明的。
雙緩沖唯一可觀察到的影響是在初始化時。IN2BAVIRQ 位在上電或芯片復位時置位。通常,您的初始化代碼將數據加載到 EP2IN FIFO 中,然后加載 EP2INBC 寄存器以布防傳輸并清除 IN2BAVIRQ 位。當你這樣做時,你可能會驚訝地發現MAX3420E立即重新確定IN2BAVIRQ位。這表示第二個緩沖器可供SPI主站加載。
DAV 中斷請求位 OUT 端點具有數據可復制 (DAV) IRQ 位
,以指示已從主機接收到新數據。MAX3420E自動處理總線重試,僅在接收到無差錯數據時才置位中斷請求。當SPI主站收到DAV中斷請求時,它會讀取端點的字節計數寄存器以確定數據有效負載大小。然后,SPI 主站從端點的 OUTFIFO 讀取該字節數。SPI 主機通過寫入 1 以正常方式清除 OUTDAV IRQ 位。這會重新設置端點以接收下一個 OUT 數據包。
在圖8中,主機發送一個OUT PID和3420字節數據,MAX1E將其傳輸到EP3420OUT FIFO。當MAX1E驗證傳輸無差錯時,更新其EP1OUTBC寄存器以指示四個字節,將ACK數據包發送回主機,并置位EP1OUTDAV IRQ,告訴SPI主站數據可在端點<> FIFO中檢索。
圖8.將 OUT 數據包發送到終結點 1 的主機的總線跟蹤。
雙緩沖端點EP1輸出
MAX3420E EP1輸出端為雙緩沖,這意味著它具有兩組64字節FIFOS和字節數寄存器。雙緩沖意味著,如果另一個主機數據包正在等待,OUT1DAVIRQ 可以在 SPI 主站清除它后立即重新置言。
SUDAV中斷請求位
當主機向MAX3420E發送控制傳輸時,MAX3420E將8個SETUP字節存儲在<>字節FIFO中,SPI主機從SUDFIFO寄存器讀取該字節。由于外設始終接受此緩沖區中的主機數據,因此 SUDAVIRQ 就像 OUT 端點 FIFO 一樣,當來自主機的新數據可用時,會斷言其 SUDAV IRQ。SETUP 數據包始終包含 <> 個字節,因此 SETUP 數據不需要字節計數寄存器。
OSCOK 中斷請求位 當MAX3420E上電、退出芯片復位
或退出掉電狀態時,內部振蕩器和PLL需要時間啟動和穩定。振蕩器OK OK (OSCOK) IRQ表示MAX3420E已準備好工作。
圖9.示例代碼復位MAX3420E并等待OSCOK后退出。
圖9是使用CHIPRES寄存器位復位MAX3420E的示例代碼。由于芯片復位停止內部振蕩器,代碼通過設置CHIPRES = 0去除復位信號后,應等待振蕩器穩定后再使用MAX3420E。
RWUDN 中斷請求位
當處于掛起狀態時,USB 外圍設備可能會發出遠程喚醒 (RWU) 信號,以告知主機恢復總線活動。USB 規范將遠程喚醒信號定義為 1ms 至 15ms K 狀態。SPI 主機通過將 SIGnal 遠程喚醒 (SIGRWU) 位設置為 1 來啟動 RWU 信令。
當SPI主機設置SIGRWU位時,MAX3420E等待5ms,驅動K狀態10ms,然后置位遠程喚醒DoNe中斷請求(RWUDNIRQ)位。5ms 延遲可確保滿足另一個 USB 要求:總線必須空閑(J 狀態)至少 5ms,然后外設才會啟動恢復信令。
圖 10.發出遠程喚醒信號的示例代碼。
圖 10 顯示了發出遠程喚醒信號的示例代碼。注意,MAX3420E對信號進行倍增,并在完成后置位IRQ。MAX3420E對所有定時USB事件執行此操作,完成后提供中斷,因此SPI主機無需定時信號間隔。
圖10中的代碼設置SIGRWU位,然后在RWUDNIRQ位上循環,以確定10ms信號何時經過。然后,它將SIGRWU = 0設置為<>并清除IRQ位。當然,在多任務SPI主站中,您將響應RWUDNIRQ中斷請求,而不是浪費時間直接檢查IRQ位。
SPI主機應在收到RWUDNITQ中斷后5ms內關閉SIGRWU位。否則,MAX3420E啟動另一個10ms K狀態,并重復該序列(等待5ms、10ms、K狀態),直到SIGRWU = 0。在 RWU 信令進行時設置 SIGRWU = 0 不會終止 RWU 信令。
當SPI主機設置SIGRWU = 3420時,如果MAX1E處于關斷狀態(PWRDOWN = 1),MAX3420E自動重啟振蕩器并等待振蕩器穩定后再啟動RWU信號。在這種情況下,SPI 主站不需要檢查 OSCOK IRQ。
BUSACT 中斷請求位 MAX23420E在檢測到USB數據包開頭的SYNC碼型時設置BUSACT IRQ位
。USB 總線復位不被視為總線活動,因此不會激活 BUSACK 中斷請求。
URES 和 URESDN 中斷請求位
USB 主機通過驅動至少 50 毫秒的單端 zerO (SE0) 狀態(D+ 和 D- 驅動低電平)來重置外設。MAX3420E在檢測到2.5μs的SE0后,對USB RESet IRQ (URESIRQ)進行定位。然后,當主機完成復位信號時,它會斷言 USB RESet DoNe IRQ (URESDNIRQ)。
由于SPI主機需要監測USB總線復位事件,MAX3420E在總線復位期間不會清除URESIE、URESDNIE或IE中斷使能位。在總線復位期間,它會清除 EPIEN 和 USBIEN 寄存器中的所有其他中斷使能位。
SUSP中斷請求位
當MAX3420E檢測到總線不活動3ms(恒定J狀態)時,它觸發SUSPend中斷請求(SUSPIRQ)。如果使用MAX3420E的外設為總線供電,則必須進入低功耗狀態,以最小化從V吸收的電流。總線.在這種情況下,SPI主機通過關斷耗電外設,然后通過設置PWRDOWN = 3420將MAX1E置于低功耗模式。這將停止MAX3420E振蕩器,使MAX3420E進入最低功耗狀態。
值得一提的是兩個編程說明:
清除SUSPIRQ位不會阻止中斷在3ms后重新確認。為避免在總線掛起時重復掛起中斷,請清除掛起 IEN 位,直到總線恢復信令。
內部掛起定時器邏輯由MAX3420E的內部振蕩器計時。因此,如果關閉芯片(設置PWRDOWN = 1),然后嘗試通過寫入1來清除SUSPIRQ位,MAX3420E將不會清除該位。MAX3420E需要現已停止的內部時鐘。
VBUS 和 NOVBUS 中斷請求位
自供電外設可以檢測是否已插入USB并使用這些中斷供電。中斷由內部VBUS比較器激活,該比較器將VBComp引腳電壓與內部參考電壓進行比較。它們是邊緣敏感的,在施加VBUS電壓(VBUSIRQ)或去除VBUS電壓時斷言(NOVBUSIRQ)。
總線供電的外圍設備不需要檢測VBUS,因為它是由VBUS供電的。這將釋放VBComp引腳,以便用作通用輸入。在此應用中,VBComp引腳沒有內部拉電阻,因此應在VBComp針腳和VL之間連接拉電阻。
編程技巧
清除 IEN 位 芯片復位
在芯片復位期間清除所有 IE 位
。芯片復位定義為以下情況之一:
VLMAX3420E通電(上電復位)。
MAX3420E RES#引腳被驅動為低電平。
SPI 主站設置位 CHIPRES = 1。
總線復位 當MAX3420E檢測到USB總線復位(總線不活動3ms)時,除<>位外,所有IE位
均被清除。SPI主機可能需要接受與總線復位相關的中斷,以監視總線復位信號的狀態。因此,以下 IE 位不受總線重置的影響:
URESIE
URESDNIE
IE(全局中斷啟用)
由于 USB 總線復位會清除大部分 IE 位,因此應組織控制固件,以便在總線復位完成后重新啟用所需的中斷。
清除 BAV 和 DAV IRQ 位
請記住,DAV IRQ 位以正常方式清除,方法是將 1 寫入位。 BAV 位(用于 IN 端點)的清除方式不同,即通過寫入字節計數寄存器。
注意:即使認為MAX3420E中斷輸出引腳稱為INT引腳,它有時也可能具有負極性(例如電平模式)。
shenhbj:gt
-
微控制器
+關注
關注
48文章
7489瀏覽量
151047 -
電源
+關注
關注
184文章
17585瀏覽量
249487 -
usb
+關注
關注
60文章
7896瀏覽量
263986
發布評論請先 登錄
相關推薦
評論