學習ARM開發 13

2021-08-22 02:10:41 字數 921 閱讀 1547

由於uboot大部份源程式已經修改好,目前就是修改網路部份了。由於網路設計,是採用了16位資料線的方式,還有rtl8019as採用了9346的儲存器,這樣的設計都帶來了很大的麻煩。因為是全新的東西,沒有任何經驗,也沒有相應的儀器。所以開發這個rtl8019as的網路驅動,就成為了乙個很大的問題。

無論有多難,都要去面對的。要寫rtl8019as的驅動,首先的問題,就是找到s3c44b0訪問rtl8019as的暫存器,如果沒有暫存器,就無法對它程式設計,也沒有辦法對它控制。那麼它的暫存器位址是在那裡呢?起先,我是從原理圖上找到它的選片接線,是接到cpu的ngcs3上,那麼它的位址肯定是從0x0600_0000開始了。接著看到我的rtl8019as是16位的接線方式,那麼它與cpu的連線方式是要從位址線1開始連線,因為s3c44b0對於8位,16位,32位的位址線輸出是要求的。這樣就可以算出rtl8019as的位址是0x0600_0000再加上暫存器址左移一位,因為位址線0是不用的,只有1到5在使用。比如復位暫存器位址就是0x0600_0000+(0x1f<<1),這樣就可以找到所有暫存器位址了。

位址找到了,那麼我就要對它進訪問。由於嵌入式的cpu是記憶體位址與暫存器位址是統一編址的,因此直接訪問就行了。剛開始,我直接寫暫存器,和讀取寄器,發現資料全部都是0xff,這顯然是不對的。就當我修改為其它值,再讀出來,都是0xff,說明暫存器不響應。這時,我不知道是什麼原因引起的。接著為了尋找這個問題,就找了一堆資料,結果都找不到。然後又檢視硬體,又查詢軟體。都沒有發現有什麼問題,實在沒有辦法了。看到別人的板都沒有9346這個儲存器,是不是我的儲存器有問題?我也搞不懂它。後來就把它拔下來,接著再試還是不行。讀取暫存器,還是0xff值。接著再檢視rtl8019as的datasheet,發現65腳跳線也是乙個問題。我檢視一下我的接線是接了乙個電阻,然後再接到vdd上。我試著把這個電阻斷開,讓它是低電平。

後來一試,果然讀寫暫存器的值變了,不是0xff了。說明這些暫存器有效了。

學習ARM開發20 21

學習arm開發 20 os的任務切換 有了前面的tick中斷,那麼基本的任務切換條件已經是 萬事俱備,只欠東風 了。不過,這個 東風 也是很難搞得懂的,只有不斷地通過實踐才會找到合適的方法。現在我就需要去找這個東風了,就是解決不同的任務切換的問題。從簡單到複雜,這是任何事物的認識過程,也是行之有效的...

學習ARM開發 5

學習arm開發 5 蔡軍生 2005 07 16 寫於深圳 上一次說到要學習uboot的 但在看之前,首先要知道目標機器的程式設計資源,這裡的資源,是指s3c44b0所提供的執行程式的資源,對任何嵌入式軟體開發,都首先要對硬體有乙個很好的了解,這跟pc機的程式設計是大不一樣的。因為pc機都已經發展了...

學習ARM開發 9

學習arm開發 9 上一次把引導的彙編看完,已經準備c的執行環境,下面就開始學習c的源程式,從start.s檔案裡到跳檔案 lib arm board.c裡執行.引導程式從彙編start.s裡跳到這裡執行。蔡軍生 2005 07 19 void start armboot void 宣告乙個全域性指...