[[FrontPage]] 2009/05/25 からのアクセス回数 &counter; #contents ARMは、CPUコアは同じでも周辺IOの処理が各社まちまちなのが難点でした。 ARMlibは、安価に使えるLPC2000やAT91シリーズのCPUをターゲットに - タイマー - RS232C通信 - I2Cマスター - SPIインタフェース - FATファイルシステム - ネットワークライブラリ を提供し、ARMの組み込み開発を容易にします。 ** armlib [#f69648d7] AVRlibを出しているProcyonから、 [[Procyon ARMlib>http://hubbard.engr.scu.edu/embedded/arm/armlib/index.html]] が出ています。 最初は、LPC2000をベースに開発していたみたいですが、atmelのat91シリーズ、aduc7000も 不完全ながら、サポートしているみたいです。 ** SAM7S256でarmlibを使う [#o18c7761] ARMlibのサンプルでは、SAM7S256用のサンプルがないので、この例題はAT91シリーズの ユーザによい例になると思います。 *** ARMlibのインストール [#p31e65f9] [[Procyon ARMlib>http://hubbard.engr.scu.edu/embedded/arm/armlib/index.html]] のページにアクセスし、 - ARMlib including docs and examples (zip file, 1.3M , Monday November 06, 2006 ) をクリックするとZIPファイルがダウンロードされます。 - 適当な場所に解凍します、私は~/local/arm/armlibに入れました。 - 環境変数ARMLIBにarmlibの場所をセットします、私はターミナルで自動的にセットされるように.profileに 以下のように設定しました。 #pre{{ export ARMLIB=$HOME/local/arm/avrlib }} これで、インストール完了です。 詳しくは、 [[Installing ARMlib Manually>http://hubbard.engr.scu.edu/embedded/arm/armlib/docs/html/install.html]] を見てください。 *** makefileの変更 [#o590ad91] サンプルから、&ref(makefile); をコピーし、以下の項目を変更します。 - TRG : ターゲット名は、Armlibを使い慣れるまでmainを使います。&ref(script.ocd); やデバッグ時の設定が同じ方が操作を習得しやすいから。 - ARMLIB : armlibのインストール場所を設定します。 - ARMLIB_ARCH_SRC, ARMLIB_SRC : 使用するライブラリのソファイル名を指定します。 - LDFLAGS : リンクコマンドファイル名を指定します。 makefileの設定例を抜粋します。 #pre{{ TRG = main ARMLIB = $(HOME)/local/arm/armlib ARCH = at91 ARMLIB_ARCH_SRC = processor.c uart.c ARMLIB_SRC = rprintf.c }} Armlibを使った最初の、例題は、RS232C経由でターミナルにHello worldを表示するものです。 使用する評価ボードはOlimexの [[AT91SAM7S256ボード>http://www.olimex.com/dev/sam7-p256.html]] です。 - ARCH : at91を指定します - ARMLIB_ARCH_SRC : processor.c uart.cはCPUタイプに依存するので、ARMLIB_ARCH_SRCで指定します - ARMLIB_SRC : rprintf.cはライブラリ共通なので、ARMLIB_SRCで指定します - LDFLAGS : at91sam7s256-rom.ldをリンクコマンドとして指定します *** global.hを設定 [#j76b466a] 次に、必要なファイルは&ref(global.h);です。 最初はどうやって設定すればよいか分かりませんでした。 AT91SAM7S256のサンプルプログラムのコメントを頼りに、以下のように設定しました。 - F_CPU : 外付けクリスタルの周波数を設定します、ここでは18.432MHzなので47923200としました。 - OSC_DIV : サンプルのコメントでは、OSC_DIVを5としているので、ここでは5を使用しました。 - PLL_MUL : PLLとF_CPUの関係は以下のようになっています、この式からPLL_MULを25としました。 -- PLL = (18.432/OSC_DIV*(PLL_MUL+1) => 95.8464MHz -- F_CPU = PLL/2 =>47.9232MHz #pre{{ #ifndef GLOBAL_H #define GLOBAL_H // global ARMLIB defines #include "armlibdefs.h" // global ARMLIB types definitions #include "armlibtypes.h" // project/system dependent defines // 18.432MHz Ex-Osc. // PLL = (18.432/OSC_DIV*(PLL_MUL+1) => 95.8464MHz // F_CPU = PLL/2 =>47.9232MHz #define F_CPU 47923200 #define OSC_DIV 5 #define PLL_MUL 25 #endif }} *** main.c [#mff3a5c0] 最後に&ref(main.c);について説明します。 - インクルードファイル -- global.h : 使用するボードの設定情報をインクルード(マシン依存する部分は、ここに押し込む)する -- 使用するライブラリのヘッダファイルをインクルードする - main関数 -- processorInit : 使用するCPUの初期設定を行う -- uart0Init : RS232Cライブラリの初期設定を行う(ボーレート9600, 8ビット、ノンパリティ、ストップビット1) -- rprintfInit : rprintf の初期設定を行う、rprintfで使用するライブラリの文字出力関数を設定する。 -- rprintf : hello world\nを出力する。 #pre{{ #include "global.h" // include our global project settings #include "processor.h" // include processor initialization functions #include "uart.h" // include uart library functions #include "rprintf.h" // include printf library functions int main(void) { // initialize processor processorInit(); // initialize uarts uart0Init(UART_BAUD(9600), UART_8N1); rprintfInit(uart0SendByte); // run the test rprintf("Hello World\n"); return 0; } }} ** プログラムの書き込みと実行 [#yc6e1387] [[arm/LED点灯の作成とデバッグ]]と同様に作成したプログラムをROMに書き込みます。 ROMへの書き込みには、script.ocdとopenocd-rom.cfgを使用します。 ターミナルで、プロジェクトディレクトリに移動した後、 #pre{{ $ make $ openocd -f openocd-rom.cfg }} 書き込みが完了したら、 - RS232Cケーブルを接続し、 - 端末ソフトを起動、ここではjermを起動します。 - TAGライターをケーブルを外して、ボードの電源を入れ直してください。 - AT91SAM7S256ボードのジャンパーは、RXD0, TXD0に(写真手前のピンに接続)してください。 &ref(uart.jpg); #pre{{ $ jerm -s 1 -p none -b 9600 /dev/cu.usbserial-FTBOK946 Jerminal v0.8095 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 candy Type "Ctrl-M ~ ." to exit. ispeed 9600 ospeed 9600 jermの初期メッセージ途中省略 Hello World }} と出たら、成功です。 Armlibを使うととても簡単にRS232Cを使って端末ソフトと通信できます。 また、使用するARMのアーキテクチャをLPC等他のCPUに変えても、プログラムの変更は少なくてすみます。 ** コメント [#qf94e4e2] この記事は、 #vote(おもしろかった,そうでもない,わかりずらい) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha