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 ( ~ ), 左移 ( << ), 右移 ( >> )