iar 连接linux开发板,LED裸机程序(IAR)
LED裸機(jī)程序(IAR)
一、實(shí)驗(yàn)環(huán)境
開發(fā)環(huán)境:IAR5.30
開發(fā)板:UT-S3C6410
開發(fā)工具:JLINK V8
二、實(shí)驗(yàn)?zāi)康?/p>
在無操作系統(tǒng)的開發(fā)板上,運(yùn)行程序,掌握裸機(jī)程序的開發(fā)過程,熟悉IAR和JLINK的使用。
三、實(shí)驗(yàn)步驟
1、準(zhǔn)備工作
找一份S3C6410X芯片手冊(cè)和開發(fā)板原理圖,還要找根跳線把調(diào)試端口JTAG傍邊的第二個(gè)和第三個(gè)引腳連起來。
沒有操作系統(tǒng)的ARM和51單片機(jī)沒有多大的差別,所以一開始大家就不要有畏懼感。
先準(zhǔn)備點(diǎn)理論知識(shí),外圍設(shè)備會(huì)映射到內(nèi)存地址空間,地址是固定不變的,因不同的芯片而不同,可以從S3C6410X.PDF的資料上找映射的詳細(xì)信息。找到外圍設(shè)備對(duì)應(yīng)的內(nèi)存地址后,就可以對(duì)外圍設(shè)備進(jìn)行操作了,如果用C語言,用指針就可以對(duì)其進(jìn)行讀寫操作,之后的事一切都變得很簡(jiǎn)單。
2、創(chuàng)建工程,修改參數(shù)
打開IAR,新建一個(gè)工程。然后打開配置選項(xiàng)project> option:
我的開發(fā)板的內(nèi)核是ARM1176JF-S(在S3C6410X的芯片資料上能找到),所以選上。
然后:
配置好,點(diǎn)擊OK。
3、添加啟動(dòng)代碼
添加一個(gè)啟動(dòng)代碼文件(cstartup.s)到工程中,這個(gè)代碼的作用是初始化中斷和7種異常情況并建立異常向量表,完成后會(huì)跳到main函數(shù)的入口地址執(zhí)行。
啟動(dòng)代碼文件放在C:\Program Files\IAR Systems\Embedded
Workbench 5.4 Kickstart\arm\src\lib\arm目錄下,先把它復(fù)制到自己的工程目錄下。
步驟1:
步驟2:
點(diǎn)擊打開,添加完成。
4、添加.ICF文件
.ICF文件的作用是告訴linker怎么把數(shù)據(jù)和代碼分布到物理內(nèi)存中,和MDK中的scatter
file是相同作用。
本實(shí)驗(yàn)用的.ICF文件放在C:\Program Files\IAR Systems\Embedded
Workbench 5.4 Kickstart\arm\config目錄下,復(fù)制到工程目錄下,并改名為6410.icf
從圖中可以得知rom是從0X0C00000地址開始的,這個(gè)區(qū)間(0x0c000000~0x0fffffff)正是我們經(jīng)常燒寫bootloader的地址,我們正真能操作的空間大小只有4K,所以生成的可執(zhí)行文件不能大于4K,詳細(xì)信息芯片資料上有介紹。所以對(duì).icf文件進(jìn)行如下修改:
define symbol __ICFEDIT_intvec_start__ = 0x0c000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__= 0x0c000000;
define symbol __ICFEDIT_region_ROM_end__= 0x0c000FFF;
define symbol __ICFEDIT_region_RAM_start__= 0x0c000000;
define symbol __ICFEDIT_region_RAM_end__= 0x0c000FFF;
然后設(shè)置一下:
4、查找LED1的映射地址
打開開發(fā)板核心板的原理圖:
不難找到LED1對(duì)應(yīng)的引腳是GPM0,然后找打開S3C6410的芯片資料,找到GPM映射的詳細(xì)信息。
可以看到GPMCON GPMDAT兩個(gè)寄存器映射到的內(nèi)存地址空間,GPMPUD就別不要管了。
這是LED1映射到的具體的地址,可以同過對(duì)GPMCON設(shè)置把GPM0設(shè)置為OUTPUT模式。
這是LED的數(shù)據(jù)地址,沒個(gè)LED占了一個(gè)bit,對(duì)這個(gè)地址上相應(yīng)的位寫數(shù)據(jù)就能控制LED的亮和滅(1/0)。
5、編寫代碼
#include
int main(void)
{
int i;
int *pcon = NULL;
int *pdat = NULL;
pcon = (int *)0x7f008820;
*pcon = 0x1; //bit0 : 0001 means GPM0 output
pdat = (int *)0x7f008824;
while(1)
{
*pdat = 0x0; //0 - LED OFF
//delay
for(i = 0;i<500000;i++);
*pdat = 0x01; //1 -- LED ON
for(i = 0;i<500000;i++);
}
}
編好后添加到工程中。
上面的程序風(fēng)格顯然是不可取,只是為了直觀,具體請(qǐng)參考附件:?LED.zip
接好JLINK,點(diǎn)擊DEBUG AND DOWNLOAD按鈕就能在板子上看到現(xiàn)象并能進(jìn)行調(diào)試。
水平有限,如果有錯(cuò)誤的地方,請(qǐng)指正,thanks
cjok.liao@gmail.com
總結(jié)
以上是生活随笔為你收集整理的iar 连接linux开发板,LED裸机程序(IAR)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中用户验证的方式,在php中进行用
- 下一篇: linux下的驱动大小,(转)Linux