要約:MAX-IDEは、MAXQ®マイクロコントローラファミリのための、フル機能のアプリケーション開発/デバッグ環境です。MAX-IDEは、MAXQのすべての標準評価キットで動作するように設計されており、プロジェクトベースの開発環境、MAXQの標準デバッグ機能へのアクセス、統合マクロアセンブラ、およびJTAGインタフェースを使用したインサーキットアプリケーションのローディングを実現しています。
概要
MAX-IDEは、MAXQ™マイクロコントローラファミリのための、フル機能のアプリケーション開発/デバッグ環境です。MAXQのすべての標準評価キットで動作し、以下の機能が用意されています。
MAXQアセンブリアプリケーション用プロジェクトベースの開発環境
すべてのMAXQマイクロコントローラ用の標準ヘッダファイルを含むMAXQマクロアセンブラを内蔵
JTAG/TAPインタフェースとROMブートローダを使用したインサーキットアプリケーションのローディング(フラッシュまたはEEPROM プログラムメモリを備えたMAXQマイクロコントローラ用)
JTAG/TAPインタフェースを経由して利用可能なインサーキットデバッグ機能(ブレークポイント機能、ステップバイステップのプログラム実行、およびメモリ/レジスタの内容表示を含む)
参考資料
詳細については、MAXQ2000評価キットのデータシート を参照してください。このデータシートは、評価キットCDまたはオンラインからダウンロードすることができます。
MAX-IDEのインストール
システム要件
オペレーティングシステム:Windows® 98、Windows NT、Windows 2000、Windows ME、またはWindows XP®
少なくとも1つの空きシリアルCOMポート(MAXQ評価キットとの通信に必要)、またはUSB-to-serialアダプタと1つの空きUSB ポート
インストールプログラムの実行
MAX-IDE用のインストールパッケージはMAX-IDE.zipであり、MAXQ ウェブサイトから入手することができます。
このパッケージをダウンロードして解凍し、setup.exeを実行してMAX-IDEをハードドライブにインストールします。
[InstallShield]ダイアログで、[Typical installation]を選択すると、評価キットを用いてMAXQアプリケーションを開発するのに必要なすべてのファイルがインストールされます。
インストールが完了すれば、[スタート]メニューからMAX-IDEを起動することができます。
MAX-IDEのインストールファイル
MAX-IDEのメイン実行ファイルとヘルプファイルは、MAX-IDEのルートディレクトリにあります。デフォルトでは、このディレクトリは、Program Files\MAX-IDEです。その他のファイルは、以下のサブディレクトリにあります。
Compilers サブディレクトリには、MAX-IDEでインストールされたすべてのコンパイラとアセンブラのための実行ファイルとデータファイルが格納されています。ここには、少なくともMAXQの標準アセンブラが含まれます。使用する配布バージョンによっては、他のアセンブラやコンパイラもインストールされる場合があります。
Devices サブディレクトリには、ライブラリ、ドライバ、および構成ファイルが格納されています。これらは、すべてのMAXQマイクロコントローラと評価キットのためのアプリケーションを対象としたものであり、さらにこれらと通信するためのものです。
Examples サブディレクトリには、すべてのMAXQマイクロコントローラのためのコードサンプル(<デバイスのディレクトリ>/xxx_Demo 内)、および標準のインクルードファイルとライブラリ(<デバイスのディレクトリ>/api 内)が格納されています。
JTAGインタフェースのセットアップ
Serial-to-JTAGアダプタボード
MAX-IDEは、JTAG IEEE規格1149に準拠した専用のJTAGテストアクセスポート(TAP)インタフェースを経由して、MAXQマイクロコントローラのブートローダとデバッグエンジン機能にインタフェース接続されます。このインタフェースは、TMS (Test Mode Select)、TCK (Test Clock)、TDI (Test Data In)、およびTDO (Test Data Out)の信号で構成され、通常、ポート端子で多重化されます。
図1 は、すべてのMAXQマイクロコントローラの評価キットに搭載されているSerial-to-JTAGアダプタが、PCのシリアルCOMポートとMAXQマイクロコントローラのJTAGインタフェース間のインタフェース層を提供する仕組みを示しています。
図1. MAXQ用のSerial-to-JTAGインタフェース
JTAGインタフェースの信号とケーブル
Serial-to-JTAGアダプタボードは、両端に2 x 5のソケット(0.100"間隔)を備えた10芯リボンケーブルを用いてMAXQ評価キットボードと接続されます。このケーブルで伝送される信号を以下の表1 に示します。
表1. JTAGインタフェースの信号
Pin Number
Signal Type
Signal Name
Signal Description
1
Input to MAXQ
TCK
JTAG/TAP Test Clock
2
Ground
GND
Ground
3
Output from MAXQ
TDO
JTAG/TAP Test Data Out
4
Reference
VREF
Supplied by MAXQ kit to set the reference level for JTAG signals output by the Serial-to-JTAG board
5
Input to MAXQ
TMS
JTAG/TAP Test Mode Select
6
Input to MAXQ
nRST
Open-drain drive, connected to MAXQ reset line
7
None
KEY
Keyed pin for JTAG cable alignment
8
Power
VCC5
+5.0V (±5%) supply provided by JTAG board
9
Input to MAXQ
TDI
JTAG/TAP Test Data In
10
Ground
GND
Ground
評価キットの接続
使用する評価キットの種類によっては、Serial-to-JTAGインタフェースボードまたは評価キットボード、あるいはその両方で電源が必要となる場合があります。両方のボードを設定するための手順をここで簡単に説明します(表2 )。手順の詳細については、評価キットのデータシートを参照してください。Serial-to-JTAGボードまたはMAXQ評価キットボードで使用する電源はすべてDCのみ(センターポストがプラス)であることに留意してください。
表2. 評価キットのセットアップ
Evaluation Kit
JTAG Power Supply
Kit Power Supply
Jumper Settings
JTAG Header
MAXQ2000
5V, ±5%
None
JTAG—Close JH1, JH2, JH3Kit—Close JU11; Close 1+2 on JU1, JU2, JU3
J4
MAX-IDEで使用することができるように、MAXQ評価キットとSerial-to-JTAGボード(図2 )をセットアップする方法:
上述のようにSerial-to-JTAGボードに電源を接続します。
上述のように評価キットとSerial-to-JTAGボードのジャンパを設定します。キットの特定の機能にアクセスするためには、評価キットボード上でジャンパやDIP スイッチを追加で設定することが必要となることがあります。詳細については、評価キットのデータシートを参照してください。
2 x 5の10芯リボンケーブルをSerial-to-JTAGボードのP2ヘッダから評価キットボードの対応するヘッダに接続します。コネクタは一方向にのみ接続可能なように調節されています。調節されていない場合は、赤いワイヤが両方のヘッダの同じ端子に接続されるようにしてください。
ストレートシリアルケーブルをSerial-to-JTAGボードのJ1からPCのCOMポートに接続します。
すべての電源をオンにします。
図2. MAXQ2000の評価キットとSerial-to-JTAGボード
MAX-IDEでのプロジェクトの処理
新しいMAXQアセンブリプロジェクトの作成
MAX-IDEで新たにMAXQアセンブリ言語のプロジェクトを作成するには、以下の手順にしたがいます。
[MAX-IDE]メニューから[Device] → [MAXQ JTAG] を順に選択します。
[Project] → [New Project] を順に選択します。無題のプロジェクトが作成されます。
[Project] → [Save Project As] を選択します。プロジェクト(.prjファイル)を保存したい場所を選択します。
新しいアセンブリ言語ファイルを作成するには、[File] → [New File] を選択します。ファイルにアセンブリコードを入力した後、[File] → [Save As] を選択し、新しく作成した.asmファイルをプロジェクトディレクトリに保存します。次に、[Project] → [Add Files] を選択し、新しく作成したファイルを選択してプロジェクトに追加します。
既存のアセンブリ言語ファイルをプロジェクトに追加するには、単に[Project] → [Add Files] を選択し、プロジェクトに追加するファイルを選択するだけです。
インクルードファイルは、わざわざプロジェクトに追加する必要はありません。アセンブリプロセス時に自動的に読み取られます。
MAXQ2000のアセンブリファイルの例を以下に示します:
$include (..\api\maxQ2000.inc)
org 0000h
main:
jump $
end
上記の$include 行は、インクルードファイルの場所によって異なります。$include とorg 命令の詳細については、本書の「MAX-IDEアセンブラの使用」の項を参照してください。
アセンブリファイルとインクルードファイルに関する注記
すべてのMAXQマイクロコントローラに共通のシステムレジスタ(アキュムレータ、データポインタ、ループ制御レジスタなど)は、MAX-IDEアセンブラであらかじめ定義されています。デバイスごとに異なる周辺機器レジスタは、インクルードファイルで定義する必要があります。標準インクルードファイルは、各MAXQマイクロコントローラ用のMAX-IDEのインストールに含まれています。したがって、上の例で示したインクルードファイルはMAXQ2000用になります。
プリプロセッサ命令(等式、定義、マクロなど)が、プロジェクト内のファイルからファイルに持ち越されることはありません。MAX-IDEアセンブリプロジェクトに複数のアセンブリファイルが含まれる場合は、いずれのプリプロセッサ命令またはインクルードファイル命令も、この命令を使用する各アセンブリファイルに含まれていなければなりません。
プロジェクト内のアセンブリファイルの数にかかわらず、各アセンブリファイルの末尾に「end」ステートメントを記入する必要があります。
インクルードファイルの末尾には、「end」ステートメントを配置しないようにしてください。
複数のアセンブリファイルがプロジェクトに含まれている場合、すべてのファイルのすべての識別子が実質的にパブリックになります。すなわち、いずれのアセンブリファイルのコードも、そのプロジェクト内の他のアセンブリファイルで定義されたルーチンを呼び出したり、ラベルを参照したりすることができるということです。
既存のプロジェクトを開く
以前に作成したMAX-IDEプロジェクトを開くには、メニューから[Project] → [Open Project] を選択し、開きたいプロジェクトの.prjファイルを選択します。Serial-to-JTAGボードと評価キットボードを正しく接続しないで電源を投入した場合にMAXQ JTAGプロジェクトを開くと、エラーメッセージが表示される場合があります。
プロジェクトを作成して開くと、プロジェクトに含まれるアセンブリコードファイルが左側のパネルに一覧表示されます。ファイル名をダブルクリックすると、以下の図3 に示すように、そのファイルが開いてMAX-IDEで編集することができるようになります。
図3. MAX-IDEのプロジェクト環境
コードの実行とデバッグ
プロジェクトのコンパイル
プロジェクトファイルをコンパイルするには、メニューから[Debug] → [Make] または[Debug] → [Build All] を順に選択し、ツールバーのこれらのコマンドに対応するショートカットボタンをクリックするか、F7 ([Make] と同じ)を押します。MAXQアセンブラが起動します。エラーが発生しなければ、「Compiling...Build Successful」のメッセージが[Messages]ウィンドウに表示されます。構築によって何らかのエラーがある場合、そのエラーも[Messages]ウィンドウに表示されます。
プロジェクトの実行
プロジェクトのコンパイルが正常に完了すれば、以下のいずれかの方法を使用してデバッガでプロジェクトを実行することができます。
[Debug] → [Run] (F5)を選択すると、JTAGインタフェースを経由して、コンパイルされたプロジェクトコードがMAXQマイクロコントローラにロードされて実行が開始されます。プログラムの実行は、[Debug] → [Stop] (Shift+F5)を選択するまで、または[Pause]ボタンをクリックするまで、あるいはブレークポイントが現れるまで継続されます。
[Debug] → [Step Into] (F11)を選択すると、コンパイルされたプログラムがロードされて、ソースコードの最初の行で実行が停止します。
[Debug] → [Run to Cursor] (Control+F10)を選択すると、コンパイルされたプログラムがロードされて実行が開始されます。実行は、実行ポイントが、編集カーソルの配置された行に到達するか、ブレークポイントに到達するまで(いずれか早い方)、継続されます。カーソルがソースコード行に置かれていない場合にこのオプションを選択するとエラーが生じます。
あらかじめ決められた位置でプログラムの実行を停止させるブレークポイントは、以下の3つの方法のいずれかでセットまたはクリアすることができます。
ブレークポイントをセットしたい行にカーソルを移動し、[Debug] → [Toggle Breakpoint] を順に選択します。
ブレークポイントをセットしたい行にカーソルを移動し、ツールバーの停止信号のアイコンをクリックします。
編集ウィンドウで、ブレークポイントをセットしたい行の行番号をクリックします。
ソースコードではない行にブレークポイントを配置することはできますが、これは無効であることに注意してください。MAXQマイクロコントローラでは、一度に設定することが可能なブレークポイントは4つまでです。したがって、[Run to Cursor]を選択した場合、ブレークポイントは1つ使用されたことになり、3つしかセットすることができないことになります。
[Debug] → [Stop] を選択すると、あるいはツールバーの[Stop]アイコンをクリックすると、プログラムの実行は完全に停止します。しかし、実行が最初の行(Step Into )、カーソル行(Run to Cursor )、またはブレークポイントを設定した行で停止した場合、プログラムは、ステップバイステップモードで実行されることがあります。ステップバイステップモードには、[Pause]ボタンをクリックして移行することもできます。このモードでは、現在の実行ポイントが緑の矢印でマークされ、以下のコマンドを使用することができます。
[Debug] → [Step Into] (F11)、[Debug] → [Step Over] (F10)、および[Debug] → [Step Out] (Shift+F10)は、すべてアセンブリデバッグモードでは同じ動作になります。すなわち、1つの命令を実行し、実行ポイントを次の命令に移動します。
[Debug] → [Run] は、上述のように現在の実行ポイントから、次のブレークポイントに到達するまで実行が継続されます。
[Debug] → [Run To Cursor] は、上述のように現在の実行ポイントから、カーソル行に到達するまで実行が継続されます。
[Debug] メニューの[High-Level Debug] と[Low-Level Debug] の設定は、アセンブリ言語のデバッグモードで実行するときには無効であることに留意してください。
プロセッサのレジスタを表示して編集
プログラムがロードされて、少なくとも1つの命令が実行されると、デバッガを使用してMAXQマイクロコントローラのレジスタを表示して編集することができます。[Window] → [Show] → [Registers] を順に選択するとレジスタセットの画面が表示されます。これらの値は、デバッガでコードを実行するにつれて更新されます。書込み可能なレジスタは、その数値フィールドをダブルクリックして新しい値を16進、10進、または2進で入力することによって編集することができます。
MAXQ2000キットに関する注記:LCD ドーターボードが取り付けられている場合、レジスタPO0、PD0、PO1、PD1、PO2、PD2、PO3、またはPD3の値を手動で編集しないでください。LCDを取り付けた状態でこれらの端子出力に値を静的に設定すると、LCDディスプレイに損傷を与えるおそれがあります。
プロセッサのメモリを表示して編集
プログラムがロードされて、少なくとも1つの命令が実行されると、MAXQマイクロコントローラの内部メモリを表示して編集することができます。[Window] → [Show] → [Memory] を順に選択すると内部メモリの画面が表示されます。画面上のドロップダウンリストから選択することで、コード、データ、またはスタックメモリを表示することができます。メモリは、コードとスタックスペースについては16ビット幅で、データスペースでは8ビット幅で表示されます。データまたはスタックスペースのメモリ値は、メモリの位置をダブルクリックして新しい値を入力することによって編集することができます。
MAX-IDEアセンブラの使用
MAX-IDEには、マルチパスアセンブラが用意されており、これを使用してMAXQのアセンブリ言語でアプリケーションを開発することができます。このアセンブラには、インクルードファイル、シンボリック等式、条件付きアセンブリ、およびマクロの使用が可能なシングルパスのプリプロセッサが含まれています。アセンブラとプリプロセッサは、MAX-IDE環境に完全に統合されています。
マクロとその他のプリプロセッサ命令の使用方法の例については、「Macro」プロジェクト例を参照してください。
一般構文
MAXQアセンブラとプリプロセッサは、どちらも大文字/小文字を区別しません。アセンブリのステートメントは、以下の書式にしたがいます:
[label:] [opcode [parameter [, parameter]]] [;comment]
以下のコードで実例を示します:
main:
move Acc, A[2] ; copy A[2] to active accumulator
上に示す「main」ラベルのような識別子には、[a-zA-Z_?$0-9]の文字を含めることができますが、0~9の数字で始めることはできません。識別子は127文字の長さまで入力可能です。
アーキテクチャ、命令セット、アドレス指定モード、およびMAXQマイクロコントローラファミリのコアレジスタの詳細な説明については、MAXQファミリのユーザガイドを参照してください。
ソースファイル
MAX-IDEのプロジェクトウィンドウに一覧表示されるすべてのアセンブリソース(.asm)ファイルは、プロジェクトをコンパイルするときに、ウィンドウに表示された順序でアセンブルされます。リンカは用意されていないため、複数のファイルは、1つのファイルに結合されてからアセンブリされた場合と同様の方法でアセンブルされます。
ソースファイルには、インクルード命令、等式/定義、マクロ、条件付きアセンブリブロック、およびステートメントを含めることができます。いずれのソースファイルも、最後の行はEND命令で構成される必要があります。
end
インクルードファイル
インクルード(.inc)ファイルは、明示的にプロジェクトに追加する必要はありません。インクルード命令によって自動的に読み込まれて解析されます。これによって、インクルードファイルは、そのすべてのテキストがインクルード命令の代わりにソースファイル内にあるものとして解析されるようになります。
(source file): (equates.inc):
$include(equates.inc) ---> MASK1 equ 0FFh
MASK2 equ 0FEh
(resume parsing in source <---
file)
インクルードファイルには、インクルード命令、等式、マクロ、およびDB/DWデータステートメントを含めることができますが、アセンブリルーチンを含めることはできません。インクルードファイルは必ずしもEND命令で終わる必要はありません。
MAX-IDEには、各MAXQマイクロコントローラの標準インクルードファイルが用意されています。このインクルードファイルが、マイクロコントローラの周辺機器レジスタセット、およびユーティリティROMが提供する関数のアドレスを定義しています。これらのインクルードファイルは、すべてのアセンブル言語プロジェクトで使用することが可能です。これらのファイルは、MAX-IDEのメインインストールディレクトリの下のExamples サブディレクトリにあります。
定数
ステートメントまたは等式定義の即値として使用するための定数値は、以下の4つの形式のいずれかで記述することができます。
10進数(デフォルト) - 末尾が文字でない、または「d」である。例:10、07d
2進数 - 末尾が「b」である。例:01b、1101101b
16進数 - 0~9の数字で始まって、末尾が「h」である。例:10h、09FFEh
単一文字 - ASCIIのバイト値に変換される。例:「A」
以下の演算子も定数と等式定義でのみ使用することができます。したがって、これらのステートメントの計算は、定数の値が解析される前に、プリプロセスの段階で実行されます。
move Acc, #(1+1) ; 2 : Addition
move Acc, #(4-1) ; 3 : Subtraction
move Acc, #(2*2) ; 4 : Multiplication
move Acc, #(25/5) ; 5 : Division (truncated to integer)
move Acc, #(MIN(6,7)) ; 6 : Minimum of two values
move Acc, #(MAX(6, 7)) ; 7 : Maximum of two values
move Acc, #'A' ; ASCII value of 'A'
move Acc, #(550h | 055h) ; 555h : Logical OR
move Acc, #(550h & 055h) ; 050h : Logical AND
move Acc, #(550h ^ 055h) ; 505h : Logical XOR
move Acc, HIGH(#1234h) ; 12h : Select high byte of word
move Acc, LOW(#1234h) ; 34h : Select low byte of word
move Acc, NOT(#0000h) ; FFFFh : Bitwise negation
move Acc, #001h << 7 ; 080h : Shift left
move Acc, #080h >> 7 ; 001h : Shift right
等式
等式はEQU命令を使用して定義され、通常、定数値が使用される場所で数値に置き換えるために使用されます。等式は、定数について上記で定義したすべての形式と定数演算子を使用することができます。ラベルは定数として認識されません。
ONE equ 01
TWO equ 02
move Acc, #ONE
move Acc, #(ONE+TWO)
等式は、その後に続く等式の定義でも使用することができます。
ONE equ 01
TWO equ ONE+ONE
定義
定義を使用すると、Cスタイルのテキストのままでの置換が可能となります。余分な処理は必要ありません。インクルードファイルで周辺機器レジスタを定義する場合によく使用されます。置換テキストは1行に限定されます。認識される継続文字はありません。Cスタイルのマクロは認識されません。
#define PO[0] M0[0]
move Acc, PO[0] ; Parses as 'move Acc, M0[0]'
データキーワード
DBとDWの命令は、未処理のバイト(ストリング値のバイトを含む)やワードを現在位置の16進ファイルに挿入する場合に使用されます。
db 055h, 0AAh, 055h, 0AAh ; byte values
dw 0AAAAh, 05555h ; word values
db "MAX-IDE Environment " ; byte value for each char (padded to even count)
これらデータ値はコードスペースに挿入されることに留意してください。このため、2つの命令ステートメントセットの間にDBステートメントを挿入する場合、定義されるバイト数はワードアラインメントのアセンブリエラーを防ぐために偶数でなければなりません。
条件付きアセンブリ
条件付きステートメントによって、特定のブール条件が満たされた場合にのみコードブロックをアセンブルすることができます。以下の形式になります。
IF (<boolean statement>)
statements
...
ENDIF
ブールステートメントは、定数、等式、およびブール演算子(=、!=、<、<=、>、および>=)を使用して定義されます。コードとインクルードステートメントだけが、条件付きアセンブリブロック内で使用することができます。マクロと等式は使用できません。
DEBUG equ 0
DOINC equ 1
IF (DEBUG != 0)
call RoutineDbg
ENDIF
IF (DEBUG = 0)
call Routine
ENDIF
IF (DOINC = 1)
$include(defines.inc)
ENDIF
マクロ
マクロによって、関数が呼び出されるたびに、直列的に展開されてアセンブルされるコードブロックを使用して関数を定義することができます。以下の形式になります。
<identifier> MACRO [[PARAM <parm1>] [whitespace AND/OR comma] [<parm2>] ...]
[LOCAL <local1> [whitespace AND/OR comma] [<local2>] ...]
<macro assembly statements, local labels>
...
ENDM
マクロの最も簡単なタイプは、参照されるたびにコードの挿入だけを行うというものです。挿入されたコード内の、等式、定義、およびネストされたマクロ呼出しはすべて正常に処理されます。
ThreeNops MACRO
nop
nop
nop
ENDM
ThreeNops --> nop
nop
nop
マクロはオプションとして1つ以上のパラメータを定義することができます。これは、マクロが参照されるときに渡される値です。これらの値は展開されるコードに貼り付けられます。以下のマクロは、スタックスペースの1レベルを犠牲にして、書込み可能なあらゆるレジスタ(Accを除く)に「INC」関数を提供するパラメータを使用しています。
Inc MACRO PARAM Register
push Acc
move Acc, Register
add #1
move Register, Acc
pop Acc
ENDM
Inc LC[0] --> push Acc
move Acc, LC[0]
add #1
move LC[0], Acc
pop Acc
マクロにはローカル識別子も含めることができます。この識別子は、マクロの各参照で一意になるように、展開されるコード内で名前が変更されます。
LoopN MACRO PARAM Count
LOCAL L1
move LC[0], Count
L1:
djnz LC[0], L1
ENDM
上記のマクロでは、マクロが参照されてそのコードが挿入されるたびに、「L1」ラベルの名前が別の一時的な値に変更されています。
MAXQはMaxim Integrated Products, Inc.の登録商標です。 WindowsはMicrosoft Corporationの登録商標および登録サービスマークです。 Windows XPはMicrosoft Corporationの登録商標および登録サービスマークです。
フィードバックをお寄せください。 内容に満足されましたか、あるいは満足されていませんか?もっと良いページにできると思いますか?あるいは、単なるコメントでも結構です。フィードバックをお待ちしています。 —マキシムはお客様からいただく訂正、提案を元に改善していきます。
このページを評価し、フィードバックを送信する。
APP 3561: Dec 28, 2005
アプリケーションノート3561,
AN3561,
AN 3561,
APP3561,
Appnote3561,
Appnote 3561