ARM基板向けのプログラムをシミュレーションで動作確認 ―― Interface 2009年5月号付属基板を一足先に体験

三好 健文

tag: 組み込み Interface

技術解説 2009年3月17日

4.動作を詳細に観察してみよう

 今度は,実際にプログラムで記述した動作とシミュレーションの振る舞いについて,もう少し詳細に見てみましょう.FirstProjectは,タイマによって定期的にI/Oポートへデータを出力し,LEDを点滅させるプロジェクトです.ここでは,I/Oポートに正しくデータが出力されているか,またタイマが動作しているかを確認してみましょう.

●I/Oポートへのデータ出力の確認

 FirstProjectのmain.cを改めて眺めてください.main.cには,LEDを点滅させるための二つの関数,LED_ONとLED_OFFが定義されています(リスト1)
[リスト1] LED点滅関数(main.cの39行目から47行目まで)

/* LED を点灯する処理*/
void LED_ON() {
*FGPIO_FIO1PIN=0x00000000; /* P1[18] を'0'に(LED を点ける) */
}
/* LED を消灯する処理*/
void LED_OFF() {
*FGPIO_FIO1PIN=0x00040000; /* P1[18] を'1'に(LED を消す) */
}

 LED_ONでは,LEDを点灯させるためにFPGIO_FIO1PINに0x00000000を,またLED_OFFでは,LEDを消灯させるために,FPGIO_FIO1PINに0x00040000;をセットしています.本当にこれらの値がFPGIO_FIO1PINにセットされ,それと同時にLEDが点灯あるいは消灯しているのでしょうか.シミュレータを使って確かめてみましょう.

 FGPIO_FIO1PINは,アドレス0x3FFFC034にマッピングされているレジスタです.VPA上ではFGPIO_1中のFIOPINというレジスタに相当します.まずはこのレジスタおよび値をVPN上で表示しましょう.左ペインのデバイス・ツリー上からFGPIO_1の項目で右クリックし,コンテクスト・メニューから「Register View」を選択すれば右ペイン中にレジスタ名とその値が表示されます.折り畳まれているFGPIO_1を展開し,さらにその下の階層のm_regsを展開すると,図15に示すように今回着目するFIOPIN,すなわちプログラム中でFGPIO_FIO1PINとして指しているレジスタを発見することができます.

f15.gif
[図15] FGPIO_FIO1PINに相当するレジスタを表示する

 さて,シミュレーションを実行しながら,このレジスタの値と付属基板のLEDの点滅を眺めてみましょう.するとFIOPINの値が,0x0になったり0x40000になったりしている様子が観察できますね.また,付属基板GUIのLEDを観察すると,FIOPINの値の変化に伴って点滅を繰り返していることが分かります(図16)

f16.gif
[図16] FGPIO1へ出力する値に従ってLEDが点滅する

●タイマの動作確認

 レジスタに正しく値が出力され,またLEDの点滅に対応している様子が確認できました.次は,シミュレータを用いてタイマが動作していることを確認してみましょう.タイマの基本的な動作は,指定した値になるまで,タイマ・カウント用のレジスタの値を1ずつ加算(インクリメント)していくというものです.タイマの指定値が正しくセットされていること,タイマ・カウント用のレジスタの値が正しくインクリメントしていることと,そして指定値までインクリメントした後は,値が0になり繰り返しタイマ・カウントがインクリメントされている様子を観察してみましょう.
 タイマの設定部分をリスト2に示します.ここでは,タイマの終了条件として,0x00080000*4すなわち,0x00200000がセットされています.
[リスト2] タイマの設定部分(main.cの86行目~88行目まで)

*TIMER0_PrescaleRegister = 0x00000000;
/* プリスケール無し*/
*TIMER0_MatchRegister0 = 0x00080000 * 4;
/* MC0 = 0.5M * 4M */
*TIMER0_MatchControlRegister = 0x00000003;
/* Match 時にTC クリア& 割り込み*/

 それではシミュレータ上で,タイマに関する値を観察してみましょう.タイマは,左ペインのデバイス・ツリー上にTIMERという名前で登録されています.TIMERの上で右クリックし,コンテクスト・メニューから「Register View」を選択し,右ペインのTIMER中のレジスタのツリーを展開すると,図17のような画面が表示されます.

f17.gif
[図17] タイマに関するレジスタの表示

 さてシミュレーションを実行してみましょう.まずプログラムを実行すると,T0MR0とT0MCRの値が,ぞれぞれ0x200000と0x3にセットされます.また,T0TCの値が徐々にインクリメントされていく様を観察することができます.しかも,T0MR0にセットされている0x200000に到達すると,T0TCの値はまた0に戻ってインクリメントを繰り返していることが分かります.図18のスクリーン・ショットでは,タイマ・カウンタの値が更新されて赤色で表示されています.

f18.gif
[図18] タイマがインクリメントされていく様子

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日