ARM體系結構之:I/O管理
2.4 I/O管理
ARM系統完成I/O功能的標準方法是使用存儲器映射I/O。這種方法使用特定的存儲器地址。當從這些地址加載或向這些地址存儲時(shí),它們提供I/O功能。某些ARM系統也可能有直接存儲器訪(fǎng)問(wèn)(DMA,Direct Memory Access)硬件。
本文引用地址:http://dyxdggzs.com/article/257090.htm外圍設備(如串行線(xiàn)控制器)中包含一些寄存器。在存儲器映射系統中,這些寄存器就像特定地址的存儲器一樣。(在其他的系統組織中,I/O功能可能與存儲器件有不同的尋址空間。)串行線(xiàn)控制器可能有以下5種寄存器。
① 發(fā)送數據寄存器(只寫(xiě)):寫(xiě)入這個(gè)位置的數據被送往串行線(xiàn)。
② 接受數據寄存器(只讀):保存從串行線(xiàn)送來(lái)的數據。
③ 控制寄存器(讀/寫(xiě)):設置數據速率,管理RTS(請求發(fā)送)和其他類(lèi)似信號。
④ 中斷使能寄存器(讀/寫(xiě)):控制中斷的硬件事件。
⑤ 狀態(tài)寄存器(讀/寫(xiě)):指示讀數據是否有效、寫(xiě)緩存是否滿(mǎn)等。
要接受數據,必須用軟件適當地設置器件。通常在接收到有效數據或檢測到錯誤時(shí)產(chǎn)生一個(gè)中斷。中斷程序必須將數據復制到緩存器中并進(jìn)行錯誤檢測。
應該注意的是,存儲器映射外圍寄存器的行為與存儲器不同。連續兩次讀數據寄存器,即使對該寄存器沒(méi)有寫(xiě)操作,其結果也很可能不同。而對真正存儲器的讀是冪等的(idempotent)(可多次重復讀,結果一致)。對外圍寄存器的讀操作可能清除當前值,致使下一次讀結果不同。這種寄存器稱(chēng)為讀敏感(read-sensitive)的。
當涉及讀敏感寄存器時(shí),編程必須小心。特別是不能將這種寄存器的數據復制到Cache存儲器。
在許多ARM系統中,不能在用戶(hù)模式下訪(fǎng)問(wèn)I/O寄存器。要訪(fǎng)問(wèn)這些器件,只能通過(guò)監控調用(SWI)或通過(guò)使用這種調用的C庫函數。
注意 | 在A(yíng)RM編程中,通常將存儲器的I/O區域標記為非Cache區(uncacheable),并繞過(guò)Cache訪(fǎng)問(wèn)。通常Cache與讀敏感(read-sensitive)器件相互排斥。顯示幀緩存器(DisplayFrame Buffers)也需要仔細考慮,通常也設為不可Cache的。 |
存儲器相關(guān)文章:存儲器原理
評論