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