[[FrontPage]]

2009/05/20 からのアクセス回数 &counter;

#contents

** サンプルプログラム [#qbca2fe2]
組み込みソフトで最初のプログラムは、いつもLEDの点滅です。
Interface 2009/5月号では、LEDの点滅プログラムに割り込みを使っていましたが、
これは大きなルール違反です。

最初のプログラムは、できるだけシンプルにし、最低限の設定にしないとうまく動かなかった
時に、原因の切り分けが難しくなります。

今回のプログラムは、
[[nandさんのテストプログラム>http://homepage.mac.com/nand/hacks/olimex-sam7p64.html]]
を参考に、Olimex のサイトにあった LED を点滅させるプログラムから、crt0.S, リンクコマンドファイル
を修正し、必要最低限にカットしました。

** Eclipseプロジェクトの作成 [#we68027a]
最初に、Eclipseに組み込み用Cのプロジェクトを作成します。
File->New->C Project...を選択するか、図の用に右クリックでC Project...を選択します。

&ref(eclipse-1.jpg);

次にProjectnmae:にプロジェクト名を入力します。ここでは、sam7s-t0としました。
Project type:として、Makefile projectのEmpty Projectを選択し、-- Other Toolchain --を選択して
Finishボタンを押します。

&ref(eclipse-2.jpg);

プロジェクトができたら、&ref(src.zip);を解凍し、srcフォルダ以下のファイルをプロジェクトにドラッグします。

** ファイルの説明 [#fee86a45]
srcディレクトリには、以下のファイルが含まれています。

- AT91SAM7S64.h: sam7sのヘッダファイルです(Olimexのサンプルから引用)
- crt0.S: Cルート0呼びます。Cのmain関数を呼ぶための前処理をします(Olimexのサンプルを修正)
- main.c: Cのメインプログラムです(nandさんのプログラムから修正)
- Makefile: makeコマンド用の設定ファイルです(nandさんのプログラムから修正)
- sam7s_ram.cmd: リンク用のコマンドファイルで、RAM用のプログラムを作成します(Olimexのサンプルを修正)

*** main.c [#d86c5351]
main.cは、非常にシンプルです。
PIO_PER, PIO_OERを設定し、2個のLEDを交互に点滅するために、PIO_CODR, PIO_SODRを設定し、
delayで時間間隔をとります。

#pre{{
#include "AT91SAM7S64.h"

#define	DELAY_COUNT	5769	// for 18.432MHz (original 6000000 for 48MHz)
void delay(int n);

int main() {
	AT91C_BASE_PIOA->PIO_PER = (1 << 17) | (1 << 18);
	AT91C_BASE_PIOA->PIO_OER = (1 << 17) | (1 << 18);

	for (;;) {
		AT91C_BASE_PIOA->PIO_CODR = (1 << 18);
		AT91C_BASE_PIOA->PIO_SODR = (1 << 17);
		delay(DELAY_COUNT);
		AT91C_BASE_PIOA->PIO_SODR = (1 << 18);
		AT91C_BASE_PIOA->PIO_CODR = (1 << 17);
		delay(DELAY_COUNT);
	}
}

void delay(int n) {
	while (--n)
		;
}
}}


** コメント [#za87c24f]
この記事は、

#vote(おもしろかった,そうでもない,わかりずらい)

皆様のご意見、ご希望をお待ちしております。

#comment_kcaptcha


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc