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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Eclipse開發(fā)調試ARM裸機程序(六)關于裸機調試i2c記錄

          Eclipse開發(fā)調試ARM裸機程序(六)關于裸機調試i2c記錄

          作者: 時間:2016-11-19 來源:網(wǎng)絡 收藏
          關于裸機調試i2c記錄,遇到了不少的問題?,F(xiàn)在都已經(jīng)解決了。記錄一下。

          1.整體的規(guī)劃

          既然是學習某個硬件的功能,我覺得就應該能用最簡的代碼來在不涉及其它硬件的情況下,做出來。所以我的規(guī)劃是在僅有的:中斷,IIC,再順便加一個LED就來實現(xiàn)。不加SDRAM,不設置clock,不涉及NandFlash,不涉及NorFlash,不涉及MMU重映射。就用S3C2440內部的4K SRAM來完成。

          2.現(xiàn)有資源

          從零寫太難了,就先找找現(xiàn)有資源。1,有韋東山的代碼:操作的是一個時鐘芯片,而我的mini2440用的是AT24C08,一個EEPROM,還有一個不一樣的NandFlash。2,有一個以前從國嵌MDK下移植到RVDS下代碼:是針對AT24C08的,沒有啟動代碼,只可以借助JLINK等工具,在SDRAM中調試。并且底層都是SUNSAMG的代碼。

          3.自己的工作

          結合思路,韋東山的底層(中斷了,堆棧指針)的做的比較透明。再次看了它的按鍵中斷的完整實現(xiàn)代碼。結合國嵌的初始化代碼開始了我的探索之路。分三塊a:init(初始化);b:read(讀); c:write(寫)。先是在原來的按鍵中斷的main函數(shù)中添加了init部分。然后調試查看,初始化用的寄存器都有沒有按照要求設置(改動之處就是把原來的以PCLK為50MHz做的I2C頻率設置改為了12MHz匹配的)。然后就是read,到一定的位置,是一定會進入中斷的。然后,調試能不能進入中斷(中間很曲折)。中斷能進之后就在中斷中將全局變量變?yōu)?,但是就在這里也出現(xiàn)了問題,就是這個全局變量不能改變。這使我郁悶了一下午,最后想起來,全局變量是存在BSS段中的,而我的全裸的程序沒有操作系統(tǒng)來幫忙設置這個東西。自己不做就沒人幫忙做。結合韋東山的IIC代碼,u-boot中的代碼。知道了要清理一下BSS段就可以用了,所謂清理現(xiàn)在說來就是清零。
          明白了原因,解決就相比順利多了,添加一個lds鏈接腳本,弄一個bss_start bss_end,然后在程序中把bss_start到bss_end內存清零就OK了。這個還要專門總結一個文章。再然后就是遇到了。再后來遇到的問題調試的時候,在不關機的時候連著讀兩次就出第二次讀出來的就是FF,我還以為是延時時間不恰當造成了,來回調試好久不能解決。不過一直是周期性的,假如0地址處內容為0x12,第一次讀是0x12,第二次0xff,第三次0x12,第四次0xff。。。如果我調試一次關機重啟一次就不會出現(xiàn)這個問題。這說明是內在中殘留了什么東西影響第二次的結果。這個也不好說。
          在最后想起來這個FF也很有代表性,為什么就是FF而不是其它呢?因為就想知道它到底誤讀了哪里的數(shù)據(jù)。就想起來在在AT24C08中每個地址處寫入不同的數(shù)據(jù),看讀到哪個數(shù)據(jù)了,就能確定位置了。就燒寫linux系統(tǒng),運行了開發(fā)板上帶的軟件,依次寫入了0x00 ---> 0xff ,就是每個值都不一樣。
          再回到裸機運行時候,破綻就暴露出來了,讀1地址處的1后,再讀1地址處值時變?yōu)榱?地址處的值。這個說明IICDS中的值引起的。在進行第二次運行時候,把第一次殘留的在IICDS中的值,當作了第二次讀發(fā)送的地址值。
          調整了一下賦值發(fā)送順序,解決了這個問題。然后就擴展一個寫入10個數(shù),再讀出來。最后就定版本為這個了。下邊是最后調試截圖:


          代碼:http://download.csdn.net/detail/kangear/5264969

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


          評論


          技術專區(qū)

          關閉
          看屁屁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); })();