九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
lmosem

標簽:android   style   log   com   http   it   si   使用   la   

實驗手冊上說了安裝DNW驅動,這個軟件我沒有細查,不過根據(jù)它的功能,它用的是USB上傳文件到開發(fā)板,所以比那種用串口上傳文件要方便很多。

USB轉串口支持驅動之前已經安裝了,現(xiàn)在為了支持USB傳輸文件當然也要安裝驅動,安裝時有些文檔里面沒有說清楚,這里說下。

  1. 啟動DNW,先在Configure里面設置一下,然后再點擊Serial Port/connect,接著再打開開發(fā)板開關,輸入dnw,會自動提示缺少驅動;
  2. 驅動文件先按照安裝步驟先簽名一下,然后再更新驅動;
  3. 安裝完驅動,先回車輸入dnw 40008000,然后再點擊USB Por/Transmit/Transmit,添加文件到Transmit,添加完成后接著是傳輸文件,再次選擇Transmit/led.bin,上傳文件;
  4. 顯示傳輸成功后,記得輸入go 40008000把程序指針指向這個地址,CPU會到這個地方執(zhí)行二進制機器代碼,會看到燈閃爍,完成。

??

還是把例程代碼寫一遍吧,led裸板實驗一共有三個文件

  1. start.S
  2. led.c
  3. Makefile

??

start.S需要完成的事情有

首先關看門狗(盡管IROM已經這樣做了?),看門狗的作用還是不太清楚?

首先在手冊中搜watchdog,找到watchdog這章,大概瀏覽下,然后找到這章

定位到26章看門狗定時器,大概瀏覽一下overview

對于硬件的操作無非是操作寄存器,寄存器就好比面向對象中的接口API,只不過這里封裝的是硬件而已。通常而言,寄存器無非兩大類:控制寄存器和數(shù)據(jù)寄存器,4412中的設備寄存器一般都是32位,然后具體的設備還有額外的寄存器。此處我們需要關閉看門狗,所以能夠想到應該到控制寄存器里面找對應的位去設置一下。

這里呢,我們把控制器寄存器全部置零,也就是關閉所以可以控制的功能,反正暫時不要用,代碼如下:

我們只要把Reset和Interrupt關閉就可以了,這樣就無法產生復位信號或者中斷信號,當然這里把所有位都置零也沒問題:

關完了看門狗,接下來就是打開icache

這里插播一段廣告,什么是icache?參考Tiny4412裸機程序之操作ICache

CPU訪問內存取指順序執(zhí)行,但是訪問寄存器還是太慢了,所以在CPU通用寄存器和內存之間插入了高速緩存cache,特點是高速但是容量小,CPU會把一部分常用的指令放到里面去,cache常見的分成兩類:icache和dcache。

icache使用比較簡單,系統(tǒng)剛上電的時候是無效的,并且它是關閉的,往CP15協(xié)處理器中的寄存器C1的bit[12]寫1可以啟動icache,寫0可以關閉icache。icache關閉時,CPU每次取指都要讀主存,性能非常低。因為icache可隨時啟動,越早開icache越好。

dcache剛上電的時候也是無效并且是關閉的,在CP15寄存器C1中的bit[2]中寫1可以啟動dcache,寫0可以關閉dcache。因為dcache必須在啟動mmu之后才能啟動,而對于裸機而言,沒必要開啟mmu,mmu是什么?所以這里就不啟動了。

啟動了icache,這樣取指令命令就快了,這次的裸機測試程序的電燈程序是C語言寫的,所以要設置棧空間(也就是設置棧指針)

下面介紹一下為什么要設置棧?參考和拷貝了文章Tiny4412之C語言實現(xiàn)流水燈,Tiny4412裸機程序

在Linux系統(tǒng)編程中,我們寫了一段C代碼然后就直接執(zhí)行了,也沒有設置??臻g。其實是C庫幫我們這些事情做了,至于具體怎么做的暫時還不太清楚。大概的情況是這樣的:在編譯C源碼時,編譯器通常會在我們的代碼中加上幾個被稱為啟動文件的代碼(crtl.o crti.o crtend.o crtn.o等),它們是標準的庫文件。這些代碼就負責設置C程序的堆棧等等,然后設置好C程序執(zhí)行的堆棧環(huán)境(怎么設置的暫時十分不清楚),然后調用main函數(shù)。要注意的是,這些函數(shù)和我們的裸板程序設置堆棧的方法不同,因為還要和操作系統(tǒng)打交道,所以這些代碼是不能用在裸板上的。

棧:調用C語言之前必須設置棧,棧用于保存運行時環(huán)境,給局部變量分配空間。

??

具體把棧指針設置到哪里呢?先來看一下4412的啟動流程吧,參考手冊SEC_Android_Exynos4212_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf

參考代碼上給的ldr sp, =0x02050000,我不知道為什么設置0x02050000這個地址作為棧頂指針,參考了Tiny4412之C語言實現(xiàn)流水燈,Tiny4412裸機程序

查手冊發(fā)現(xiàn)內部的IRAM的地址是從0x02020000開始的,而根據(jù)IRAM的內部存儲映射知道,還要劃5K給IROM用,劃8K給BL1用,劃16K給BL2用(BL2實際14K),按道理說剩下的空間就沒有用了,我們可以把剩下的空間0x02027400到0x02060000中劃一段出來作為??臻g,只不過我奇怪的是為什么不在內存空間(我還不知道內存地址映射到哪段上去了?)呢?

其實選取1K就足夠了,其實對于led.bin來說,根本用不了這么大,而他這里選擇了0x02050000,我不懂

其實按道理說,設置

0x02020000 (iRAM基地址) + 5K(iROM代碼用) + 8K(BL1用) + 16K(BL2用) + 1K(用作棧))也是可以的,這里設置的是0x02050000?

??

好了,設置完了??臻g,就可以調到C程序那里去執(zhí)行了:

下面來實現(xiàn)led_blink函數(shù),可見這里不需要main函數(shù),原因是這是邏輯程序,而對mian函數(shù)的要求是C編譯器的要求。

第一步首先找到led的原理圖,因為有了原理圖,才能知道led連接到了哪個引腳上,然后才能控制這個引腳,從而控制led。

下面是led的原理圖:

從上圖可以知道連接led的引腳網(wǎng)絡標號,然后通過網(wǎng)絡標號找到和連接器相連的引腳:

??

然后再通過連接器上的網(wǎng)絡標號到核心板原理圖pdf上去找對應的處理器的引腳:

??

??

好了現(xiàn)在知道了處理器引腳名稱了,接著到4412手冊pdf上搜到這兩個引腳相關的寄存器,然后控制即可。

這里的話控制很簡單,只要先設置為輸出,然后輸出高電平就點亮,輸出低電平就熄滅即可:

??

??

??

??

led2

GPL2_0

??

led3

GPK1_1

??

??

??

??

??

??

下面寫流水燈的C程序:

接下來是Makefile的編寫:

接下來就是執(zhí)行了,但是出現(xiàn)了如下錯誤:

不知道怎么回事,上次還有用的。不管了,既然沒檢測到,肯定是路徑沒添加,所以添加下:

添加:

使 .bashrc生效

再次運行make,OK! 執(zhí)行成功:

??

接下來就是把led.bin下載到開發(fā)板上:

  1. 先把led.bin拖到桌面上,我習慣用Xmanager文件傳輸,十分方便;
  2. 接著打開dnw.exe,如果端口號變了,需要先重新Configuration/Options;
  3. 然后點擊Serial Port/Connet;
  4. 接著按下iTOP-4412開發(fā)板的電源開關,dnw輸出信息,及時按下回車;
  5. 輸入dnw 40008000;
  6. 然后下載led.bin到開發(fā)板上:USB Port/Transmit/;
  7. 下載成功后,不要忘了輸入 go 40008000 執(zhí)行代碼;
  8. 經測試,本次流水燈實驗成功。

??

說明:

得到了led.bin,根據(jù) 裸機教程.pdf ,通過現(xiàn)成的uboot功能,把led.bin下載到了0x40008000這個地址,不是太清楚這個地址是干嘛用的。原以為程序當然是加載到內存中運行的,但是我不知道這里的意思是什么?是不是把程序搬到了這個地址0x40008000,然后還要搬到再搬到內存里面去執(zhí)行?還是說0x4000800本來就是內存地址也就是下載到了DRAM上?不過按道理說,應該不是直接下載到內存上吧,應該是先下載到eMMC上吧。

??

我看了4412手冊描述存儲映射的那章:

但是不太清楚這個DMC到底是個什么地址,而且也沒有找到DDR的映射區(qū)域,不知道怎么回事???

用折半法試了下,只有0x40000000到0x5FFFFF0A這段地址段可以通過dnw.exe把led.bin下載過去,led.bin占232字節(jié)(指的是教程提供的led.bin,自己的led.bin大小不是這個)。也就是大概511M的空間,我奇怪的是為什么其他區(qū)域不可以呢,畢竟這塊板子的eMMC有4G的空間???不明所以。

??

0x5ffffe22+0xe8=0x5FFFFF0A

0x5FFFFF0A-0x4000000=0x1FFFFF0A=536870666(10)

536870666B/1024/1024=511.9998

512MB=536870912B

??

先把當下的事情干好,想一下是不是。

??

lmosem-exynos4412:iTOP-4412裸機開發(fā)環(huán)境

標簽:android   style   log   com   http   it   si   使用   la   

原文:http://www.cnblogs.com/dcscodelife/p/5790977.html

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
I-Cache與D-Cache
最簡單的ARM裸機程序,幫你理解程序的運行啟動(mini2440開發(fā)板) - TQW432...
使用寄存器點亮LED—跟51單片機一樣寫代碼教學(初步入門)
DNW
nm命令中符號類型詳解
深入學習Cache系列 1: 帶著幾個疑問,從Cache的應用場景學起
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服