• カテゴリ TOPPERS の最新配信
  • RSS
  • RDF
  • ATOM

ブログ - TOPPERSカテゴリのエントリ

STM32F205上でTOPPERSを動かそうと思ったら、ターゲットにSTM32F205が見つからなかったので、新規に作成することにしました。
TOPPERS/ASPの導入については過去のブログを参考にしています。TOPPERSのバージョンは最新の1.7にしました。

使ったもの

環境の構築

1.Cygwinのインストール

CygwinのWEBサイトからsetup.exeをダウンロードして実行しました。インストール方法は簡単なのでここでは省きます。

2.TOPPER/ASPカーネルの準備

TOPPERS/ASPカーネル簡易パッケージからLM3SXXXX簡易パッケージのasp_lm3sxxxx_gcc-20110801.tar.gzをダウンロードして、c:\cygwin\home\ユーザー名\ (ユーザー名はWindowsにログインしているユーザ名)に解凍しました。c:\cygwinはCygwinのインストールフォルダです。C:\cygwin\home\ユーザ名フォルダはCygwin端末ログイン時のホームディレクトリになります。
コンフィギュレータは実行モジュールが用意されていますので、このまま使用します。

3.書き込みツールの準備

STEVAL-PCC010V2にはJTAGコネクタが用意されているので、TINY JTAG-ICE2を使用することにしました。これでプログラムの書き込みソフトウェアとしてGCC Developer Liteに付属するFlash WriterとopenOCDが使用できるようになりました。

TOPPERS/ASPのコンパイル

取りあえずSTEVAL-PCC010V2で動くことを確認したいので、プログラムはLEDの点滅程度の機能とします。

1.ユーザーズマニュアルを確認します

ユーザーズマニュアルはc:\cyginw\home\ユーザー名\asp\doc\user.txtですが、EUCコードとなっているためEUC対応エディダで開きます。基本は以前のバージョンと変わっていないようです。

2.サンプルプログラムのコンパイル

Cygwinのコンソール画面を起動したら、perlコマンドを実行します。が、ユーザプログラムと必要なファイルを作成しているだけなので今回はsampleフォルダを使用することにして実行しません。
次にコンパイラですが、gccはGCC Developer Liteを使用するので、Cygwinユーザのホームディレクト配下の.bashrcファイルのPATH変数に以下の通り追加しました。インストール先を変更していた場合は変更したフォルダを指定して下さい。
export PATH=${PATH}:"/cygdrive/c/Program Files/BestTech/GCC Developer Lite/GCC/ARM/bin"
依存関係ファイル(Makefile.depend)は何に使用しているか不明だったので、makeだけ実行することにします。が、当然の如くエラーが発生しました。コンパイルの前に色々と準備が必要のようです。

3.ターゲットの作成

最初に、target/lm3sxxxx_gccフォルダをstm32f205_gccに変更します。変なフォルダ名ですが、決まり事なので従いましょう。stm32f205_gccをターゲット依存部と呼びます。doc/porting.txtの「2.システム構築環境のターゲット依存部」に詳細な記述があります。
名称変更したらのターゲット依存部の修正開始です。
まずはヘッダファイルから。
lm3sxxxx.hをstm32f205.hに名前変更し、TMAX_INTNOを15+80に変更します。
lm3sxxxx.hをインクルードしていたヘッダファイルは全てstm32f205.hに書換え、余分なインクルード文(inc/hw_ints.h等)も削除します。更にtarget_syssvc.hのTARGET_NAMEをSTM32F205に変更した後、taget_timer.hのTIMER_CLOCKを(120000)に設定します。今回は動けば良いのスタンスであるため、値の精査をしていません。TIMER_CLOCKはTOPPERSカーネル内で時間用に使用しているようなので、想定時間と違っていたらここを修正します。
修正したヘッダファイルはtarget_timer.h/target_serial.h/target_config.h/target_syssvc.hです。
次にtarget_config.cを修正します。
こちらも余計なインクルード(inc/hw_ints.h等)を削除し、target_initialize関数からコア依存の初期化以外を削除します。core_initialize関数の呼出し前にクロックの初期化を追加します。ざっくりと記載します。
レジスタ等の詳細はSTMicroelectronics社さんからダウンロード可能なリファレンスで確認して下さい。

#define RCC_CR        (*(volatile uint32_t *)0x40023800)
#define RCC_PLLCFGR (*(volatile uint32_t *)0x40023804)
#define RCC_CFGR (*(volatile uint32_t *)0x40023808)
#define RCC_CIR (*(volatile uint32_t *)0x4002380C)
#define FLASH_ACR (*(volatile uint32_t *)0x40023C00)
#define PLL_M 25
#define PLL_N 240
#define PLL_P 2
#define PLL_Q 5
/* 初期化部分 */
volatile uint32_t _up_cnt = 0, _hse_stat = 0;
RCC_CR |= (uint32_t)0x01;
RCC_CFGR = 0x0;
RCC_CR &= (uint32_t)0xFEF6FFFF;
RCC_PLLCFGR = 0x24003010;
RCC_CR &= (uint32_t)0xFFFBFFFF;
RCC_CIR = 0x00000000;
RCC_CR |= ((uint32_t)0x00010000); // enable HSE
while (!(RCC_CR & ((uint32_t)0x00020000)) && _up_cnt++ < (0x0500)); // HSE ready
if (RCC_CR & ((uint32_t)0x00020000)) { // not timeout
RCC_CFGR = (RCC_CFGR & ((uint32_t)0xFFFFFF0F)); // SYSCLK not divided
RCC_CFGR = (RCC_CFGR & ((uint32_t)0xFFFF1FFF) | ((uint32_t)0x00008000)); // PRPRE2 AHB clock divided by 2
RCC_CFGR = (RCC_CFGR & ((uint32_t)0xFFFFE3FF) | ((uint32_t)0x00001400)); // PRPRE1 AHB clock divided by 4
RCC_PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | ((uint32_t)0x00400000) | (PLL_Q << 24);
RCC_CR |= ((uint32_t)0x01000000); // main PLL enable
while (!(RCC_CR & ((uint32_t)0x02000000))); // PLL ready
FLASH_ACR = ((uint32_t)0x00000703);
RCC_CFGR = (RCC_CFGR & (uint32_t)((uint32_t)0xFFFFFFFC) | ((uint32_t)0x00000002)); // PLL used as the system clock
while (RCC_CFGR & ((uint32_t)0x0000000C) != ((uint32_t)0x00000008));
}
最後にtarget_fput_log関数がありますので、内容を削除して空の関数とします。
次はMakefile.targetの修正です。
セグメントの開始アドレスを追加したらlm3sxxxx用の記述を削除して、stm32f205用に書き換えるだけです。大した修正ではないので詳細は省きます。
次にリンカスクリプトを作成します。今回はstm32f205.ldとしました。Makefile.targetにもそのように記述します。
リンカスクリプトについては出力セクション.textと.rodataはFLASHに配置します。出力セクション.textには.vectorセクションと.textセクションを配置します。出力セクション.rodataには.rodataセクションを配置します。
SRAMに出力セクション.dataと.bssを配置すれば完成です。MEMORY領域の設定はリファレンスで確認して下さい。
続いてsampleフォルダ内の修正です。
今回使用するSTEVAL-PCC010V2はシリアルが外部へ接続されていないので使用することができません。そのため、今回はsyslog関連を使用しないことにしました。
sample/Makefileから以下のファイルを使用しないようを修正します。システムサービスに関する定義のSYSSVC_COBJSに記述があります。
target/stm32f205_gcc/target_serial.c
syssvc/banner.c
syssvc/logtask.c
syssvc/serial.c
syssvc/syslog.c
syssvc/vasyslog.c
他の修正点はTARGETの変更、CFLAGSに-DTOPPERS_OMIT_SYSLOGの追加になります。
-DTOPPERS_OMIT_SYSLOGはカーネル側でもsyslogを使用しており、これを抑止するためのフラグです。
ターゲットファイルをall: $(OBJFILE)よりall: $(OBJNAME).binに変更したらMakefileの修正は完了です。
次にsample1.cfgの編集です。
syslogを使用しないことにしたので、syssvc配下のcfgファイルのINCLUDE文を削除します。
最後にsample1.cの修正です。
まず使用できない部分を削除します。syslog_msk_log関数を使用している最初のSVC_PERRORと、シリアルポートの初期化部分です。タスクについては今回起動しませんので励起しているact_tsk関数部分を削除します。task関数自体を削除する場合はsample1.cfgの修正を行ってください。メインループを空にしたら後は追加です。
STEVAL-PCC010V2のLEDはPE2とPE3に接続されていますので、まずはmain関数の最初に初期化を追加します。
#define RCC_AHB1ENR   (*(volatile uint32_t *)0x40023830)
#define GPIOE_MODER (*(volatile uint32_t *)0x40021000)
#define GPIOE_OTYPER (*(volatile uint32_t *)0x40021004)
#define GPIOE_OSPEEDR (*(volatile uint32_t *)0x40021008)
#define GPIOE_PUPDR (*(volatile uint32_t *)0x4002100C)
#define GPIOE_BSRR (*(volatile uint32_t *)0x40021018)
/* 初期化部分 */
RCC_AHB1ENR |= ((uint32_t)0x00000010); // port E clock enable
GPIOE_MODER = ((GPIOE_MODER & 0xFFFFFF0F) | (uint32_t)0x050); // PE2/PE3 output
GPIOE_OSPEEDR = ((GPIOE_OSPEEDR & 0xFFFFFF0F) | (uint32_t)0x0F0); // PE2/PE3 100MHz
GPIOE_OTYPER = (GPIOE_OTYPER & 0xFFFFFFFB);
GPIOE_PUPDR = (GPIOE_PUPDR & 0xFFFFFFFB);
更にメインループでLEDの点灯と消灯を行います。
#define LED1          0x0004
#define LED2 0x0008
/* メインループ */
while (1) {
GPIOE_BSRR = ((GPIOE_BSRR & 0x0000FFFF) | ((LED1 << 16)));
tslp_tsk (500);
GPIOE_BSRR = ((GPIOE_BSRR & 0xFFFF0000) | (LED1));
tslp_tsk (500);
}
メイン以外の関数は変更しません。これでmakeが通るようになりました。

 

マイコンボードで動かす

STEVAL-PCC010V2はJTAGコネクタが用意されているので、そのままTINY JTAG-ICE2を接続します。

TINY JTAG-ICE2経由でPCとSTEVAL-PCC010V2を接続したら、STM32F205用のopenOCDを起動します。
openOCD起動後、Flash Writerを起動します。書込むファイルはコンパイルしたasp.binを指定します。起動したFlash Writerのタイトルバー左端にあるアイコンをクリックすると、メニューが表示されるので、メニューから「FlashWriter Property」を選択します。すると、Flash Writerのウィンドウが拡大表示されます。

ウィンドウが拡大したら、CPU TYPEにopenOCDを選択し、Write Script Fileにはstm32f2xx_bin_flash.scriptを指定します。PORTは自動でopenOCDが設定されるので指定しません。
実際の書込みには[Execute]ボタンを押下して下さい。書き込み中はそれにかかる処理の状況が逐一ログウィンドウに表示されます。滞りなく成功すればFlash Writerのステータスバーに青色で Successful と表示されます。ログウィンドウは数秒放っておくと自動で閉じてしまうので、エラーメッセージを確認したい場合は気を付けてください。
書込みが完了すると自動でプログラムが実行され、LEDが1秒間隔で点滅し始めました。どうやら無事TOPPERS/ASPをSTM32F205上で実行できたようです。

その後、waitしないタスクをぶん回して割り込みを行ってみましたが、割り込みも問題(遅滞)なく動作しました。旧バージョンでは他のタスクが停止していたはずですが、バージョンアップしたTOPPERかSTM32F205の性能のせいなのか分かりませんが、当初の目的は達成できたのでTOPPERについてはここまでとします。

ToppersとUDP

カテゴリ : 
TOPPERS
2011-8-2 9:45
イマイチ不完全燃焼していたAT91SAMシリーズのUDP(USB Device Port)とToppersの相性。
現状諸々の処理が多重化すると、カーネルもろともデッドロックしてうんともすんとも言わなくなる症状が出てしまいますが、UDPドライバの一部のフラグ待ちによりデッドロックするという要因がありました。
この影響を受けるのはSAM7S_TOPPERS・FREEDOM III・UD3のUSBを仮想シリアルポートとして使用した場合で、かなり広範に渡っています。

早いうちにこの部分を改修し、合わせてFREEDOM IIIライブラリのマイナーバグフィクスを施したGCC Developer Liteを公開します。

FREEDOM IIIライブラリの互換性

カテゴリ : 
TOPPERS
2011-6-7 11:45
まるで何とかの出前みたいに出る出るといってリリースされていないFREEDOM IIIライブラリですが、もう少しだけお待ちください。
旧来との互換性を無視という訳ではないのですが、OSで担える機能はそれに任せることにしたため、かなりの部分で互換性が保たれない状態です。おまけに、内部だけでもんでいる事もあって、毎日のようにかい離してしまっています
その代りと言っては難ですが、サンプルプログラムの拡充を図っていますので、使い勝手の向上を感じていただけるのではないかと思っています。

それと、FDIII-HCのブートローダですが、かなり頑張ってサイズを減らした事で、ユーザプログラムにおいては従来と同様のメモリマップを維持することが出来ました。先行してリリースしようとも考えていましたが、最新ライブラリあって意味を持つのでこちらもひとまずお待ちください。

FDIII-HC Toppers版 かなり良い感じ

カテゴリ : 
TOPPERS
2011-4-18 1:26
昨年ちらっと触れたネタですが、ここに来てやっと完成度が上がってきました。互換性よりも利便性と性能向上が目的だったため、あるべき姿に近づいてきたかと思います。
残念なお知らせとしては、今後FREEDOM IIIライブラリはFDIII-HC専用として提供する事になりますので、旧来のSAM7S I/Oボードでのサポートは現在リリースしているGCC Developer Liteで終了となります。
さらに、最新FREEDOM IIIライブラリを使用するには、FDIII-HC本体のブートローダのアップデートが強要されます。これはブートローダにおいてSDカードを活用するための機能拡張が主になります。

とりあえずこんな感じにコーディングできれば楽しいじゃないですか。

といった所が現在予定している大きな更新ネタです。

FDIIIでToppers

カテゴリ : 
TOPPERS
2010-11-16 22:17
FDIII-HCのブートローダのアップデートと同時に、GCC Developer Liteも新しいライブラリを同梱して公開する旨のニュースがありました。
実際何をやってるかというと、ToppersをFDIII-HCに適用するネタでして、本家ではかなり昔から移植されていたのですが、とっても煩雑なためにGCC Developer Liteのライブラリとして同梱させるまでには至っていませんでした。
既にAT91SAM7S単体とUD3でToppersが使用できるようになっているので、そのリソースを利用してユーザーアプリケーション内でマルチタスクが実現できるように仕込中といった所です。

従来のインターバル割り込みで駆動される似非タスクでは即時復帰を要求されるために、処理時間が長いサブルーチンをバックグラウンドで走らせることができなかったのですが、Toppersのタスクを使用していろんなことを同時にかつテキトーに動かすなんて事が簡単になるはず。

公開までもう少しだけお待ちください。
積極的にタスクをいじり始めてどうやってもおかしげな挙動する事に気付いた。ずーっとコピペで作った別のソースが問題かと思って目を皿のようにして見てても、そこには答えはなかった。
結論から言うとTOPPERSのコンフィギュレーション(正解なのかは別)。適当にCRE_TSKを列挙してちゃいけないみたいなのねん。とりあえずmainタスクを先頭に書いたらRESUMEもSUSPENDも意図した通りに動く様になったので良しとする。

という事で、GCC Developer Liteに入っているSAM7S_TOPPERSのコンフィギュレーションファイルを修正し、舌の根も乾かぬうちにr4として公開。ついでにUD3が金曜日から販売されるらしいので、余計なAPIを追加したものも入れてある。
指摘があったので chip_time.c と chip_timer.h をちょっと修正。
タイマのインターバルが10kHzになっていたので、1kHzにしました。これでホントに元のサンプルと同じ速度になったかな?
2010/01/29

 

タスクスイッチ用タイマ

タスクを並列に処理しているように見せかけるための機能を実現するのタスクスイッチ用のタイマらしく、マイコンに内蔵された時計を利用して一定間隔で何かしでかす仕掛けの様です。
という事でまだまだ理解が追いついてない状態で、この部分に手を加えてみようというのが今回のネタです。

Periodic Interval Timer (PIT)への変更

タスクスイッチ用のタイマに関するソースは ~/asp/arch/arm_gcc/at91sam7s/chip_timer.c に書かれている様で、ねちねち読むとTimer Counter Channel 0 (TC0)の初期化や割り込み処理ルーチンしかない感じ。それでもって、単純に時間を刻んでいれば良い筈なんだろうと決めつけると、そこそこ高機能なTC0をインターバルタイマとしてだけ使うのは何だかもったいない気がしてきました。
そこで、あまり触れられる機会が少ない Periodic Interval Timer (PIT)で代替できないだろうかと考えました。chip_timer.c ではTC0の初期化や割り込み処理ルーチンしかないので、改造する範囲はかなり少なくて済みそうだからという憶測も手伝い、改造を英断。

またもやドキュメントを中途半端に読みつつ、何度か試行錯誤しながら処理方法を模索し、ホントに後々問題にならないのかは全く自信が無いまま、とりあえず関係するソースを修正して再度のコンフィギュレーションしなおした asp.bin が#1と同じ動きをしたならば良しと決めました。
まずはTC0を使用するように記述されている ~/asp/arch/arm_gcc/at91sam7s/chip_timer.h と ~/asp/arch/arm_gcc/at91sam7s/chip_timer.c の該当箇所をPIT化し、以下のコマンドを実行してサンプルプログラムをコンパイル。
cd ~/asp/OBJ
make clean
make depend
make asp.bin
おや? make depend をした段階で、何やら定義の重複エラーが発生したと言ってくる。そんなつもりは無いのだが。おまけに手を入れたトコとは関係ないソースとの競合があるらしい
エラーメッセージから INTNO_SIO をgrepしていくと、適当に修正した chip_timer.h の INTNO_TIMER が、INTNO_SIO に設定されている INTNO_SYSIRQ_PID と同じ値だという事らしい。どうやらPITは他のペリフェラルのいくつかと割り込みベクタが共通になっている事が原因っぽいけど、ダメな理屈は分からない状態で難儀する事に。

ドキュメントを読もう!

悩むこと数年、試行錯誤で修正しても何ら解決しそうになかったので、マジメに資料を読むしかない!という事に行き着きました。

割り込みベクタを共有したい場合の方法については、~/asp/doc/configurator.txt の「(5-2-1) 割込みハンドラの生成」に共有になっている場合に使用できそうな内容が記述されています。これを参照しながら  chip_timer.cfg と、関係がある事すら意識していなかった競合相手 dbgu_serial.cfg を修正。
「割り込みハンドラの生成」はGCC Developer Liteのsam7sターゲットでSYSIRQの分岐処理として提供されている sys.c みたいなコードを使ってるとダメらしく、割り込みハンドラ側でフラグをちゃんと見ないといけない事も判明 (chip_timer.c の target_timer_handler と、dbgu_serial.c の sio_isr)。

動作確認

再度 make depend を実行し、文句は言ってこなくなった様なのでひとまず改造はOKといった所でしょうか。make asp.bin を実行。completeの文字が表示されて ~asp/OBJ/asp.bin が作成されていればコンパイルは成功。さっそく書き込んで動作を見てみましょう。
#1と同じ動きをしましたかね? dbgu_serial.c もいじくったので大丈夫か不安だったのですが、sample1.c の中身は別として同じ動きをしている気がしますがいかがでしょう。

※元のソースからの差分はこちらからダウンロードできます。最終段階の動くであろうと思われるソースになっていますので、~/aspフォルダに上書きして使ってください。

 

TOPPERSについて

TOPPERSはRTOSの1つでITRON仕様のオープンソースソフトウェアとして公開されているOSです。TOPPERSの詳細は http://www.toppers.jp/project.html を参照してください。

マイコン上でプログラムを作成する場合でも、OSがタスク制御とかをやってくれるのでマルチタスクのプログラムが作成し易い?はずです。数回に分けてTOPPERSをAT91SAM7Sに搭載させてマルチタスクOSによるプログラミングに挑戦してみます。

今回は公開されている情報をトレースし、今現在でも同様の手順で再現できるかを試してみたいと思います。動作を保証するものでもサポートされるものでもありませんが。

用意するもの


環境の構築

1.Cygwinのインストール
CygwinのWEBサイトからsetup.exeをダウンロードし実行します。

インストール中に要求されるダウンロードサイトを適宜選択し、パッケージの選択でDevelカテゴリのmakeをインストールする様にする以外はデフォルトのまま進んで構わないでしょう。

しばらくしてインストールが完了したら、ちょっとだけ修正作業をしておきます。windowsのコマンドプロンプトを起動し、以下の通り打ち込みます。
cd c:\cygwin\bin
ash rebaseall -v
この措置を講じておかないと、後々perlの処理に支障をきたします。


2.ARM用gccの準備
こちらのWEBサイトから yagarto-bu-2.20_gcc-4.4.2-c-c++_nl-1.18.0_gdb-7.0.1_20091223.exe をダウンロードおよびインストールします。
デフォルトの設定でインストールを進めて構いません。

3.TOPPERS/ASPカーネルの準備
TOPPERS/ASPカーネルTOPPERS/ASPカーネル簡易パッケージから 「BTC090(ベストテクノロジ)簡易パッケージ」を使用します。
ダウンロードしたファイルをc:\cygwin\home\ユーザー名\ (ユーザー名はWindowsにログインしているユーザ名)に解凍します。
解凍した後のフォルダイメージはこのような感じになっていれば良いはずです。


4.カーネル用コンフィギュレータの準備
TOPPERSカーネルコンフィギュレータよりコンフィギュレータ Release 1.5.0(Windows用バイナリ)をダウンロードし、c:\cyginw\home\ユーザー名\asp\cfg\cfg (ユーザー名はWindowsにログインしているユーザ名)へ解凍します。
同名のファイルがあれば上書きして構いません。

5.書き込みツールとシリアルターミナルの準備
マイコンへのプログラム書き込み用ソフトウェアとしてGCC Developer Liteに付属するFlash WriterとopenOCDを使用します。
その他、プログラムの動作確認をするために汎用のシリアルターミナルプログラムを用意しておきます。GCC Developer Liteに付属のSIMPLE TERMでひとまず事足りるでしょう。

ひとまず必要なファイルの類の準備が終わりました。

TOPPERS/ASPをコンパイルしてみる

1.ユーザーズマニュアル
~/asp/doc/user.txt  がユーザーズマニュアルになっています。必要な情報の大半が記述されているのですが、windowsのメモ帳で開くと文字化けして読めないので、ms wordやもうちょっとインテリジェンスなテキストエディタで参照しましょう。
ここまでの作業は、「3.クイックスタートガイド」の3.1~3.2に記載された内容と同等です。

2.サンプルプログラムのコンパイル
user.txt の「3.3 サンプルプログラムの構築と実行」に記載された手順を追えばコンパイルできる様ですので、順に作業してみます。
Cygwinのコンソールを起動し、以下のコマンドを順に実行します。
cd ~/asp
mkdir OBJ
cd OBJ
perl ../configure -T btc090_gcc
実際の画面はこのような結果になるはずです。

この操作によりコンフィギュレーションが行われます。

特に問題がなければ、最終段階のサンプルプログラムのコンパイルを行います。引き続きCygwinのコンソール上で以下のコマンドを順に実行します。
make depend
make
しかしながら、使用したコンパイラのせいなのか、提供されているファイルがイマイチよろしくないのか、make depend を実行した時点でerrorが発生したと言ってくると思います。


とりあえず動けばOKという事で、~/asp/arch/arm_gcc/at91sam7s/at91sam7s.ldファイルをこちらのもので置き換えて、再度 make depend を実行します。文句は言ってこなくなったので、処理が完了した様です。


それでは最後に make を実行してコンパイルを行います。ずらずらと処理中の状況が表示された後に complete の文字が表示され、~asp/OBJ/asp.exe が作成されていればコンパイルは成功です。


続きCygwinのコンソール上で以下のコマンドを順に実行します。
cd ~/asp/OBJ
arm-elf-objcopy -O binary -S asp.exe asp.bin
これにより ~/asp/OBJ/asp.bin ファイルが作成され、マイコンボードに書き込むためのファイルができあがりました。

マイコンボードで動かす

マイコンボードへの書き込み手段は複数ありますが、ここではJTAGを介して書き込んでみます。
また、サンプルプログラムはDBGUポートを使用してシリアル通信でメッセージを送受信するように作られていますので、SIMPLE TERMを使用して動作を確認してみます。

1.openOCDの起動
GCC Developer LiteはSAM7Sのターゲットを前提としてインストールしてあるものとします。
  • TINY JTAG-ICE2をPCのUSBポートに装着(デバイスドライバのインストール要)
  • BTE077のI/OボードのCN3とTINY JTAG-ICE2のJTAGコネクタをフラットケーブルで接続
  • AT91SAM7S256マイコンボードのCN3とTINY-ICE2のRS232Cコネクタをシリアルケーブルで接続
  • AT91SAM7S256マイコンボードのSW1をSAM-BAとは反対側に切り替え
  • BTE077のI/Oボードに外部電源を接続し、I/OボードのSW1をONにして電源を供給

GCC Developer Liteを起動し、ツールバーから openOCD(SAM7S) をクリックしてopenOCDを起動します(最小化されたコマンドプロンプトがタスクバーに収まっているはず)。もし起動しないようであれば、ケーブルの接続や電源、ドライバのインストール等をチェックしましょう。また、外部からマイコンボードのFLASH書き換えやJTAG接続を使用不能にする設定になっている場合もありますので、その場合はこちらを参照して対処してください。

2.Flash Writerで書き込み
Flash Writerは先ほど出来上がったasp.bin ファイルを openOCD を介してマイコンボードへ書き込みを行うツールです。
GCC Developer LiteのツールバーからFlash Writerを起動します。

起動したFlash Writerのタイトルバー左端にあるアイコンをクリックし、表示されるメニューから「FlashWriter Property」をクリックすると、Flash Writerのウィンドウが拡大します。

ウィンドウが拡大したら、以下の様に設定します。
  • CPU TYPE: openOCD
  • PORT: openOCD
  • Write Script File: at91sam7_bin_flash.script

ちなみにopenOCDが起動していないとPORTのドロップダウンリストにはopenOCDが列挙されません。起動しているにもかかわらず列挙されない場合は「Rescan」とある部分をクリックしてみてください。
また、Write Script Fileのドロップダウンリストには似たような名称のものがいくつも列挙されますが、間違いなく「at91sam7_bin_flash.script」を選択しましょう。
最後にファイルを開くアイコンをクリックして先ほど作成した asp.bin を一番上のテキストボックスに設定します。

これでおそらく書き込む準備が完了したはずなので、「Execute」をクリックして書き込み処理を開始させます。書き込み中はそれにかかる処理の状況を逐一ログウィンドウで表示し、滞りなく成功すればFlash Writerのステータスバーに青色で Successful と表示されます。


3.SIMPLE TERMで動作確認
書き込み処理が成功してさえいれば、書き込み処理終了と同時にマイコン上でプログラムがスタートしているはずですが、マイコンボードの外観からは何らその様子をうかがい知る事ができないのが残念なところです。
~asp/OBJ/sample1.c を眺めると syslog 関数でテキストを吐いているだけで、LEDやブザーの類までを扱っている様には見受けられません。入力は serial_rea_dat でDBGUからシリアルデータを取得してswitch文でなにやら分岐しています。ということで、シリアルターミナルの出番です。
GCC Developer LiteのツールバーからSIMPLE TERMを起動し、SIMPLE TERMのファイルメニューのプロパティをクリックし、表示されるダイアログボックスを以下の様に設定します。
  • Connect to: COM??? (???はTINY JTAG-ICE2のRS232Cで増設されるCOMポート番号)
  • Baudrate: 38400 bps
  • Databits: 8 bit
  • Stopbits: 1 bit
  • Parity: Non
  • Flow Control: Non


ではSIMPLE TERMのツールバーから「指定ポートを開く」ボタン(電話のアイコン)をクリックしてみましょう。「task1 is running (????).」の表示が延々と表示され続けていれば間違いなく書き込まれたプログラムが動いている証拠です。

マイコンボードのリセットボタンを押してプログラムを再起動してみると、実行を開始したことを意味するメッセージの後に、再度「task1 is running (????).」が表示され続けます。sample1.c のソースを眺めながらswitch文で列挙されているキャラクタをSIMPLE TERMのターミナルウィンドウ上で入力してみて、何かしら表示が変化すればなおOKってところでしょうか。


ここでは sample1.c がどういった挙動をするものかまでは説明しませんので、よく眺めた上で遊んでみてくださいね。

それと、今回使用したマイコンボードはAT91SAM7S256という事で、デフォルトで想定しているAT91SAM7S128とは異なっています。両者の違いは内蔵されるメモリのサイズ程度と思えば、メモリの小さいAT91SAM7S128として構築したものをメモリの大きいAT91SAM7S256に書き込んだ所で何ら支障はありません。