<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM體系結(jié)構(gòu)之:I/O管理

          ARM體系結(jié)構(gòu)之:I/O管理

          作者: 時(shí)間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

          2.4

          系統(tǒng)完成I/O功能的標(biāo)準(zhǔn)方法是使用存儲(chǔ)器映射I/O。這種方法使用特定的存儲(chǔ)器地址。當(dāng)從這些地址加載或向這些地址存儲(chǔ)時(shí),它們提供I/O功能。某些系統(tǒng)也可能有直接存儲(chǔ)器訪問(DMA,Direct Memory Access)硬件。

          本文引用地址:http://www.ex-cimer.com/article/257090.htm

          外圍設(shè)備(如串行線控制器)中包含一些。在存儲(chǔ)器映射系統(tǒng)中,這些就像特定地址的存儲(chǔ)器一樣。(在其他的系統(tǒng)組織中,I/O功能可能與存儲(chǔ)器件有不同的尋址空間。)串行線控制器可能有以下5種

          ① 發(fā)送數(shù)據(jù)寄存器(只寫):寫入這個(gè)位置的數(shù)據(jù)被送往串行線。

          ② 接受數(shù)據(jù)寄存器(只讀):保存從串行線送來的數(shù)據(jù)。

          ③ 控制寄存器(讀/寫):設(shè)置數(shù)據(jù)速率,管理RTS(請(qǐng)求發(fā)送)和其他類似信號(hào)。

          ④ 中斷使能寄存器(讀/寫):控制中斷的硬件事件。

          ⑤ 狀態(tài)寄存器(讀/寫):指示讀數(shù)據(jù)是否有效、寫緩存是否滿等。

          要接受數(shù)據(jù),必須用軟件適當(dāng)?shù)卦O(shè)置器件。通常在接收到有效數(shù)據(jù)或檢測(cè)到錯(cuò)誤時(shí)產(chǎn)生一個(gè)中斷。中斷程序必須將數(shù)據(jù)復(fù)制到緩存器中并進(jìn)行錯(cuò)誤檢測(cè)。

          應(yīng)該注意的是,存儲(chǔ)器映射外圍寄存器的行為與存儲(chǔ)器不同。連續(xù)兩次讀數(shù)據(jù)寄存器,即使對(duì)該寄存器沒有寫操作,其結(jié)果也很可能不同。而對(duì)真正存儲(chǔ)器的讀是冪等的(idempotent)(可多次重復(fù)讀,結(jié)果一致)。對(duì)外圍寄存器的讀操作可能清除當(dāng)前值,致使下一次讀結(jié)果不同。這種寄存器稱為讀敏感(read-sensitive)的。

          當(dāng)涉及讀敏感寄存器時(shí),編程必須小心。特別是不能將這種寄存器的數(shù)據(jù)復(fù)制到。

          在許多系統(tǒng)中,不能在用戶模式下訪問I/O寄存器。要訪問這些器件,只能通過監(jiān)控調(diào)用(SWI)或通過使用這種調(diào)用的C庫函數(shù)。

          注意

          在ARM編程中,通常將存儲(chǔ)器的I/O區(qū)域標(biāo)記為非Cache區(qū)(uncacheable),并繞過Cache訪問。通常Cache與讀敏感(read-sensitive)器件相互排斥。顯示幀緩存器(DisplayFrame Buffers)也需要仔細(xì)考慮,通常也設(shè)為不可Cache的。

          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理




          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();