2009/05/20 からのアクセス回数 11577
組み込みソフトで最初のプログラムは、いつもLEDの点滅です。 Interface 2009/5月号では、LEDの点滅プログラムに割り込みを使っていましたが、 これは大きなルール違反です。
最初のプログラムは、できるだけシンプルにし、最低限の設定にしないとうまく動かなかった 時に、原因の切り分けが難しくなります。
今回のプログラムは、 nandさんのテストプログラム を参考に、Olimex のサイトにあった LED を点滅させるプログラムから、crt0.S, リンクコマンドファイル を修正し、必要最低限にカットしました。
最初に、Eclipseに組み込み用Cのプロジェクトを作成します。 File->New->C Project...を選択するか、図の用に右クリックでC Project...を選択します。
次にProjectnmae:にプロジェクト名を入力します。ここでは、sam7s-t0としました。 Project type:として、Makefile projectのEmpty Projectを選択し、-- Other Toolchain --を選択して Finishボタンを押します。
プロジェクトができたら、src.zipを解凍し、srcフォルダ以下のファイルをプロジェクトにドラッグします。
srcディレクトリには、以下のファイルが含まれています。
main.cは、非常にシンプルです。 PIO_PER, PIO_OERを設定し、2個のLEDを交互に点滅するために、PIO_CODR, PIO_SODRを設定し、 delayで時間間隔をとります。
#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) ; }
この記事は、
皆様のご意見、ご希望をお待ちしております。