7.2 一個簡單的IO設(shè)計_第1頁
7.2 一個簡單的IO設(shè)計_第2頁
7.2 一個簡單的IO設(shè)計_第3頁
7.2 一個簡單的IO設(shè)計_第4頁
7.2 一個簡單的IO設(shè)計_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

一個簡單的I/O設(shè)計輸入和輸出馮·諾依曼模型的重要組成部分輸入和輸出通過總線與CPU、存儲器進行通信最基本的輸入/輸出設(shè)備鍵盤和顯示器鍵盤和顯示器字符設(shè)備面向流的設(shè)備一個字符、一個字符的讀寫按照先后順序I/O控制器一種電子設(shè)備I/O設(shè)備與CPU通信的接口包括幾個寄存器保存數(shù)據(jù)鍵盤數(shù)據(jù)寄存器(KBDR)顯示器數(shù)據(jù)寄存器(DDR)保存狀態(tài)鍵盤控制寄存器(KBCR)顯示器控制寄存器(DCR)……內(nèi)存映射I/OCPU如何和這些設(shè)備的寄存器進行通信?如何讀取I/O設(shè)備寄存器中的數(shù)據(jù)?如何向I/O設(shè)備寄存器加載數(shù)據(jù)?兩種機制專門的I/O指令I(lǐng)ntelx86指令集,in/out通用寄存器

I/O設(shè)備寄存器數(shù)據(jù)傳送指令通用寄存器存儲器內(nèi)存映射問題:如何表示I/O設(shè)備寄存器?內(nèi)存映射I/O設(shè)備寄存器:分配內(nèi)存地址這些地址被分配給I/O設(shè)備寄存器,不再是存儲單元RISC-V-內(nèi)存映射的I/O設(shè)備寄存器內(nèi)存地址分配地址I/O寄存器xFFFF0000~xFFFF0003鍵盤控制寄存器(KBCR)xFFFF0004~xFFFF0007鍵盤數(shù)據(jù)寄存器(KBDR)xFFFF0008~xFFFF000B顯示器控制寄存器(DCR)xFFFF

000C~xFFFF000F顯示器數(shù)據(jù)寄存器(DDR)讀KBDR的指令序列kbdr: .word 0xFFFF0004 #KBDR的內(nèi)存映射地址…… la x5,kbdr lw x6,0(x5) #x6=0xFFFF0004 lw x11,0(x6) #將KBDR中的數(shù)據(jù)加載到x11中寫DDR的指令序列ddr: .word 0xFFFF000C #DDR的內(nèi)存映射地址…… la x5,ddr lw x6,0(x5) #x6=xFFFF000C sw x11,0(x6) #將x11中的數(shù)據(jù)寫到DDR中鍵盤與處理器用戶輸入字符,KBDR

ASCII碼lw x11,0(x6) #將KBDR中的數(shù)據(jù)加載到x11中

問題:如果執(zhí)行這條指令時,用戶還沒有輸入新的字符,會發(fā)生什么情況?將KBDR之前存儲的數(shù)據(jù)讀入x11中?異步I/O的執(zhí)行與處理器的執(zhí)行不同步微處理器:時鐘控制下執(zhí)行指令用戶鍵盤輸入:不受時鐘控制顯示器?sw x11,0(x6) #將x11中的數(shù)據(jù)寫到DDR中

問題:如果執(zhí)行該指令時,顯示器還沒有將上一個DDR中的字符顯示完成,會發(fā)生什么情況?將DDR之前存儲的數(shù)據(jù)覆蓋?異步處理異步問題協(xié)議/握手機制鍵盤,1位的標志是否輸入一個字符顯示器,1位的標志被送給顯示器的字符是否已被顯示設(shè)備控制寄存器[0]位KBCR[0]DCR[0]鍵盤就緒位KBCR[0]每當用戶輸入一個字符時,鍵盤控制器就將就緒位設(shè)為1每當處理器讀取該字符時,鍵盤控制器就將就緒位清空同步機制讀取KBDR之前,檢查就緒位鍵盤:同步的指令序列kbcr: .word 0xFFFF0000 #KBCR的內(nèi)存映射地址kbdr: .word 0xFFFF0004 #KBDR的內(nèi)存映射地址…… la x5,kbcr lw x6,0(x5) #x6=0xFFFF0000 lw x7,0(x6) #加載KBCR中的數(shù)據(jù)

andi x6,x7,1 #測試KBCR[0]是否為1,即是否有字符輸入

beqz x6,XXXX

#如果KBCR[0]==0,不執(zhí)行l(wèi)w指令

la x5,kbdr lw x6,0(x5) #x6=0xFFFF0004 lw x11,0(x6) #將KBDR中的數(shù)據(jù)加載到x11中顯示器就緒位DCR[0]每當顯示器完成了一個字符的顯示,顯示器控制器就將DCR[0]設(shè)為1每當處理器向DDR寫字符時,顯示器控制器就將DCR[0]清空同步機制寫DDR之前,檢查就緒位顯示器的同步指令序列dcr: .word 0xFFFF0008 #DCR的內(nèi)存映射地址ddr: .word 0xFFFF000C #DDR的內(nèi)存映射地址…… la x5,dcr lw x6,0(x5) #x6=0xFFFF0008 lw x7,0(x6) #加載DCR中的數(shù)據(jù)

andi x6,x7,1 #測試DCR[0]是否為1,即是否就緒

beqz x6,XXXX

#如果DCR[0]==0,不執(zhí)行sw指令

la x5,ddr lw x6,0(x5) #x6=xFFFF000C sw x11,0(x6) #將x11中的數(shù)據(jù)寫到DDR中輪詢周期性的檢查狀態(tài)位,判斷是否執(zhí)行I/O操作的方法最簡單的方式由處理器完全控制和執(zhí)行通信工作輸入服務例程-輪詢01kbcr: .word 0xFFFF0000 #KBCR的內(nèi)存映射地址02kbdr: .word 0xFFFF0004 #KBDR的內(nèi)存映射地址03 …… #省略04 la x5,kbcr 05InPoll: lw x6,0(x5) #測試是否有字符被輸入06 lw x7,0(x6) 07 andi x6,x7,1 08 beqz x6,InPoll

#如果KBCR[0]==0,輪詢09 la x5,kbdr 0A lw x6,0(x5) 0B lw x11,0(x6) #將KBDR中的數(shù)據(jù)加載到x11中0C j NEXT_TASKX #執(zhí)行下一個任務輸出服務例程-輪詢01dcr: .word 0xFFFF0008 #DCR的內(nèi)存映射地址02ddr: .word 0xFFFF000C #DDR的內(nèi)存映射地址03 …… #省略04 la x5,dcr 05OutPoll: lw x6,0(x5) #測試顯示是否就緒06 lw x7,0(x6) 07 andi x6,x7,1 08 beqz x6,OutPoll

#如果DCR[0]==0,輪詢09 la x5,ddr 0A lw x6,0(x5) 0B sw x11,0(x6) #將x11中的數(shù)據(jù)寫到DDR中0C j NEXT_TASKY #執(zhí)行下一個任務輪詢?nèi)秉c讀取鍵盤數(shù)據(jù)時,狀態(tài)未就緒,假設(shè)微處理器的時鐘頻率:300MHz一個時鐘周期:3.3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論