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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > I2C總線驅(qū)動在嵌入式系統(tǒng)中的兩種實現(xiàn)

          I2C總線驅(qū)動在嵌入式系統(tǒng)中的兩種實現(xiàn)

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

          3.2 以GPIO端口模擬實現(xiàn)

          此方法是直接用ARM S3C4510的GPIO(GeneralPurpose Input/Output)引腳模擬總線的時序來實現(xiàn)數(shù)據(jù)傳輸。S3C4510B提供了18個可編程的通用I/O端口,用戶可將每個端口配置為輸入模式、輸出模式或特殊功能模式,由片內(nèi)的特殊功能寄存器IOPMOD和IOPCON控制。

          控制I/O口的特殊功能寄存器一共有3個:IOP-MOD,I0PCON和IOPDATA。I/O口模式寄存器(IOP-MOD)用于配置P17~P0的輸入輸出狀態(tài);I/O口控制寄存器IOPCON用于配置端口P8~P17的特殊功能,當這些端口用作特殊功能(如外部中斷請求、外部中斷請求應(yīng)答、外部DMA請求或應(yīng)答、定時器溢出)時,其工作模式由10PCON寄存器控制,而不再由IOPMOD寄存器;I/O口數(shù)據(jù)寄存器(IOPDATA)當配置為輸入模式時,讀取I/O口數(shù)據(jù)寄存器IOPDATA的每一位對應(yīng)輸入狀態(tài),當配置為輸出模式時,寫每一位對應(yīng)輸出狀態(tài)。位[17:O]對應(yīng)于18個I/0引腳P17~P0。

          下面用GPIO的pin[O][1]腳進行模擬,其中低位為SDA,高位為SCL。首先給出一些便于操作的宏定義:


          3.3 應(yīng)用實例

          為ARM外掛PCF8563實現(xiàn)實時時鐘控制。PCF8563是PHILIPS公司生產(chǎn)的具有I2C接口的低功耗CM()S實時時鐘/日歷芯片。其最大總線速度為400kb/s,每次讀寫數(shù)據(jù)后,其內(nèi)嵌的字地址寄存器器會自動產(chǎn)生增量。下面用模擬實現(xiàn)PCF8563的I2C實時時鐘芯片的操作,有字節(jié)寫/讀兩種狀態(tài),程序中從地址的讀地址為0A3H,寫地址為0A2H。

          首先使能I2C總線,然后對I2C總線進行開始操作,就緒之后,依次寫人器件地址(即0xA2),寫入寄存器地址,再寫人所設(shè)寄存器值。控制/狀態(tài)寄存器1為0,控制/狀態(tài)寄存器2為0,秒寄存器為30,分鐘寄存器45,小時寄存器為17,日寄存器為20,星期寄存器為0,月/世紀寄存器為88,年寄存器為6(即2006年8月20日17點45分30秒)。當程序運行一段時間(15分鐘)后,依次讀取寄存器,得到時間為2006年8月20日18點OO分30秒。

          4 總 結(jié)

          本文給出了兩種I2C驅(qū)動的實現(xiàn)方法。前者直接利用主機端自帶的I2C總線控制器,通過配置一系列特殊寄存器實現(xiàn)I2C總線傳輸。這種方式適用于一些本身包含I2C總線控制器的芯片,實現(xiàn)起來簡單方便。后者則適用于主機端沒有I2C控制器的情況。此時主機端只要有GPIO端口,就可利用其實現(xiàn)同樣的功能。在基于ARM加μClinux的嵌入式視頻監(jiān)控產(chǎn)品中,同時將這兩種方法做了具體的運用。其一的示例就是通過模擬的I2C總線,掛接PCF8563實時時鐘芯片,并取得很好的實時效果。


          上一頁 1 2 下一頁

          評論


          相關(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); })();