FrontPage

2009/05/25 からのアクセス回数 4044

ARMは、CPUコアは同じでも周辺IOの処理が各社まちまちなのが難点でした。

ARMlibは、安価に使えるLPC2000やAT91シリーズのCPUをターゲットに

  • タイマー
  • RS232C通信
  • I2Cマスター
  • SPIインタフェース
  • FATファイルシステム
  • ネットワークライブラリ

を提供し、ARMの組み込み開発を容易にします。

armlib

AVRlibを出しているProcyonから、 Procyon ARMlib が出ています。

最初は、LPC2000をベースに開発していたみたいですが、atmelのat91シリーズ、aduc7000も 不完全ながら、サポートしているみたいです。

SAM7S256でarmlibを使う

ARMlibのサンプルでは、SAM7S256用のサンプルがないので、この例題はAT91シリーズの ユーザによい例になると思います。

ARMlibのインストール

Procyon ARMlib のページにアクセスし、

  • ARMlib including docs and examples (zip file, 1.3M , Monday November 06, 2006 ) をクリックするとZIPファイルがダウンロードされます。
  • 適当な場所に解凍します、私は~/local/arm/armlibに入れました。
  • 環境変数ARMLIBにarmlibの場所をセットします、私はターミナルで自動的にセットされるように.profileに 以下のように設定しました。
    export ARMLIB=$HOME/local/arm/avrlib
    

これで、インストール完了です。 詳しくは、 Installing ARMlib Manually を見てください。

makefileの変更

サンプルから、filemakefile をコピーし、以下の項目を変更します。

  • TRG : ターゲット名は、Armlibを使い慣れるまでmainを使います。filescript.ocd やデバッグ時の設定が同じ方が操作を習得しやすいから。
  • ARMLIB : armlibのインストール場所を設定します。
  • ARMLIB_ARCH_SRC, ARMLIB_SRC : 使用するライブラリのソファイル名を指定します。
  • LDFLAGS : リンクコマンドファイル名を指定します。

makefileの設定例を抜粋します。

	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ボード です。

  • 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を設定

次に、必要なファイルはfileglobal.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
#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

最後にfilemain.cについて説明します。

  • インクルードファイル
    • global.h : 使用するボードの設定情報をインクルード(マシン依存する部分は、ここに押し込む)する
    • 使用するライブラリのヘッダファイルをインクルードする
  • main関数
    • processorInit : 使用するCPUの初期設定を行う
    • uart0Init : RS232Cライブラリの初期設定を行う(ボーレート9600, 8ビット、ノンパリティ、ストップビット1)
    • rprintfInit : rprintf の初期設定を行う、rprintfで使用するライブラリの文字出力関数を設定する。
    • rprintf : hello world\nを出力する。
#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;
}

プログラムの書き込みと実行

arm/LED点灯の作成とデバッグと同様に作成したプログラムをROMに書き込みます。 ROMへの書き込みには、script.ocdとopenocd-rom.cfgを使用します。

ターミナルで、プロジェクトディレクトリに移動した後、

$ make
$ openocd -f openocd-rom.cfg 

書き込みが完了したら、

  • RS232Cケーブルを接続し、
  • 端末ソフトを起動、ここではjermを起動します。
  • TAGライターをケーブルを外して、ボードの電源を入れ直してください。
  • AT91SAM7S256ボードのジャンパーは、RXD0, TXD0に(写真手前のピンに接続)してください。

uart.jpg

$ 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に変えても、プログラムの変更は少なくてすみます。

コメント

この記事は、

選択肢 投票
おもしろかった 0  
そうでもない 0  
わかりずらい 0  

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


(Input image string)


添付ファイル: fileuart.jpg 459件 [詳細] filemakefile 270件 [詳細] filescript.ocd 595件 [詳細] filemain.c 528件 [詳細] fileglobal.h 513件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-05-31 (日) 16:58:57 (2914d)
SmartDoc