1292532 憶體内的資料,並且進一步將資料傳遞至ATA/ATAPI裝置18,•另 一方面,關於從ATA/ATAPI裝置18傳遞資料至主機n的動作, 首先’中央處理器12控制ATA/ATAPI主機控制器 裝置18取得欲傳輸的資料,並且將所取得的資料存入記憶體14 令。如業界所習知,ATA/ATAPI主機控制器16係為一經由中央處 理器12驅動的被動零件,此外,主機控制器16係根據ΑΤΑ/ΑΤΑρι 協定來與ATA/ATAPI裝置18進行溝通。 一般來說’ ATA/ATAPI協定係經由中央處理器I]所執行,其 程序如下所述。首先,巾央處理n 12藉由ATA/ATAPI主機控制 器16送出一指令至ATA/ATAPI裝置18,並等待從ata/ATAPI裝 置18送出的中斷請求(intemipt);檢測ΑΤΑ/ΑΤΑρι裝置18的狀 態丄啟動該指令所須的資料傳輸;檢測該指令的執行結果;以及 ,著繼續執行下-個指令。所以,上述的操作需要中央處理器12 多次的介入來完成資料傳輸的目的。 舉例來說,如果主機1丨發出一指令至ΑΤΑ/ΑΤΑρι裝置18, 主機11必須先檢測ATA/ATAPI錢18驗態,接賴由寫入一 1/〇暫存器來發出一指令至ATA/ATAPI裝置18。這些步驟都需要 成人的I/O週期(I/O Cycle)才能完成,而這些^期都會消 =時間’而I/O週期的操作時間皆受限於ata/atapi的規格。在 ^出扣令後,主機11需要等待ATA/ATAPI裝置18準備好傳輸 或接收賴,岭ATA/ATApi㈣18準備好以後,ata/atapi 1292532 % % 、裝置18會送出-中斷請求INTRQ來通知主機n可以開始傳輸資 料°對於主機11而言,中斷請求intRQ係為一輸入的中斷訊號、, 因此,主機11便需要處理該事件、檢測狀態以及接著開始資料傳 輸,而些步驟會一直地重複,直到所有的資料都傳輸完畢為止。 *-週邊裝置細應時陳長時,巾央處理器便會耗費相當多的 時間來等待魏邊裝置的回顧及檢職週邊裝置的狀態。 .在所有的資料都傳輸完畢以後,ΑΤΑ/ΑΤΑρι裝置18必須把該 指令已經處理完畢的訊息告知主機11,此外,主機11也必須再一 次地檢測狀態。以主機u所執行的多工系統(multi-tasksystem)為 例’主機11必須要切換正在處理中的複數個工作以處理多個事 件,並且等候許多I/O週期來檢測狀態以處理可能發生的錯誤;因 此,無論中央處理器12的運算速度有多快,被執行的ata/atapi 指令若越多,則中央處理器12就需要消耗越多的處理時間。 > 請參閱第2圖,第2圖為習知DMA資料傳輸的流程圖。如第 2圖所示,DMA資料傳輸包含有下列步驟: 步驟100:開始; 步驟102 :主機11讀取一狀態暫存器(statusregister)或是一備用狀 態暫存器(alternative status register),直到 BSY=0 以及 DRQ=0; 步驟104 :主機11將一適當的DEV位元寫入一 Device/Head暫存 器 ; 步驟106 :主機11讀取該狀態暫存器(statusregister)或是該備用狀 1292532
^ P t 、 態暫存器直到BSY=0以及DRQ=0 ; 步驟108 :主機11寫入需要的參數至一 Features暫存器、一 Seet(^ Count暫存器、一 CHS暫存器以及該Device/Head暫存器; 步驟110 :主機11初始化一 DMA通道(DMA channel); 步驟112 :主機11將一 ATA/ATAPI指令碼寫入一指令暫存器 (command register); 步驟114 : ATA/ATAPI裝置18設定BSY=1以及準備開始執行該 _ 指令碼; 步驟116 : ATA/ATAPI裝置18檢測是否有錯誤發生?如果有—個 錯誤發生,則執行步驟118 ;若則,執行步驟122; 步驟118 : ATA/ATAPI裝置18設定狀態位元(statusbit)以及錯 誤位元(error bit); 步驟120 : ATA/ATAPI裝置18檢測是否繼續資料傳輸?若資料傳 輸仍必須繼續,則執行步驟122 ;否則,執行步驟126; 步驟122:ATA/ATAPI裝置18發出一 DMARQ,並繼續資料傳輪; 1步驟以:ATA/ATAH裝置18檢測是否還有資料需要傳輸%果 還有賀料需要傳輸,則執行步驟130 ;否則,執行步驟Gy 步驟126 : ATA/ATAPI裝置18設定BSY=〇以及DRQ=〇,發出, INTRQ並收回DMARQ,接著執行步驟I%; 步驟128 :主機11重置該DMA通道,並且執行步驟132; 步驟130 ·· ΑΤΑ/ΑΤΑΠ裝置18繼續發出DRQ或是BSY,並且接 著執行步驟116;以及 步驟132 :結束。 1292532 首先,主機11需要檢測ATA/ATAPI裝置18的狀態(步驟 102),因此’主機11係輪詢(ρ〇ιι)該狀態暫存器中一忙碌位元(busy bit)BSY以及一資料請求位元(datarequestbit)DRQ;在此請注意, 該忙碌位元係為ATA/ATAPI裝置18中一控制電路(c〇ntr〇11〇gic) 所設定,用以指出現在ATA/ATAPI裝置18的狀態是否為一可存 取狀態,而該資料請求位元則用來指出ΑΓΛ/ATAPJ裝置18是否 e青求其與主機11之間的資料傳輸。因此,主機η必須不斷地等 φ 候直到BSY=0以及DRQ=0(步驟1〇4卜接著,主機η會於 Device/Head暫存器中寫入適當的DEV位元;在此請注意, Device/Head暫存器係用來紀錄進行任一磁碟存取操作所需之 ATA/ATAPI裝置的識別號碼(IDnumber)以及磁頭號碼(_ number)。在步驟104之後,主機U需要再次檢測ΑΤΑ/ΑΤΑρι裝 置18的狀態,因此,主機11會輪詢該狀態暫存器直到以 及DRQ=0(步驟1〇6)。接著,主機n寫入所需的參數至ΑΤΑ/ΑΤΑρι 裝置18中的暫存器以指出欲透過匯流排傳輸之資料區塊的數目 (步驟108)。假設電子系統1〇係處理一資料傳輸的指令(舉例來 說,資料傳輸係指一 DMA資料傳輸),因此,主機u會初始化一 DMA通道(步驟110)並且把該指令碼寫入指令暫存器驟叫,· 在步驟114之中,ATA/ATAPI裝置18會將BSY設定為丨,並且準 備開始執行主機11發出的指令碼。在此,如果有一個錯誤發生(步 驟116),則ATA/ATAPI裝置18便會設定狀態位元以及錯誤=元厂 狀態位元以及錯誤位元係包含有ΑΤΑ/ΑΤΑρι裝置18執行上一個 指令的狀態資訊(步驟II8)。在步驟118之後,如果仍需要繼續資 1292532 , ' * 料傳輸(步驟120),則ATA/ATAPI裝置18會發出一 DMARQ;在 此’ DMARQ係用來表示需要啟動DMA資料傳輸來傳輸資料(步 驟122);如果所有的資料還沒有傳輸完成(步驟124),則 ATA/ATAPI裝置18會持續發出BSY或是DRQ來維持目前的DMA 資料傳輸(步驟130),這表示ATA/ATAPI裝置18可以傳輸資料至 主機11或從主機Π獲得資料。此外,如果所有的資料都已經成 功地傳輸完畢(步驟124),則ATA/ATAPI裝置18會把BSY以及 馨 DRQ都重置為〇,並且發出至主機“,而如前所述, 係用來中斷主機11的執行。除此之外,ATA/ATAPI裝置18亦會 收回DMARQ(步驟126),因此,主機11便會重置該DMA通道(步 驟128)。最後,該指令碼若非被完整地執行,其便是於執行中被 中止(步驟132)。 清參閱第3圖,第3圖為習知非資料(ηοη_(^&)傳輸或是pj〇 資料傳輸的流程圖。如第3圖所示,PIO資料傳輸包含有以下步 ® 驟: 步驟200 :開始; 步驟202 :主機11讀取一狀態暫存器或是一備用狀態暫存器,直 到 BSY=〇 以及 DRQ=0 ; 步驟204:主機11把適當的DEV位元寫入一 Device/Head暫存器; 步驟206 :主機11讀取該狀態暫存器或是該備用狀態暫存器,直 到 BSY=0 以及 DRQ=0 ; 步驟208:主機11寫入需要的參數至Features暫存器,Sector Count 1292532
^ I i 暫存器,CHS暫存器以及Drive/Head暫存器; 步驟210 :主機11寫入一指令碼至一指令暫存器; 步驟212 : ATA/ATAPI裝置18設定BSY=1以及準備開始接收資 料; 步驟214 · ATA/ATAPI裝置18檢測是否有錯誤發生?若有一錯誤 發生,則執行步驟216 ;否則,執行步驟218; 步驟216 · ATA/ATAPI裝置18設定錯誤位元以及狀態位元,並且 | 依據需求來設定DRQ,接著執行步驟22〇;
步驟218 ·當ATA/ATAPI裝置18準備好接收資料後,ata/ATAPI 裝置18設定DRQ=1; 步驟 220 : ATA/ATAPI 裝置 18 設定 BSY=0; 步驟222 ·· ATA/ATAPI裝置18檢測DRQ是否為若DRQ=卜 貝1J執行步驟224 ;否則,執行步驟226; 步驟224 :主機11傳輸資料至ata/ATAPI裝置18; 步驟226 :主機11讀取雜態暫姑献該翻㈣暫存器; 步驟⑽:ΑΤΑ/ΑΓΑΗ裝置18檢測是否有一錯誤於資料傳輸前發 生?若有-錯誤發生’則執行步驟23〇;否則,執行步驟说; 步驟230 : ΑΤΑ/ΑΤΑΗ褒置18設定BSY=〇以及DRQ=〇,且發出 INTRQ,並接著執行步驟248; 步驟说:ΛΓΑ/ΑΓΑΗ裝置18設定咖小以及處理從主機η 所傳輸過來的資料; 步驟234 . ATA/ATAPI裝置ι8檢測是否有一錯誤在資料傳輸後發 生或是資料傳輸完成?若資料傳輸後有一錯誤發生或是資料 1292532 傳輸元成’則執行步驟236 ;否則,執行步驟238; 步驟236 · ATA/ATAPI裝置18設定BSY=〇且發出J]SJTRQ,以及 接著執行步驟248; 步驟238 · ATA/ATAPI裝置18設定BSY=〇以及DRQ=〇,並發出 INTRQ,以及接著執行步驟24〇; 步驟240 ·中斷機制疋否被啟動?若是,則執行步驟淡:否則, 執行步驟244; Φ 步驟242 :主機11等待一中斷,並且執行步驟246; 步驟244 ·主機π讀取該備用狀態暫存器,直到BSY=〇; 步驟246 ·主機11讀取且儲存該狀態暫存器的資料内容,接著執 行步驟212;以及 步驟248 :結束。 首先,步驟200至步驟210與第2圖所示的步驟1〇〇至步驟 no相同,為了簡化說明,故於此不另贅述。在步驟212之中, _ ATA/ATAPI裝置18設定BSY=1以及準備好開始接收資料,接著, ATA/ATAPI裝置18便檢測是否有一錯誤發生(步驟214);若有一 錯誤發生,則ATA/ATAH裝置18設定錯誤位元(eiT〇rbit)以及 狀態位元,並且依據需要來設定DRQ(步驟216),在此,drq係 用來指出ATA/ATAPI裝置需要繼續傳輸資料。另一方面,若 沒有錯誤發生,則ATA/ATAH裝置18於準備好接收資料時,其 會設定DRQ。接著,ΑΓΑ/ΑΤΑΗ裝置18設定BSY=〇(步驟22〇) 以及檢測是否DRQ哨步驟奶),其中若DRQ=1,則主機u會傳 12 1292532 輸資料至ΑΤΑ/ΑΤΑΡΙ裝置18(轉224),接著會讀倾狀態暫存 器或是該備用狀態暫存器(步驟226)。 若有一錯誤發生(步驟228),則ΑΤΑ/ΑΤΑΡΙ裝置18會設定 BSY=〇以及DRQ=〇,並且發出膽叫(步驟23〇);最後該非資 料傳輸或是該PIO資料傳輸便會因為發生錯誤而被終止(步驟 248)。此外,如果沒有錯誤發生(步驟228),則ΑΤΑ/ΑΤΑρι裝置 > 18會設定BSY=1,並且處理從主機u所傳遞過來的資料(步驟 232)。接著,如果有一錯誤發生或是資料傳輸已經完成(步驟, 則ATA/ATAPI裝置18會設定BSY=〇,並且輸出膽叫來通知主 機11(步驟夠。最後,該非資料傳輸或是該ρι〇資料傳輸就成功 地完成運作或因為錯誤而結束(步驟248);除此之外,如果沒有錯 誤發生或疋為料傳輸尚未完成(步驟234),則ATA/ATAPI裝置18 會設定BSY=0以及DRQ=卜並且輸出mTRQ來通知主機u(步 驟 238)。 如果電子系統10具有中斷機制’舉例來說,一中斷致能位元 (drive interrupt enable bit) nIEN 被設定為 〇 (步驟 24〇),則主機 ^ 會等待一中斷(在此該中斷可為取丁尺⑵丨步驟242),接著,當收到 INTRQ後’域11會讀取與儲存該狀態暫存㈣資料内容,以清 除ATA/ATAPI裝置18目前的中斷狀態(步驟m),並且回到步驟 212來傳輸後續資料;另一方面,如果電子系統1〇並沒有啟動中 斷機制_Ν叫(步驟240),則主機u便讀取該個狀態暫存器 13 1292532 直到BSY=〇,然後再讀取並儲存狀態暫存器的内容(步驟246),並 且該主機11會回到步驟212來傳輸後續資料。 如上所述,我們可以很明顯地看出,主機u本身需要處理整 個資料傳輸的流程,換句話說,在整個資料傳輸的流程之中,主 機11會經常被中斷,因此整體中央處理器的效能會因為不斷的工 作切換而大幅惡化。 習知技術揭露了很多方法來解決上述的問題。一個常見的做 法是增加一個額外的微控制器,來幫助一主機處理器(host processor)控制週邊裝置;換句話說,主機處理器會送出指令至微 控制器來控制週邊裝置。在此,雖然主機處理器無須再直接控制 週邊裝置,但是該微控制器可以視為一個處理器,換句話說,微 控制器仍然需要附加的軟體來控制週邊裝置,因此,這樣的方法 並不屬於硬體加速的方法。
I 此外,在Keith Balmer所揭露之美國公開專利Ν0· 2002/0065995中’其係使用一批次指令(batchcommand)。因此, 主機處理器可以將原先欲寫入至裝置暫存器的内容,寫入至 ATA/ATAPI主機控制器中的暫存器;接著,ΑΤΑ/ΑΤΑρι主機控制 器會將該内容從其暫存器寫入該週邊裝置上的暫存器;相同地, 原先欲從週邊裝置之暫存器讀取的内容也會被先寫入至該 ATA/ATAPI主機控制器,接者,ATA/ATAPI主機控制器會讀取該 1292532 内谷雖然此-方法可以確實地加快主機處理器存取裝置中暫存 器的速度仁疋對於整個ATA協定的力口速效果仍然相當有限。 除此之外,在TGny Goodfellow所揭露之美國專利Να 6275879 中/、揭路了衫子複製裝置暫存器(shadowing device register ) 的方法,換句話說,原先欲寫人—週邊裝置之暫存㈣資料會先 被儲存,並且被自動地轉送至相對應週邊裝置。此外,該週邊裝 參置的暫存器會被輪詢,並且該週邊裝置之暫存器的資料内容會影 子複製(shadow)至A1A/ATAPI主機控制器中。在此一方法之中, 雖然主機處理器不會受限於該週邊裝置的暫存器,但是相同地, 這方法也只加速了與該週邊裝置之暫存器有關的相對絲作,對 於整個ATA/ATAPI協定而言,整體的加速效果依然相當有限。 在Jams Arthur McDonald等人所揭露的美國專利N〇 642丨76〇 中,其揭露了一個完全由硬體實現的ΑΤΑ主機控制器來執行ATA 鲁協疋。該ΑΤΑ主機控制器可以支援以下的三個操作:(!)讀取並且 檢測該週邊裝置之狀態暫存器的内容;(2)連續寫入資料至週邊裝 置中8個暫存器;(3)初始化256字元的資料傳輸(256_worddata transfer)。在此一方法之中,該ATA主機控制器可以無須主機處 理器的幫忙,其可自行執行ΑΤΑ協定;但是,此一方法具有另外 一個嚴重的問題,亦即’因為該ΑΤΑ主機控制器完全以硬體來加 以實作’故該主機處理器並沒有辦法可改變該ΑΤΑ主機控制器的 操作程序,且該ΑΤΑ主機控制器只能用來控制一般的ΑΤΑ裝置。 15 I292532 換句話說,如果射成—ATAPi㈣,或是ATA裝 置/又有辦法與域7G全相容,貞彳這樣的ATA域控㈣就沒有辦 法適當地運作。 AT嫌TAPI主機接取標準(AT规ΤΑρι_ ad叩故standard) 定義了-做祕㈣松。根據該鮮,主要存在三個基本的 運作··⑴寫入-8>f立元的暫存器;(2)輪詢一狀態暫存器中的忙綠 位元(亦即BSY),以及⑶初始化一資料傳輸。當執行該ATA協 疋的時候’會先執行-連串寫入該週邊裝置之暫存器的動作,此 外,在寫人該週邊裝置之暫存器之前,會絲詢該狀態暫存器中 該忙碌位元,接著,在完成寫入該週邊裝置之暫存器的動作完成 以後,便初始化該資料傳輸。在此一方法之中,其雖然比先前所 述之習知方法更具有操作彈性,並達成了自動執行協定的目的, 但是此一方法仍舊沒有辦法支援更複雜的協定。舉例來說,對於 一個需要傳輸好幾次資料的PI0指令,或是需要傳輸16位元指令 封包的ATAPI指令來說,此一方法便無法支援。 因此,對於前述的問題,我們需要一個更有彈性的系統以及 方法,能無須微處理器的介入便可自行地處理協定來控制並存取 ATA/ATAPI 裝置。 【發明内容】 因此本發明的主要目的之一在於提供一種自動執行 1292532 執行ΑΤΑ/ΑΤΑΡΙ指令,因此主機上中央處理器的負載就大大地減 輕了,換句話說,因為原本會影響中央處理器之運作的中斷數目 大幅度的降低,因此中央處理器便能夠具有更佳的效能。 【實施方式】 請參閱第4圖,第4圖為本發明電子系統20之一實施例的功 能方塊圖。類似於第1圖所示的電子系統1〇,本發明電子系統2〇 包含有一主機21以及一 ΑΤΑ/ΑΤΑΡΙ裝置28。主機21包含有一記 憶體24,一中央處理器(CPU)22,一 ΑΤΑ/ΑΤΑΡΙ主機控制器 (ATA/ATAPIhostcontroller) 26,以及一指令解譯器(command interpreter)30。記憶體24係用來儲存複數個指令集(command set) 以及資料;中央處理器(CPU)22係電連接至記憶體24 ,用來建立 該複數個指令集以及儲存該複數個指令集至記憶體24中; ΑΤΑ/ΑΤΑΡΙ主機控制器26係電連接至ΑΤΑ/ΑΤΑΡΙ裝置28(在此, ΑΤΑ/ΑΤΑΡΙ裝置28可為一光碟機或是一磁碟機),用來與 ΑΤΑ/ΑΤΑΡΙ裝置溝通。第1圖所示的主機丨丨與第4圖所示的主機 21之間主要是差別在於:電子系統2〇包含有指令解譯器3〇,其 係電連接至中央處理器22,記憶體24以及ΑΤΑ/ΑΤΑΡΙ主機控制 器26 ,用來根據所執行的指令集,從記憶體%中取得所須的資 料、傳輸所須的資料至ΑΤΑ/ΑΤΑΡΙ主機控制器26以及與 ΑΤΑ/ΑΤΑΡΙ主機控制器26溝通。在此請注意,ΑΤΑ/ΑΤΑρι主機控 制器26可以支援複數個ΑΤΑ/ΑΤΑρι農置28,也就是說,在本實 施例中,ΑΤΑ/ΑΤΑΡΙ裝置28的數目健只用以說明,而非本發明 1292532 ' > 的限制條件。除此之外,ΑΤΑ/ΑΤΑΡΙ主機控制器26係可以直接地 存取記憶體24。 在本實施例之中,指令解譯器30可視為中央處理器22的代 理者’用來代為控制ΑΤΑ/ΑΤΑΡΙ主機控制器26與ΑΤΑ/ΑΤΑΡΙ裝 .置28之間的資料處理,也就是說,指令解譯器30可以幫助中央 處理器22驅動ΑΤΑΜΤΑΗ主機控制器26,例如,處理ΑΤΑ/ΑΤΑρι • 裝置28所發出的1NTRQ、從記憶體24載入該指令集以及處理該 指令集中的指令碼。因此,在資料傳輸的過程中,主機21上的中 央處理器22只需要處理指令解譯器30所發出的回應(resp〇nse), 而不需要直接處理所有從ΑΤΑ/ΑΤΑΡΙ裝置28發出的回應。舉例 來說’當許多資料區塊必須要在主機^以及ΑΤΑ/ΑΤΑρι裝置Μ 之間被傳輸的時候’ ΑΤΑ/ΑΤΑΡΙ裝置28在每次準備好接收對應 ΑΤΑ/ΑΤΑΡΙ指令的資料時’其會發出wtrq來通知主機η,但 是林實酬0,ΑΤΑ/ΑΤΑΗ裝置28實際上齡触指令解譯 器30 ’而不是通知中央處理器22,也就是說,指令解譯器刈會 處理該INTRQ並且執行該指令集的下一個指令碼,此和指令9解 譯器30只會於該齡集完全地被執行時或是有錯誤發生時通知中 央處理器22有關資料傳輸的狀態,因此,輸入至中央處理器Μ 的中斷數目便減少了,中央處理器22也因此可以擁有二的效能。 在此請注意,本實施例中,因為指令解譯器3〇可以有嗖率地 處理-部份中央處理器22的工作’所以中央處理器22係攸^ 1292532 體24設置複數個指令集而非複數個單一 ΑΤΑ/ΑΤΑρι指令,這使 得ATA/Atah指令可自動執行以達到更佳的資料傳輸效能^ 之外,這些指令集會以指令佇列(commandqueue)的方式進=處 理’換句話說,每-個指令赫包含有下—健令麵資訊以及 在記憶體24中相對應的位址。此外,在本實施例之中,每一個指 令集係由複數個指令碼組成,用來定義ΑΤΑ/ΑΤΑρι主機控制器% 的複數種運作,舉例來說,寫入資料至一裝置上的暫存器、輪猶 (P〇Umg)該裝置的暫存器或是檢測該裝置的暫存器等等。 請同時參閱第5圖以及第2、3圖,第5圖為本發明指令集中 心:碼的對照表。在此請注意,指令集係由第4圖所示的指令解 澤器30所執行,也就是說,指令解譯器30執行一指令集,而該 才曰7集包含有如第2圖或第3圖所示之流程中所須的所有指令 碼’舉例來說,—健令碼可㈣來支援第2圖或第3圖所示的 個步驟。指令解譯器30執行-,,檢測暫存器(check the register),, 才曰令碼來购ATA/ATAPI主機㈣ 26讀取—㈣暫存器的内 容,接著會比較助容以及-特定遮罩。另一方面,#指令解譯 器30想要驅動ΑΤΑ/ΑΤΑρι主機控制器%來寫入參數至一指令暫 子器(二驟112),會執行一”寫入暫存器(呢加也以咕伽),,指令 碼。當ΑΤΑ/ΑΤΑΡΙ主機控制器26初始化ΑΤΑ/ΑΤΑρι主機控制器 26以及ΑΤΑ/ΑΤΑρι震置烈之間的資料傳輸,指令解譯器邓會先 執行σ又疋位元組數目(set byte count),,指令碼來驅動 ata/atapi主機控制器2ό設定儲存裝置以及週邊裝置之間每一次 20 1292532 資料傳輸所對應的資料量週邊。在此請注意,在ΑΤΑ中的 PIO/DMA 指令協定(ΠΟ/DMA command protocol)下,每次資料 傳輸的資料量係為主機21所設定,因此,指令解譯器30便無須 執行一”載入位元組數目(load byte count)”指令碼來得知前述之每 一次資料傳輸所對應的資料量;但是在PACKET指令協定 (PACKET command protocol ),亦即 ATAPI 協定之中,因為每— 次資料傳輸所對應的資料量係由ATA/ATAPI裝置28所設定,所 _ 以指令解譯器30便必須在開始傳輸前執行該,,載入位元組數目,,指 令碼來偵測每次資料傳輸的傳輸量。接著,指令解譯器3〇會執行 一開始資料傳輸(data transfer go),,指令碼來驅動ATA/ATAPI 主機控制器26開始傳輸資料至ATA/ATAPI裝置28。在此請注意, 才曰令解澤器30另提供了一個硬體計時器(hardware timer),並且 指令解譯器30可以在執行其他指令碼之前,先執行一,,載入計時 器(loadtimer)”指令碼來防止後續指令碼(包含”開始資料傳輸” 鲁 扎令碼)的操作停滯’此外,中央處理器22也可以建置一個軟體計 時器(softwaretimer)來計時指令碼的執行,以及在該軟體計時器 逾時(timeout)後停止執行指令解譯器3〇的運作。 在ATA/ATAPI裝置28開始處理指令之後,以及一個錯誤(譬 如於資料傳輸時所產生的CRC錯誤)發生時,ATA/ATAPI裝置28 不但會設定狀態位元以及錯誤位元,其也同時會發出一個取丁以卩 來通知主機21。在本實施例之中,在指令解譯器3〇接收到 ATA/ATAPI裝置28經由ATA/ATAPI主機控制器26而發出的 21 1292532 • # INTRQ之後,本發明指令解譯器3〇會決定該wtrq是否要傳遞 到中央處理器22,換句話說,如果指令解譯器3〇決定傳遞 來通知中央處理器22有錯誤發生,則中央處理器22會啟動一個 中斷服務程序(interrupt service routine,ISR)來處理該 INTRQ, 且其另會決定該資料傳輸是否需要停止執行。然而,如果指令解 #器30決定不傳遞該inTRq至中央處理器22,則中央處理器22 就不會因為該INTRQ而被情,且齡碼賴雜序會接著處理 • 該。總結來說,指令解譯器30可以根據設計的需求,來決 定是否要傳遞接收到的INTRQ至中央處理器22。 在才曰々集的最後’有一”指令結束(e〇mman(jen(j),,指令碼,其 係用來通知指令解譯器30該指令集已成功地被執行,而若有告知 的需要,則指令解譯器30會通知主機處理器該指令集已經完全地 處理完畢,以及若還有其他待執行的指令集,則指令解譯器30會 繼續執行下一個指令集。 睛參閱第6圖以及第7圖,第6圖以及第7圖為第4圖所示 之指令解譯H 3G的運作流糊。如第6圖以及第7圖所示,為了 簡化起見,指令解譯器30所執行的指令集僅僅只包含幾個指令 碼’譬如’’檢測資料大小(eheck data size),,指令碼,,,寫入暫存器 (write the register)” 指令碼,”檢測暫存器(ehecktheregister),,指令 碼,載入位元組數目(l〇acj byte count)”指令碼,”設定位元組數目 (setbytecount)’’指令碼,”載入計時s(1〇adtimer)”指令碼,,,跳出 22 1292532 * · (jump),,指令碼,以及,,指令結束(c〇mmandend)”指令碼。然而, 睛注意’於一指令集之中’本發明並沒有限制指令碼的數量。指 令解譯器30的運作包含有下列步驟: 步驟300 :開始; 步驟302:檢測記憶體24中-指令仵列是否是空的(empty) ?如 絲齡制是帥,職行步驟3彳2;細,執行步驟3〇4; 步驟304 :取得一指令集; . 步驟306 :從該指令集中取得一指令碼; 步驟308 ·•執行該指令碼; 步驟309 ·檢測該指令碼是否係為,,檢測資料大小⑽㈣” 指令碼?若是,則執行步驟31〇 ;否則,執行步驟312; 步驟310 ··檢測剩餘的資料大小是否符合一預定狀況,· 步驟311 :剩餘的資料大小是否無法符合該預定狀況?若是,則執 行步驟340;否則,執行步驟336; •步驟312 ··檢測該指令碼是否係為,,寫入暫存器㈣把⑽咖㈣ 才曰7碼?若疋,則執行步驟313;否則,執行步驟316; 步驟313 ··寫入資訊至ΑΤΑ/ΑΤΑρι裝置28中一暫存器; v驟314 ·寫入暫存器(wmethe register),,指令碼是否執行失敗? 若疋,則執行步驟340 ;否則,執行步驟336; 步驟3^檢測該指令碼是否係為,,檢測暫存器咖咖eregister)” 指令瑪?若是,則執行步驟32〇;否則,執行步驟322; 步驟318 :檢測ΑΤΑ/ΑΤΑρι裝置28的狀態; 乂驟0檢測暫存器(check the register)”指令碼是否執行失敗 23 1292532 • · ’ 若是,則執行步驟340 ;否則,執行步驟336; 步驟322 :檢測該指令碼是否係為”開始資料傳輸(datatransfer go)”指令碼?若是’則執行步驟324;否則,執行步驟328; 步驟324 :開始資料傳輸; 步驟326 · ”開始資料傳輸”指令碼是否執行失敗?若是,則執行步 驟340 ;否則,執行步驟336; 步驟328 ··檢測該指令碼是否係為,,載入計時器(1〇adtimer)”指令 • 碼?若是,則執行步驟33〇;否則,執行步驟334; 步驟330 :啟動一計時器; 步驟332 : 載入計時器(1〇adtimer)”指令碼是否執行失敗?若是, 則執行步驟340 ;否則,執行步驟336; 步驟334 :檢測該指令碼是否係為,,跳出伽叫),,指令碼?若是, 則執行步驟336;否則,執行步驟338; v驟336 ·獲彳于下一個指令碼的記憶體位址,接著回到步驟 • 步驟338 :檢測該指令碼是否係為,,指令集結束(endofcommand set)”齡碼?若是,職行步驟356;否則,執行步驟祝; 乂驟340 ·停止執行該指令集,並接著執行步驟 步驟342 :結束; 步驟344 :檢測該指令碼是否係為”載入位元組數目(_㈣e count)”指令碼?若是,則執行步驟346;否則,執行步驟 350; 步驟346 ·藉由讀取週雜置的暫存^來制資料傳輸量的大小; 步驟3你· ”載入位元組數目”指令碼是否執行失敗?若是,則執行 24 1292532 步驟340 ;否則,執行步驟336; 步驟350:檢測該指令碼衫係為,,設定位元組數目㈣_⑶㈣” 指令碼?若是,則執行步驟352;否則,執行步驟338; 步驟352 :藉由該指令碼來得到資料傳輸量的大小; 步驟354:,’設定位元組數目(set _ c〇轉,指令碼是否執行失敗? 若是’則執行步驟340 ;否則,執行步驟336; 步驟356 :通知主機上的處理器該指令集已經執行完畢,接著回到 步驟302 ;以及 步驟358 :沒有動作(no operati〇n),並回到步驟说。 首先,巾央處理器22會建立複數個指令#,並且將該複數個 指令集以-指令仔列的方式儲存於記憶體24之中,接著,中央處 理器22控制指令解譯器30開始存取該指令仲列(步驟3〇〇)。指令 解譯器30檢測該指令仔列是否是空的(步驟3〇2),如果該指令佇 列疋空的’ 14代表原本儲存在該指令仔列中的所有指令集已經執 行完畢,換句話說,指令解譯器3〇已經完成處理中央處理器22 所分配騎有指令集(步驟342)。然而,如果該指令仔列不是空的, 指令解譯器30會從記憶體24中讀取該指令仔列,並且以,,先進先 出(firstinfirstout),,的方式载入一指令集(步驟3〇4);此外,指 々解澤器3〇會從載入的指令集中取得一指令碼(步驟3〇6)。 接著’才曰令解譯器30會決定該指令碼係為哪一種指令碼,因 此指令解雜3G會檢繼指令竭是轉,檢測資料大小,,指令碼 25 1292532 (步驟309),’,寫入暫存哭,,指今碼(牛 3仔^ ί日7碼(步驟312),,,檢測暫存器,,指令 ^(#^316),(^^322) . 才"馬(y驟328) ’載入位元組數目,,指令碼(步驟料4),”設定 位元組數目,,指令碼(步驟350),,,指令集結束,,指令碼(步驟 338) 334) 〇 為檢測:貝料大小指令碼(步驟3〇9),則指令解譯器別係控制 AT肅API主機控制!! 26來檢_下的資料大小,以檢查目前指 •令集所驅動之資料傳輸的進程(步驟310),舉例來說,該預定狀況 可以认定為貝料大小為0,亦即,若檢測出麵的資料量為〇,指 7解#器30會將其視為所有資料都已經傳輸完畢,因為已符合了 該預,定狀況。對於其他的指令碼來說,如果·令碼斜,,寫入暫 存器扣τ碼(步驟312),指令解譯器3〇會控制ΑΤΑ/ΑΤΑρι主機 控制器26來寫入資訊至一暫存器,舉例來說,與儲存位址有關的 參數會被寫人ATA/ATAPI裝置28中的键器上;_地,若該 指令碼係為其他指令碼(譬如,,載入計時器,,指令碼,,,檢測暫存器,, 指令碼等等),則指令解譯器30會執行相對應的操作(步驟31〇、 313、318、324、330、336、346、352)。在步驟 31 卜 314、320、 326、332、348、354中,指令解譯器30會檢測步驟310、313、 318、324、330、336、352的對應操作是否已經成功執行,如果指 令解譯器30檢測出該指令碼沒有成功得到應有的結果(步驟311、 314'320'326、332、348、354),或是該計時器產生逾時(步驟 332) ’則指令解譯器3〇會放棄執行(ab〇rt)目前的指令集(步驟 340),並且回到步驟302來重新檢測該指令仔列是否為空的。如先 26 1292532 * · 前所述’當指令解譯器30放棄執行該指令集時,指令解譯器如 會藉由-中斷來通知中央處理器公接著中央處理器^會決定如 何來處理此·-細·失敗(exeeuti()nfailure),舉姆說,中央處理 器22可以建立另外-個指令仔列,或是傳送—個失敗訊息給使用 者。 如果該指令碼係為”跳r’指令碼(步驟说),這代表指令解譯 φ 11 3〇必須跳出去執行該指令集中另-指令碼,而非下一個指令 碼。如歧所述’每-個指令碼都包含有下—個指令碼的資訊' 基本上’除了”跳出”指令碼以外,指令解譯器3〇會依序執行指令 集中所有的指令瑪’因此’如果指令解譯器3〇執行,,跳出,,指令碼, 則指令解譯器30會從中得知下一個要執行之指令的記憶體位址 (步驟306),接著從該指令集中取得該下一個指令碼(步驟狗,在 此請注意,本發日月提供兩種,,跳出,,指令碼:第—種係為,,直接跳出 (directlyjump)”指令碼’而另外一種係為”條件性的跳出 籲(C〇ndM〇naUump)”指令碼,其中,,條件性的跳出”指令娜 檢測資料大小,,程式碼的操作結果來決定是否要跳出。然而,如 指令解譯器3〇所執行的指令竭不是上述曾經提及的任一指令碼, 指令解譯器30會決定該指令碼係為,,沒有動作”,並且繼續^行下 -個指令碼(步驟358)。如果該指令碼係為,,指令集結束,,指令瑪(牛 驟338),這絲齡轉H 3〇已經完全地執行該齡針定義= 協定’因此,指令解譯器3〇會將該指令集已經完全執行完畢的訊 息通知主機處理器(步驟356),並且再一次地檢測該指令件列(步驟 27 1292532 為< i • 302)二相反地,如果該指令集尚未完全執行完畢,指令解譯器3〇 會取付下-個指令碼的記憶體位址(步驟S36),並且根據下一個指 令碼的記憶體位址來取得下一個指令碼(步驟3〇6)。 日 在此請注意,在第6圖以及第7圖之中,這些指令碼的排列 順序僅僅只作為本發明-實施例,而非本發明的限制條件;換句 話說,指令解譯器30可以先檢_指令碼是否為,,載入計時器,,指 • 令碼,接著再檢測該指令碼是否為,,檢測暫存器,,指令碼,這樣的 操作並不會違背本發__ ’也就是說,本發_令解譯器% 可以執行各式各樣的齡碼’甚至可以域不_順縣執行這 些指令碼。此外,請注意,本發縣令解譯^ 3G可應驗 資料傳輸模式或是PIO資料傳輸模式,均屬本發明之範疇。 如前所述,指令解譯器30可以藉由執行一個由主機21建立 的指令集,來取代原本由主機12本身依據八^/八丁八^協定所執 #行的操作’並且,本發明指令解譯器3〇不需要額外的微處理器或 是主機12的介入,就可以完全執行所需的操作,特別是針對ρι〇 資料傳輸模式,在每一次的資料傳輸之中,無論一個資料區塊僅 僅只包含一個區段(sector)或是多個區段,本發明指令解譯器3〇不 但支援只傳輸單-資料區塊,其亦也可支援傳輸多個資料區塊。 除此之外’如果指令解譯器30必須要支援ATAPI裝置所採用 的PACKET指令協定(ATAPI協定),上述的操作也可以做相對應 28 1292532 * * 的修改。舉例來說,在傳送一個指令之後,於pACKET^令協定 的規疋下必/頁要再寫入12位元的指令封包(c〇mmandpacket); 思12位元的指令封包係為該指令的一部份,而不是一般我們所提 到的身料。在此請注意,舉例來說,一般的裝置暫存器,例如 Device/Head暫存器以及指令暫存器都僅僅只是一個8位元的暫存 ϋ ’因此,指令碼就必須設計為可以同時支援8位元以及16位元 的#作,這樣才能支援所有連接於IDE匯流排上的裝置(譬如先前 • 所述的ATAPI裝置)。此外,對於PACKET指令來說,無論是在 DMA或疋Pio f料傳輸模式,即使主機還沒有完全接收到需要的 貝料’裝置端都可以隨時中斷該指令,這個問題在習知技術中沒 有知到解決’因此習知技術中需要主機處理器或額外的微控制器 來處理。但是在本發明中,可以藉由在一指令集中加入一例外處 理的指令碼來解決此一問題。 相較於習知技術,本發明係利用指令解譯器來自動執行 ATA/ATAPI指令,因此中央處理器的負載可以大幅度地降低,換 句話說’因為中央處理器所接收到的中斷次數大大地降低,因此 中央處理器的效能也因此可大幅度地提高。除此之外,本發明指 令解澤器無須㈣的處理器來處理協定,關為指令碼的適當設 計,本發職令解譯料_由執行域愤職峨立的指令 集來支援所有與暫存器之運作有關的協定。 29 1292532 以上所述僅為本發明之較佳實施例,凡依本發明申請專利範 圍所做之均等變化與修飾,皆應屬本發明之涵蓋範圍。 【圖式簡單說明】 第1圖為習知電子系統的示意圖。 第2圖為習知DMA資料傳輸的流程圖。 第3圖為習知非資料傳輸或是ρι〇資料傳輸的流程圖。 φ 第4圖為本發明電子系統之一實施例的功能方塊圖。 第5圖為本發明指令集中指令碼的對照表。 弟6圖以及第7圖為第4圖所示之指令解譯器的運作流程圖。 【主要元件符號說明】 10、20 電子系統 1卜21 主機 12、22 中央處理器 • 14、24記憶體 16、26 ATA/ATAPI主機控制器 18、28 ATA/ATAPI 裝置 30 指令解譯器 30