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