Transcript Document
開發環境安裝
ICE模擬器(In Circuit Emulator)
微處理機中附有程式,當這些程式發生問題時,微處
理機並不能知道這些程式跑到哪裡去了,這時就要靠
ICE來模擬微處理機,讓ICE告訴我們問題出在哪裡。
ICE 可以讓我們在程式執行時檢視處理器的狀態。ICE
有自己的 RAM, ROM, processor 及軟體,本身就是一
套嵌入式系統,功能強大,可以代替真實CPU接至待
測電路板,配合操作軟體,模擬CPU動作,可設定軟、
硬體中斷及單步(Step)執行。
Domingo for Linux 操作
啟動Domingo整合開發環境軟體
Domingo for Linux 操作
選擇New Project
PCM之使用
因為ARM的CPU內有很多系統設定暫存器,若未初始
化這些特殊的暫存器,系統是無法使用的,而所需設
定的暫存器有很多,所以設了一個PCM檔案來簡化初
始化的動作。
PCM之使用
在Config PCM視窗點選 “Import”
PCM之使用
選擇creator_ram.pcm系統記憶體初始化模組檔
PCM之使用
選取 “OK” 初始化系統設定暫存器
ICE與Creator連線
點選工具列上
Debug->Connect按鈕,
讓ICE模擬器與Creator主板連線
在Domingo下編譯範例程式
在開啟的project上->右鍵選單->Add Target
在Domingo下編譯範例程式
Complier Tools選擇IAR ARM
在Domingo下編譯範例程式
在TOOLKIT_DIR欄位選擇Compiler檔案路徑
在Domingo下編譯範例程式
在開啟的Target上->右鍵選單->Target Manager
在Domingo下編譯範例程式
File Type選擇 C/ASM file(*.c,*h,*.s79,*.asm,*.s)
從範例程式的目錄下選擇所有檔案->Add File(s)
在Domingo下編譯範例程式
系統初始化程序(cstartup.s79)
中斷向量的初始化
記憶體管理系統的初始化(4510addr.h)
堆疊區的初始化
CPU工作模式的初始化
程式碼區段的初始化
資料區段的初始化
其他必要的初始化
啟動中斷
進入 main() 程序
在Domingo下編譯範例程式
在Domingo下編譯範例程式
在Domingo下編譯範例程式
在Domingo下編譯範例程式
在Domingo下編譯範例程式
XLINK -> Config -> XCL file name欄位
1.勾選Override default
2.編輯欄位新增指定之範例程式目錄下的
Demo_Creator.XCL檔
在Domingo下編譯範例程式
完成complier選項設定後在Target上 -> 右鍵選單
-> Build ALL Target
在Domingo下編譯範例程式
Compile 詳細過程在 Console 視窗可見
在Domingo下編譯範例程式
Compiler成功後再將可執行檔(*.d79) Download到
ICE上,可參考下列兩種方式:
A、執行 Toolbar 上的快捷鍵
或
使用 Debug -> Load Module指令。
B、執行 Project -> Make and Load 指令,同時執行
Make 及Load Module 動作。
單步指令執行1
Step Over(不進入副程式)
Debug Toolbar上
快捷鍵
單步指令執行2
Step Into(可進入副程式)
Debug Toolbar上
快捷鍵
設定中斷點
Free GO
設定中斷點
工具列 -> view -> break
右鍵選單->
Edit S/W Break
設定中斷點
Pass Count:
當執行點通過某一
行列特定次數後,
其斷點條件才成立
int main(void)
{
unsigned int i;
for(i=0;i<5;i++)
{
IO_REG2 = 0xfe00;
led_test();
IO_REG2 = 0xf000;
}
}
Program Window
中斷執行結果
R4暫存器對應變數 i 值
執行前,i=0
執行後,i=2
週邊I/O map
I/O
offset
說明
IO_REG0
IO_REG1
IO_REG2
0X0C00
0X0C02
0X0C04
7 Segment(七段顯示器)
Switch和Keypad讀入
LED和Keypad Scan輸出
Ox3F00C06
Ox3F00C04
Ox3F00C02
Ox3F00C00
Ox3F00000
IO_REG2
2byte = 16bits
IO_REG1
2byte = 16bits
IO_REG0
2byte = 16bits
各I/O之位元定義
bit
Reg
IO_REG0
IO_REG1
7
6
5
4
3
2
1
0
15
14
13
12
11
10
9
8
SEG_H
SEG_G
SEG_F
SEG_E
SEG_D
SEG_C
SEG_B
SEG_A
COM3
COM2
COM1
COM0
S1.3
S1.2
S1.1
S1.0
SCAN_
I3
SCAN_
I2
SCAN_
I1
SCAN_
I0
SCAN_
O3
SCAN_
O2
SCAN_
O1
SCAN_
O0
D3
D2
D1
D0
S1.7
S1.6
S1.5
S1.4
IO_REG2
D7
D6
D5
D4
LED & DIP Switch
LED
Creator提供之LED(D0~D7),邏輯0代表亮,邏
輯1代表滅
DIP SWITCH
Creator提供之switch(S1.0~S1.7),邏輯0代表
ON,邏輯1代表OFF
延遲(Delay)
利用延遲達到閃爍的效果
Delay (UI ms)
EX:
IO_REG2 = 0xfe00; //D0 亮
Delay (1000);
//延遲1秒
IO_REG2 = 0xfd00; //D1 亮
Delay (1000);
//延遲1秒
範例程式(led_example)
實習
實習一:載入led_example,寫一個跑馬燈程式,從左到右亮LED,再從右
亮到左。(每個LED delay 0.5秒)
實習二:接續實習一,增加SWITCH控制,使SWITCH做對應遮罩。
(S1.0 ON則D0不亮,S1.1 ON則D1不亮……以此類推)
實習三:接續實習二,將跑馬燈改成如下所示,
SWITCH則改成ON後作相反動作。
(S1.0 ON,若原本D0不亮,則改成D0亮;反之若原本D0亮,則
改成D0不亮……以此類推)
作完請找助教檢查
Hint : AND( & ), OR( | ), XOR( ^ ), NOT ( ~ ), 左移 ( << ), 右移 ( >> )