我和ARM的那些事兒3 beep之旅,最詳細(xì)的ARM裸機(jī)工程設(shè)置
前言
在博客園里面我搜索了老半天,找相應(yīng)的mini2440的裸機(jī)開(kāi)發(fā)的程序,讓我挺失望的就是居然沒(méi)有人對(duì)做arm這塊做詳細(xì)的解答,到底如何去做,到底如何去配置,都不清楚,讓我很糾結(jié),那么我花了近一星期的時(shí)間,翻書、查資料、逛論壇,終于在自己一點(diǎn)一點(diǎn)地摸索下把整個(gè)流程都搞定了!而且誰(shuí)說(shuō)ARM硬件平臺(tái)的同學(xué)不搞開(kāi)源的,作為硬件狗,我們也是很樂(lè)意與大家分享我們的項(xiàng)目的!
個(gè)人設(shè)定目標(biāo)
使用mini2440上的蜂鳴器進(jìn)行呼叫。
準(zhǔn)備
Mini2440開(kāi)發(fā)板、keil 4 for arm
Keil的配置
OK,首先我們要新建一個(gè)project
Project->new uvision project
寫完自己的項(xiàng)目名以后,要選擇自己的CPU了
OK,我們選擇的就是三星的S3C2440A的芯片
問(wèn)你是否把keil寫的加入到項(xiàng)目中,我們選否,自己進(jìn)行配置
按F2鍵可以修改工程項(xiàng)目名
當(dāng)然我們也可以右擊后選擇Mange Project Items對(duì)我們的工程項(xiàng)目進(jìn)行管理
點(diǎn)擊OK
馬上我們的工程現(xiàn)在就有個(gè)完整的體系
下面就是對(duì)keil的target進(jìn)行設(shè)置。
找到按鈕
設(shè)置ROM起始地址,至于為何是0x30000000,請(qǐng)查看芯片手冊(cè)
設(shè)置RAM
設(shè)置產(chǎn)生文件的地方,我們一般都是放在Out目錄下
點(diǎn)擊select folder for objects
選擇你要的路徑
在USER中勾選run#1項(xiàng)表示在編譯過(guò)程中如何連接等
命令如下:
fromelf.exe --bin -o ./out/@l.bin./out/@l.axf
因keil默認(rèn)不能產(chǎn)生bin文件,需借助fromelf.exe工具來(lái)產(chǎn)生bin文件
頭文件引入設(shè)置
OK,基本上我們的工程已經(jīng)設(shè)置完成了!
開(kāi)啟Beep之旅
要操作硬件,那么我們必須要知道它的電路圖是如何的?
看到了吧,我們要尋找GPB0口對(duì)蜂鳴器進(jìn)行操作。
那么我們要操作這個(gè)口,必須找到他的地址,我們?nèi)フ业組INI2440_CPU芯片文檔
OK,我們找到了GPB口的寄存器
看到芯片手冊(cè)中的GPB0口了吧,OK,呢么我們應(yīng)該使用的是OUTPUT模式,嗯!基本上我們是有思路了。
OK,這個(gè)就是我們?cè)O(shè)置數(shù)據(jù)的寄存器,哈哈,可以了!
看我藍(lán)線的部分,英語(yǔ)真心重要啊!當(dāng)端口被設(shè)置為輸出端口時(shí),這個(gè)GPBDAT寄存器就是被設(shè)置為相應(yīng)的數(shù)值。
編碼時(shí)間
OK,上面我們已經(jīng)講得非常清楚如何來(lái)配置了。一條清晰的思路已經(jīng)在我們的腦海里面形成,下面就是我們?nèi)绾蝸?lái)實(shí)現(xiàn)了。
新建好一個(gè)空白的文件。
然后編碼了:
AREARESET,CODE,READONLYENTRYLDRR1,=0x56000010LDRR2,=0x1STRR2,[R1]MainLoopLDRR1,=0x56000014LDRR2,=0x1STRR2,[R1]LDRR1,=0xFFFFFFDelay1SUBR1,R1,#1CMPR1,#1BNEDelay1LDRR1,=0x56000014LDRR2,=0x0STRR2,[R1]LDRR1,=0xFFFFFFDelay2SUBR1,R1,#1CMPR1,#0BNEDelay2BMainLoopEND
保存,將我們的文件保存為demo.s格式
將我們的文件添加到我們的src目錄下
Add existing file to ….
編譯
看結(jié)果:
很明顯,這個(gè)項(xiàng)目沒(méi)有錯(cuò)誤,OK,使用MINItool下載OUT目錄下的bin文件吧!