"中央処理装置と、不揮発性メモリと、外部にデバッグツールが接続されるデバッグインタフェースとを半導体基板上に有し、前記中央処理装置は、前記不揮発性メモリから命令のフェッチを行い当該命令を実行し、また前記デバッグツールからの指示に応じて動作制御され、前記不揮発性メモリは、前記デバッグツールからの指示に応答してデータの書込み、消去、または読み出しが可能に構成され、所定の領域にアクセス制限情報を格納し、前記不揮発性メモリに前記アクセス制限情報が格納されている場合において、前記デバッグツールから入力された認証情報と前記アクセス制限情報とが合致しない場合に、前記デバッグツールからの指示に応じての前記不揮発性メモリへのデータの書込み、読み出しが制限される半導体処理装置。前記不揮発性メモリに格納されているアクセス制限情報と前記デバッグツールから入力された認証情報とが合致しない場合、前記デバッグツールからの指示に応答して前記不揮発性メモリに格納されるデータの消去は可能とされ、前記不揮発性メモリに格納されるデータの消去完了後に前記デバッグツールからの指示に応じての前記不揮発性メモリへのデータの書込み、読み出しの制限が解除される請求項1に記載の半導体処理装置。従来のマイクロコンピュータは以上のように構成されているので、フラッシュメモリの書き換えにフラッシュライタを使用する場合には、デバッグツールとは別にフラッシュライタを用意しなくてはならないので、デバッグのためのコストが高くなる。また、フラッシュメモリの構成に応じたフラッシュライタを使用しなくてはならないので、フラッシュメモリの構成が異なる度に異なるフラッシュライタを使用しなくてはならず、デバッグの作業効率が落ちるなどの課題があった。さらに、デバッグツールにより書き換え用のプログラムを実行する場合には、ユーザが書き換え用のプログラムを用意しなくてはならず、デバッグの作業効率が落ちるなどの課題があった。さらに、上記両フラッシュメモリの書き換え手法では、デバッグツールから直接にフラッシュメモリの書き換え制御を行うことができないため、フラッシュメモリの書き換えを伴うようなデバッグ機能を使用することができず、例えば、ソフトウエアブレーク機能を使用することができないなど、デバッグツールの機能が制限される課題があった。この発明は上記のような課題を解決するためになされたもので、デバッグツールから直接に内蔵フラッシュメモリの書き換え制御を行うことができ、デバッグの作業効率を高くすることが可能なマイクロコンピュータを得ることを目的とする。この発明に係るマイクロコンピュータは、第2の格納手段に格納された内蔵フラッシュ情報をインタフェースを介してデバッグツールから読み出し可能にし、デバッグツールから内蔵フラッシュ情報に基づいた書き込みデータをインタフェースを介して入力して、第1の格納手段に格納された書き換えプログラムに基づいて書き込みデータを内蔵フラッシュメモリに書き換えるCPUを備えたものである。この発明に係るマイクロコンピュータは、内蔵フラッシュメモリに第1の格納手段を設けたものである。この発明に係るマイクロコンピュータは、書き換えプログラムに、E/Wモード移行プログラム、消去プログラム、書き込みプログラム、ステータスレディ待ちプログラム、およびE/Wモード終了プログラムを備えたものである。この発明に係るマイクロコンピュータは、内蔵フラッシュメモリに第2の格納手段を設けたものである。この発明に係るマイクロコンピュータは、内蔵フラッシュ情報に、内蔵フラッシュメモリのブロックのサイズおよびアドレスからなるブロック情報と、書き換えプログラムの先頭アドレスからなる書き換えプログラム情報とを備えたものである。この発明に係るマイクロコンピュータは、内蔵フラッシュ情報に、セキュリティコードの格納場所を示す情報を備えたものである。この発明に係るマイクロコンピュータは、内蔵フラッシュ情報に、内蔵フラッシュメモリの書き換えプログラムを退避したり、書き込みデータをテンポラリに保持するのに使用する領域がどこにあるかを示す情報を備えたものである。この発明に係るマイクロコンピュータは、内蔵フラッシュ情報に、内蔵フラッシュメモリの書き換え時に書き込みデータを一旦保持するために使用する領域のサイズ情報を備えたものである。この発明に係るマイクロコンピュータは、内蔵フラッシュメモリの書き換えプログラムを格納した第1の格納手段と、内蔵フラッシュメモリに関する内蔵フラッシュ情報を格納した第2の格納手段と、デバッグツールからシリアルインタフェースを介して第1のレジスタに保持されたデバッグプログラムの命令コードに基づいてデバッグを実行すると共に、内蔵フラッシュ情報を第2のレジスタに保持させ、シリアルインタフェースを介してデバッグツールから読み出し可能にし、デバッグツールからシリアルインタフェースを介して第3のレジスタに保持された内蔵フラッシュ情報に基づいた書き込みデータを書き換えプログラムに基づいて内蔵フラッシュメモリに書き換えるCPUとを備えたものである。この発明に係るマイクロコンピュータは、シリアルインタフェースをJTAGインタフェースとしたものである。この発明に係るマイクロコンピュータは、デバッグモードになると内蔵フラッシュメモリの書き換えを許可するFP端子の入力値にかかわらず強制的にその内蔵フラッシュメモリの書き換えを許可する書き換え許可手段を備えたものである。この発明に係るマイクロコンピュータは、デバッグツールからの分岐命令コードに応じてCPUによって内蔵フラッシュメモリの消去および書き込み可能なモードに移行するE/Wモード移行プログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって消去プログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに応じたブロックのデータを消去する消去プログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって消去実行状況情報をデバッグツールから読み出し可能にするステータスレディ待ちプログラム実行手段と、消去実行状況情報が正常と認められ、内蔵フラッシュメモリの消去すべきブロックに応じて消去プログラム実行手段およびステータスレディ待ちプログラム実行手段を所定回数実行した後に、デバッグツールからの分岐命令コードに応じてCPUによって通常モードに移行するE/Wモード終了プログラム実行手段とを備えたものである。この発明に係るマイクロコンピュータは、デバッグツールからの分岐命令コードに応じてCPUによって内蔵フラッシュメモリの消去および書き込み可能なモードに移行するE/Wモード移行プログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって消去プログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに応じたブロックのデータを消去する消去プログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって書き込みプログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに、デバッグツールからの書き込みデータを書き込む書き込みプログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって書き込み実行状況情報をデバッグツールから読み出し可能にするステータスレディ待ちプログラム実行手段と、書き込み実行状況情報が正常と認められ、内蔵フラッシュメモリの書き換えすべきブロックに応じて消去プログラム実行手段、書き込みプログラム実行手段およびステータスレディ待ちプログラム実行手段を所定回数実行した後に、デバッグツールからの分岐命令コードに応じてCPUによって通常モードに移行するE/Wモード終了プログラム実行手段とを備えたものである。以上のように、この発明によれば、第2の格納手段に格納された内蔵フラッシュ情報をインタフェースを介してデバッグツールから読み出し可能にし、デバッグツールから内蔵フラッシュ情報に基づいた書き込みデータをインタフェースを介して入力して、第1の格納手段に格納された書き換えプログラムに基づいて書き込みデータを内蔵フラッシュメモリに書き換えるCPUを備えるように構成したので、デバッグ時にデバッグツールからマイクロコンピュータに内蔵される書き換えプログラムを用いて直接に内蔵フラッシュメモリの書き換え制御を行うことができ、デバッグの作業効率を高くすることができる。また、内蔵フラッシュ情報をマイクロコンピュータに内蔵し、デバッグツールがその内蔵フラッシュ情報を読み出すことが可能であるため、デバッグツールはその内蔵フラッシュ情報に応じて書き込みデータを用意することができる。したがって、内蔵フラッシュメモリの容量やブロック構成等が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。さらに、内蔵フラッシュメモリの書き換えプログラムをマイクロコンピュータに内蔵し、デバッグツールがその書き換えプログラムを起動することで内蔵フラッシュメモリの書き換えを行うようなインターフェースとなっているので、内蔵フラッシュメモリの書き換え手法が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。また、この発明によれば、内蔵フラッシュメモリに第1の格納手段を設けるように構成したので、書き換えプログラムは内蔵フラッシュメモリに格納されるので、マイクロコンピュータのチップが製作された後からでも書き換えプログラムを書き込んだり、また、書き換えたりすることができる効果が得られる。さらに、この発明によれば、書き換えプログラムに、E/Wモード移行プログラム、消去プログラム、書き込みプログラム、ステータスレディ待ちプログラム、およびE/Wモード終了プログラムを備えるように構成したので、書き換えプログラムを細かなプログラムモジュールによって構成することにより、全体の書き換えプログラムを小型化することができる。また、消去プログラム、および書き込みプログラムに分割することにより、内蔵フラッシュメモリの消去のみの処理を行うことができる効果が得られる。さらに、この発明によれば、内蔵フラッシュメモリに第2の格納手段を設けるように構成したので、内蔵フラッシュ情報は内蔵フラッシュメモリに格納されるので、マイクロコンピュータのチップが製作された後からでも内蔵フラッシュ情報を書き込んだり、また、書き換えたりすることができる効果が得られる。さらに、この発明によれば、内蔵フラッシュ情報に、内蔵フラッシュメモリのブロックのサイズおよびアドレスからなるブロック情報と、書き換えプログラムの先頭アドレスからなる書き換えプログラム情報とを備えるように構成したので、デバッグツールは、ブロック情報に応じて書き換えデータを用意することができる。したがって、内蔵フラッシュメモリの容量やブロック構成、配置アドレスなどが異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。また、内蔵フラッシュメモリの書き換えプログラムの格納場所をデバッグツールが読み出すことができるので、内蔵フラッシュメモリの書き換えプログラムの格納場所が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。さらに、この発明によれば、内蔵フラッシュ情報に、セキュリティコードの格納場所を示す情報を備えるように構成したので、デバッグツールに、そのセキュリティコードとユーザによって入力されるセキュリティコードとの比較に応じて、書き換えを許可する機能を持たせることができる効果が得られる。さらに、この発明によれば、内蔵フラッシュ情報に、内蔵フラッシュメモリの書き換え時に書き換えプログラムを退避したり、書き込みデータをテンポラリに保持するのに使用する領域がどこにあるかを示す情報を備えるように構成したので、デバッグツールでは、そのテンポラリ領域上のデータを退避させることができ、内蔵フラッシュメモリの書き換え処理によってテンポラリ領域上のデータが消去されてしまうのを未然に防ぐことができる効果が得られる。さらに、この発明によれば、内蔵フラッシュ情報に、内蔵フラッシュメモリの書き換え時に書き込みデータを一旦保持するために使用する領域のサイズ情報を備えるように構成したので、デバッグツールでは、そのサイズ情報に応じて書き込みデータを生成することができる効果が得られる。さらに、この発明によれば、内蔵フラッシュメモリの書き換えプログラムを格納した第1の格納手段と、内蔵フラッシュメモリに関する内蔵フラッシュ情報を格納した第2の格納手段と、デバッグツールからシリアルインタフェースを介して第1のレジスタに保持されたデバッグプログラムの命令コードに基づいてデバッグを実行すると共に、内蔵フラッシュ情報を第2のレジスタに保持させ、シリアルインタフェースを介してデバッグツールから読み出し可能にし、デバッグツールからシリアルインタフェースを介して第3のレジスタに保持された内蔵フラッシュ情報に基づいた書き込みデータを書き換えプログラムに基づいて内蔵フラッシュメモリに書き換えるCPUとを備えるように構成したので、デバッグツールからデバッグプログラムの命令コードを第1のレジスタに設定すれば、このマイクロコンピュータのデバッグを行うことができ、さらに、そのデバッグ時にデバッグツールから直接に内蔵フラッシュメモリの書き換え制御を行うことができ、デバッグの作業効率をさらに高くすることができる。また、内蔵フラッシュ情報をマイクロコンピュータに内蔵し、デバッグツールがその内蔵フラッシュ情報を読み出すことが可能であるため、デバッグツールはその内蔵フラッシュ情報に応じて書き込みデータを用意することができる。したがって、内蔵フラッシュメモリの容量やブロック構成等が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。さらに、内蔵フラッシュメモリの書き換えプログラムをマイクロコンピュータに内蔵し、デバッグツールがその書き換えプログラムを起動することで内蔵フラッシュメモリの書き換えを行うようなインターフェースとなっているので、内蔵フラッシュメモリの書き換え手法が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。さらに、シリアルなインターフェースを使用することによって、デバッグツールとのインターフェース用端子を少なくすることができる効果が得られる。さらに、デバッグツールからCPU命令を供給可能な機能は、マイクロプロセッサの通常のデバッグに使用できる機能であることから、この機能は通常のデバッグと内蔵フラッシュメモリの書き換え機能とを共用することができる。従って、内蔵フラッシュメモリ専用のハードウェアを追加することがないという効果が得られる。さらに、この発明によれば、シリアルインタフェースをJTAGインタフェースとするように構成したので、バウンダリスキャンテストを行うJTAGインタフェースと共有化することができ、新たなシリアルインタフェースを設ける必要が無く、構成を簡単にすることができる効果が得られる。さらに、この発明によれば、デバッグモードになると内蔵フラッシュメモリの書き換えを許可するFP端子の入力値にかかわらず強制的にその内蔵フラッシュメモリの書き換えを許可する書き換え許可手段を備えるように構成したので、デバッグモードでは、FP端子の入力値にかかわらずデバッグツールによって内蔵フラッシュメモリの書き換えを行うことができる効果が得られる。さらに、この発明によれば、デバッグツールからの分岐命令コードに応じてCPUによって内蔵フラッシュメモリの消去および書き込み可能なモードに移行するE/Wモード移行プログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって消去プログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに応じたブロックのデータを消去する消去プログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって消去実行状況情報をデバッグツールから読み出し可能にするステータスレディ待ちプログラム実行手段と、消去実行状況情報が正常と認められ、内蔵フラッシュメモリの消去すべきブロックに応じて消去プログラム実行手段およびステータスレディ待ちプログラム実行手段を所定回数実行した後に、デバッグツールからの分岐命令コードに応じてCPUによって通常モードに移行するE/Wモード終了プログラム実行手段とを備えるように構成したので、デバッグツールからの分岐命令コードに応じて、内蔵フラッシュメモリの所定のブロックのデータを消去する一連の消去処理を実行することができる効果が得られる。さらに、この発明によれば、デバッグツールからの分岐命令コードに応じてCPUによって内蔵フラッシュメモリの消去および書き込み可能なモードに移行するE/Wモード移行プログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって消去プログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに応じたブロックのデータを消去する消去プログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって書き込みプログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに、デバッグツールからの書き込みデータを書き込む書き込みプログラム実行手段と、デバッグツールからの分岐命令コードに応じてCPUによって書き込み実行状況情報をデバッグツールから読み出し可能にするステータスレディ待ちプログラム実行手段と、書き込み実行状況情報が正常と認められ、内蔵フラッシュメモリの書き換えすべきブロックに応じて消去プログラム実行手段、書き込みプログラム実行手段およびステータスレディ待ちプログラム実行手段を所定回数実行した後に、デバッグツールからの分岐命令コードに応じてCPUによって通常モードに移行するE/Wモード終了プログラム実行手段とを備えるように構成したので、デバッグツールからの分岐命令コードに応じて、内蔵フラッシュメモリの所定のブロックに書き込みデータを書き換える一連の書き換え処理を実行することができる効果が得られる。以下、この発明の実施の一形態を説明する。実施の形態1.図1はこの発明の実施の形態1によるマイクロコンピュータを示す構成図であり、図において、1はマイクロコンピュータ応用機器などに設けられた1チップのマイクロコンピュータ、2はマイクロコンピュータ1のデバッグ時に接続される汎用的なデバッグツールである。また、マイクロコンピュータ1において、3は32ビット汎用レジスタを16本R0~R15備えたマイクロプロセッサであるCPU、4はこの実施の形態1の特徴であるデバッグモジュール、5はこの実施の形態1の特徴であるユーザプログラムなどが格納された内蔵フラッシュメモリ、6はこの実施の形態1の特徴である内蔵SRAM、7はDMAコントローラ、割り込みコントローラ、タイマなどの内蔵周辺I/O、8はバス制御回路、9は上記各モジュールを接続する32ビットの内部バスである。また、内蔵フラッシュメモリ5の周辺において、5aは1の入力値で内蔵フラッシュメモリ5の書き換えの許可、0の入力値で書き換えを禁止するフラッシュプロテクト信号を入力するFP端子、5bはそのフラッシュプロテクト信号と、CPU3から出力されるデバッグモードで1、通常モードで0となるモード信号との論理和をとるOR回路、5cはそのOR回路5bの出力値が1で、内蔵フラッシュメモリ5の書き換えを許可し、0で、内蔵フラッシュメモリ5の書き換えを禁止するフラッシュ内部制御回路であり、OR回路5bおよびフラッシュ内部制御回路5cにより、FP端子5aの入力値にかかわらずデバッグモードになると内蔵フラッシュメモリ5の書き換えを強制的に許可する書き換え許可手段を構成する。図2はマイクロコンピュータのCPUおよびデバッグモジュールの詳細を示す構成図であり、図において、11はデバッグモジュール4と外部のデバッグツール2とを接続するIEEE11491で定められた5本のJTAGインタフェース端子インタフェース,シリアルインタフェースであり、各端子の機能を以下に説明する。TCK端子:クロック入力端子TDI端子:テスト命令コードまたはテストデータをシリアルに入力する端子TDO端子:テスト命令コードまたはテストデータをシリアルに出力する端子TMS端子:テスト回路の状態遷移を制御するテストモード選択を入力する端子TRST端子:テスト回路を非同期に初期化するテストリセットを入力する端子12はチップ外部からCPU3に対してデバッグ割り込みを入力する端子である。また、CPU3において、13aはデバッグトラップ命令実行機能であり、このデバッグトラップ命令実行機能13aは、デバッグ専用のトラップ命令であり、CPU3がこの命令を実行することによりデバッグ事象が発生し、デバッグモードに移行するものである。13bはプログラムカウンタであり、このプログラムカウンタ13bは、CPU3が実行している命令のアドレスを保持するレジスタである。13cはプログラムカウンタ退避用レジスタであり、このプログラムカウンタ退避用レジスタ13cは、デバッグ事象等が発生した時にプログラムカウンタ13b値の退避先となるレジスタである。13dはPSWレジスタであり、このPSWレジスタ13dは、CPU3の状態を示すレジスタである。13eはPSW退避用レジスタであり、このPSW退避用レジスタ13eは、デバッグ事象等が発生した時にPSWレジスタ13d値の退避先となるレジスタである。CPU3は、上記以外にもロード命令、ストア命令、分岐命令、加算命令等、一般的なCPUが備えている命令実行機能と汎用レジスタ13fを16本備えている。ここではこの実施の形態とは直接関係が無いので詳細は省略する。14は実行後PCブレーク機能であり、この実行後PCブレーク機能14は、ターゲットとなる命令のプログラムカウンタ値を設定すると、その命令の実行直後にデバッグ事象が発生し、デバッグモードに移行するものである。さらに、デバッグモジュール4において、15はJTAG制御部であり、このJTAG制御部15は、JTAGインタフェース端子11を通じてデバッグツール2と通信を行い、デバッグ機能の制御を行うものであり、JTAGインタフェース端子11でアクセス可能なデバッグ関連の制御レジスタやJTAGインタフェース端子11でのアクセスを制御するTAPコントローラなどで構成されている。16はこの実施の形態1の特徴であるJTAGインタフェース端子11を通じてCPU命令を実行するモニタコード供給機能、17はアクセスブレーク機能であり、このアクセスブレーク機能17は、ターゲットとなるデータアクセスの条件を設定すると、設定された条件を満たすデータアクセスを検出する。条件が成立するとCPU3に対してデバッグ割り込み要求を出力するものである。18は実行前PCプログラムカウンタブレーク機能であり、この実行前PCブレーク機能18は、ターゲットとなる命令のプログラムカウンタ値を設定すると、その命令がフェッチされたことを検出してCPU3に実行前PCブレーク要求を出力する。CPU3が実行前PCブレーク要求を受け取ると、その命令の実行直前にデバッグ事象が発生し、デバッグモードに移行するものである。19はデバッグ割り込み要求であり、このデバッグ割り込み要求19は、デバッグ専用の割り込みであり、DBI端子12、JTAG制御部15、アクセスブレーク機能17の3個所から発生するデバッグ割り込み要求を論理和して1本化してからCPU3に対して出力するものである。CPU3にデバッグ要求が入力されるとデバッグ事象が発生し、デバッグモードに移行する。以上のように、マイクロコンピュータ1には、デバッグ機能が内蔵されており、主にデバッグモジュール4がデバッグ機能の制御を行っている。ここで、JTAGについて補足説明する。今日のマイクロコンピュータ応用機器では、高密度実装化、デバイスの高集積、大規模、狭ピッチ化により、ボードレベルのテストが困難となってきている。このようなボードレベルのテストの課題を解決する目的で欧米の半導体、電子機器メーカ、テスタメーカなどが中心となってJTAGJointTestActionGroupが結成された。このJTAGより提案されたボードレベルのテスト方式がバウンダリスキャン方式といわれるものであり、現在はIEEE1149.1テストポートアクセス規格IEEEStandardTestAccessPortandBoundaryScanArchitectureIEEEStd.1149.1a-1993として標準化されている。バウンダリスキャン方式では、ボード上に搭載されている各デバイスの入出力ピンと内部回路間にスキャンレジスタ回路バウンダリスキャンを挿入し、さらにコントロール回路と専用ピンを設ける。ボード上では、各デバイスのバウンダリスキャンを接続して、専用ポートを使用してシリアルにデータの入出力を行うことにより、全てのスキャンレジスタのアクセスとコントロールを可能にしている。シリアルに命令やデータを入力し、シリアルに出力されるデータを観測することによって、ボード上にテスト用のプローブを接触させることなく、ボード上のデバイス間の接続テストやデバイス内部のテストを行うことができる。バウンダリスキャンは、以下のコンポーネントで構成される。TAPTestAccessPortバウンダリスキャンへのデータの入出力およびコントロールを行うためのポートであり、図2におけるJTAGインタフェース端子11に相当する。TAPコントローラTCK端子およびTMS端子からの入力に応じて状態遷移を行い、テスト回路の制御を行う。命令レジスタテスト命令コードを保持するレジスタで、この値をデコードしてテスト回路の制御信号を生成する。テスト命令コードとして、SAMPLE/PRELOAD命令、EXTEST命令、BYPASS命令などがある。また、上記命令とは別にデバイス独自のプライベート命令を追加することも許されている。この実施の形態1のマイクロコンピュータにおいても内蔵デバッグ機能用にいくつかのプライベート命令を備えている。データレジスタバイパスレジスタTDI端子とTDO端子との間に設けられた1ビットのレジスタで、テスト回路をバイパスするために使用する。バウンダリスキャンレジスタデバイスの内部回路と各ピンとの間に設けられたシフトレジスタをシリアルに接続した一連のレジスタ。上記以外にもデバイス独自のデータレジスタを追加することも許されている。この実施の形態1のマイクロコンピュータにおいても内蔵デバッグ機能用にいくつかのデータレジスタを備えている。図3はデバッグ事象発生時の処理手順を示す説明図である。マイクロコンピュータ1には、ユーザモードとデバッグモードの2つの実行モードがあり、ユーザプログラムを実行しているモードがユーザモードであり、ユーザプログラムの実行中にデバッグ事象が発生するとユーザモードからデバッグモードに遷移する。デバッグモードではデバッグツール2から供給されるモニタプログラムを実行する。デバッグ事象の種類には、デバッグトラップ命令の実行、デバッグ割り込み要求、実行前/実行後プログラムカウンタブレーク要求がある。デバッグ事象が発生すると、以下の処理をCPU3およびデバッグモジュール4が自動的に行った後、デバッグモードに遷移する。プログラムカウンタ13bの値をプログラムカウンタ退避用レジスタ13cに退避PSWレジスタ13dの値をPSW退避用レジスタ13eに退避した後、PSWレジスタ13dの値を更新発生したデバッグ事象を示すデバッグ事象発生要因フラグをJTAG制御部15にあるJTAGレジスタにセットデバッグ事象のベクタアドレスH’FFFF9000番地に分岐デバッグ事象のベクタアドレスに分岐したら、デバッグツール2は、モニタコード供給機能16を使用して命令コードをCPU3に供給することによって、モニタプログラムを実行する。ユーザモードへの復帰命令RTE命令を実行することにより、デバッグモードからユーザモードに遷移する。ユーザモードに遷移する際には、以下の処理をCPU3およびデバッグモジュール4が自動的に行う。デバッグ事象発生要因フラグをクリアPSW退避用レジスタ13eに退避されていた値をPSWレジスタ13dに復帰プログラムカウンタ退避用レジスタ13cに退避されていた値をプログラムカウンタ13bに復帰すると共に、その値の番地に分岐する図4は内蔵領域にマッピングされたデバッグモジュール用領域を示す説明図であり、図において、21はデバッグモジュール用内蔵I/O領域H’FFFF8000~H’FFFF9FFF、22はデバッグモジュール用制御レジスタ領域H’FFFF8000~H’FFFF8FFFであり、実行前PCブレーク機能用のレジスタ群、アクセスブレーク機能用のレジスタ群、モニタコード供給機能用のレジスタ群がこの領域に配置されている。23はモニタコード供給領域H’FFFF9000~H’FFFF9FFFであり、モニタコード供給機能にアクセスできる領域である。この領域内での命令フェッチは、全てモニタコード供給機能を使用したJTAGインタフェース端子11経由の命令コードをフェッチすることになる。デバッグ事象ベクタエントリH’FFFF9000~H’FFFF9003は、デバッグ事象が発生するとこの領域に分岐するものである。また、24はツールROM領域でありH’FF003FE0~H’FF003FFF、セキュリティコードや内蔵フラッシュ情報が置かれているアドレスを格納する領域である。25はセキュリティコード格納領域であり、この領域のアドレスとバイト数はツールROM領域24内で指定される。26は内蔵フラッシュ情報格納領域であり、内蔵フラッシュ書き換え用プログラム以下、書き換えプログラムと言うの一つであるE/Wモード移行プログラムのエントリアドレスと内蔵フラッシュメモリ5のブロック構成の情報を格納する領域であり、この領域のアドレスとバイト数はツールROM領域24内で指定される。図5はモニタコード供給機能およびJTAG制御部のレジスタ構成を示す構成図であり、ここで、モニタコード供給機能16は、JTAGインタフェース端子11を使用して外部からCPU3に対して命令コードを供給する機能である。CPU3は、デバッグ事象が発生すると、図4に示したモニタコード供給領域23の先頭であるH’FFFF9000番地へ分岐し、このモニタコード供給機能16から供給される命令コードを実行するものである。JTAG制御部15において、31はJTAGインタフェース端子11でのアクセスを制御するTAPコントローラ、32はいずれのレジスタを用いてどのようなテストを行うか選択する命令レジスタである。33はMON_CODEレジスタ第1のレジスタであり、このMON_CODEレジスタ33は、デバッグモード時にJTAGインタフェース端子11経由でモニタプログラムを実行する場合に、デバッグツール2から供給される命令コードの設定に使用する32ビットのレジスタである。MON_CODEレジスタ33に設定された値は、モニタコード供給機能16の命令コードバッファ37に転送される。この時、命令コードバッファ37の入力ポインタも自動的にインクリメントされるものである。34はMON_DATAレジスタ第2のレジスタであり、このMON_DATAレジスタ34は、デバッグモード時にJTAGインタフェース端子11経由でモニタプログラムを実行する場合に、その実行結果をデバッグツール2に出力したり、内蔵フラッシュ情報をデバッグツール2に出力するインタフェースとなる32ビットのレジスタである。モニタプログラム上でストア命令を使用してモニタコード供給機能16のFrontMON_DATAレジスタ38に書き込みを行うと、その値がMON_DATAレジスタ34に転送され、JTAGインタフェース端子11経由でデバッグツール2から読み出すことができる。35はMON_PARAMレジスタ第3のレジスタであり、このMON_PARAMレジスタ35は、デバッグモード時にJTAGインタフェース端子11経由でモニタプログラムを実行する場合に、デバッグツール2から書き換えデータなどのパラメータを渡すためのインタフェースとなる32ビットのレジスタである。デバッグツール2からJTAGインタフェース端子11経由でMON_PARAMレジスタ35に書き込みを行うと、モニタコード供給機能16のFrontMON_PARAMレジスタ39に転送され、モニタプログラム上でロード命令を使用してその値を読み出すことができる。36はMON_ACCESSレジスタであり、このMON_ACCESSレジスタ36は、デバッグモード時にJTAGインタフェース端子11経由でモニタプログラムを実行する場合に、アクセス制御情報を設定/格納する4ビットのレジスタである。bit0MNSTARTモニタコード供給開始ビット読み出し/書き込み可1:命令コード設定済み0:命令コード未設定1を設定することにより、命令コードバッファ37に有効な値が設定されたことを示す。すなわち、モニタコード供給機能16における命令フェッチ要求を受け付けるようになる。bit1MNDTVLDFrontMON_DATA有効ビット読み出し専用1:FrontMON_DATA有効FrontMON_DATAレジスタ38への書き込みがあり、かつ、MON_DATAレジスタ34は未参照0:FrontMON_DATA無効FrontMON_DATAレジスタ38への書き込みがない、またはMON_DATAレジスタ34を参照した後このビットは、FrontMON_DATAレジスタ38への書き込みがあった時、1にセットされる。このビットは、以下の条件でゼロクリアされる。MON_DATAレジスタ34をアクセスした時デバッグモードでのRTE命令実行時デバッグ制御部のリセット時デバッグモジュールのリセットbit2MNPRMVLDFrontMON_PARAM有効ビット読み出し専用1:FrontMON_PARAM有効MON_PARAMレジスタ35は設定済みであるが、FrontMON_PARAMレジスタ39が未だ読み出されていない0:FrontMON_PARAM無効MON_PARAMレジスタ35が設定されていないか、FrontMON_PARAMレジスタ39が読み出された後このビットは、FrontMON_PARAMレジスタ39への設定が行われた時に1がセットされる。このビットは、以下の条件でゼロクリアされる。FrontMON_PARAMレジスタ39に対して読み出しがあった時デバッグモードでのRTE命令実行時デバッグ制御部のリセット時デバッグモジュールのリセットbit3MNCDBUSYMON_CODEビジービット読み出し専用1:MON_CODEへの設定不可0:MON_CODEへの設定可このビットは、次の命令コードをMON_CODEレジスタ33に設定してもよいかどうかを示すビットである。このビットは、以下のような2つの意味がある。MON_CODEレジスタ33から命令コードバッファ37への転送中=1、転送完了=0、命令コードバッファ37にフェッチされていない命令コードがある=1、ない=0このビットは、以下の条件で1にセットされる。MON_CODEレジスタ33をアクセスした時MNSTARTビットに1をセットした時このビットは、以下の条件でゼロクリアされる。MON_CODEレジスタ33に書き込んだ値が命令コードバッファ37に転送された時命令コードバッファ37に格納されている命令が全てCPU3によってフェッチされた時注1デバッグモードでのRTE命令実行時デバッグ制御部のリセット時デバッグモジュールのリセット注1命令コードバッファ37のフェッチ完了の判断命令コードバッファ37の先頭のワードに対して、2回目の命令フェッチ要求が発生した時を命令コードバッファ37の全ての命令コードをフェッチしたと判断する。例えば、命令コードバッファ37の2ワード目に分岐命令があった場合には、3ワード目、4ワード目に命令コードが設定されていても、2ワード目の分岐命令による分岐先の命令フェッチ要求が、命令コードバッファ37に対して発生した時点で全ての命令コードがフェッチされたことになる。なお、モニターコード供給機能16で分岐を行う場合には必ず分岐先を命令コードバッファ37の先頭アドレスにしなければならないという制限がデバッグツール2に対して要求されているものとする。すなわち、デバッグツール2がMON_CODEレジスタ33に設定する分岐命令の分岐先アドレスは、常に4ワード境界上のアドレスアドレスの下位4ビット28:31を0000にする必要がある。この制限によって、モニターコード供給機能16内で分岐した場合には、必ず命令コードバッファ37の1ワード目に対する命令フェッチ要求になることが保証される。また、モニタコード供給機能16において、37は命令コードバッファであり、この命令コードバッファ37は、4ワードで構成され、JTAG制御部15のMON_CODEレジスタ33の内容が転送される。命令コードバッファ37は、H’FFFF9000~H’FFFF9FFFにマッピングされており、どのワードが選択されるかは、アドレスの下位2ビットで決定される。38はFrontMON_DATAレジスタであり、このFrontMON_DATAレジスタ38は、実行結果や内蔵フラッシュ情報などをデバッグツール2に受け渡しするための32ビットのレジスタである。このFrontMON_DATAレジスタ38の内容がJTAG制御部15のMON_DATAレジスタ34に転送される。39はFrontMON_PARAMレジスタであり、このFrontMON_PARAMレジスタ39は、デバッグツール2からモニタプログラムへの書き換えデータなどのパラメータを受け渡しするための32ビットのレジスタである。JTAG制御部15のMON_PARAMレジスタ35の内容がこのFrontMON_PARAMレジスタ39に転送される。9aはアドレスバス、9bはデータバスである。図6は内蔵フラッシュメモリのメモリ領域を示す説明図であり、図において、41はユーザ領域、42はブートROM領域である。内蔵フラッシュメモリ5のユーザ領域41は、512KバイトのフラッシュメモリがH’00000000~H’0007FFFF番地に割り当てられ、11ブロックに分割されたユーザが使用できる領域である。内蔵フラッシュメモリ5の消去は、一括で全領域消去を行う方法とブロック単位で消去する方法があり、また、内蔵フラッシュメモリ5への書き込みは、ページ単位1ページ=256バイトで行うものである。内蔵フラッシュメモリ5の消去および書き込みは、後述するフラッシュE/Wイネーブルモードへ移行することにより可能となるものである。内部フラッシュメモリ5のブートROM領域42は、16KバイトのフラッシュメモリがH’FF000000~H’FF003FFF番地に割り当てられ、内臓フラッシュメモリ5に対する書き換えプログラムを格納する領域である。図7はフラッシュレディステータスレジスタを示す説明図であり、図において、51はフラッシュレディステータスレジスタであり、内蔵フラッシュメモリ5に設けられた32ビットのレジスタである。52はそのフラッシュレディステータスレジスタ51に設けられたFSTATレディステータスビットであり、内蔵フラッシュメモリ5に対する消去および書き込みの動作状態を示すものである。0:消去または書き込み実行中1:レディ状態このFSTATビット52は、図1に示したフラッシュ内部制御回路5cによって制御されるものである。図8はフラッシュメモリ制御レジスタを示す説明図であり、図において、61はフラッシュメモリ制御レジスタであり、内蔵フラッシュメモリ5に設けられた32ビットのレジスタである。62はそのフラッシュメモリ制御レジスタ61に設けられたFENTRYフラッシュモードエントリビットであり、フラッシュE/Wイネーブルモードへの移行を制御するためのビットである。このビットを1セットすることにより、フラッシュE/Wイネーブルに移行し、このビットを0セットすることにより、通常動作モードに復帰するものである。このFENTRYビット62は、図1に示したフラッシュ内部制御回路5cによって制御されるものである。図9は内蔵フラッシュ書き換えに関する情報を示す説明図であり、図において、ツールROM領域24は、セキュリティコードや内蔵フラッシュ情報が置かれているアドレスを格納する領域であり、図4に示したように内蔵空間に配置されている。図10はツールROM領域の構成を示す説明図であり、図に示すように、ツールROM領域24の場所は、H’FF003FE0~H’FF003FFF番地であり、このツールROM領域24に各情報が設定済みであることを示すために、H’FF003FFC-F番地に固定値H’DF534449のコードが埋め込まれている。デバッグツール2は、このコードの値を確認してからツールROM領域24の各情報を使用する。また、図9および図10に示すように、セキュリティコード格納領域25とセキュリティレベルの情報が置かれており、セキュリティコードが設定されている場合、デバッグツール2側でセキュリティコードの比較を行い、一致しない場合にはセキュリティレベルに応じてツールの動作を制限する。H’FF003FF0-1番地セキュリティコードのバイト数H’FF003FF2-3番地セキュリティレベルH’0000レベル0デバッグツールのリセット以外の動作を許可しない。H’0001レベル1内蔵フラッシュの全領域消去を実行しない限り、デバッグツールの動作を許可しない。H’FF003FF4-7番地セキュリティコード格納領域の先頭アドレスセキュリティコードがない場合にはH’FFFFFFFFとなる。さらに、図9および図10に示すように、内蔵フラッシュ情報格納領域26の先頭アドレスが置かれている。H’FF003FE8-EB番地内蔵フラッシュ情報格納領域の先頭アドレス内蔵フラッシュ情報格納領域がない場合にはH’FFFFFFFFとなる。図11は内蔵フラッシュ情報格納領域の構成を示す説明図であり、図に示すように、内蔵フラッシュ情報格納領域26の先頭アドレスは、ツールROM領域24のH’FF003FE8-EB番地に置かれている。そして、内蔵フラッシュ情報格納領域26には、以下の情報が置かれている。E/Wモード移行プログラムのエントリアドレス書き換えプログラム情報先頭アドレスH’00~H’03番地:E/Wモード移行プログラムのエントリアドレス内蔵フラッシュのブロック数先頭アドレスH’04~H’07番地:内蔵フラッシュのブロック数各ブロック情報先頭アドレスH’08~H’0B番地:ブロック0の先頭アドレスH’0C~H’0F番地:ブロック0のバイト数H’10~H’13番地:ブロック1の先頭アドレスH’14~H’17番地:ブロック1のバイト数8nH’08~H’0B番地:ブロックnの先頭アドレス8nH’0C~H’0F番地:ブロックnのバイト数注ブロック数=n1個内蔵フラッシュ書き換え時に使用するテンポラリ領域の情報内蔵フラッシュメモリ5の書き換え時には、フラッシュ書き換え用プログラムの格納や書き込みデータのバッファ用として内蔵SRAM6の一部を使用する。このような内蔵フラッシュメモリ5の書き換え時にテンポラリに使用する領域の先頭アドレスとバイト数を格納する。デバッグ中に内蔵フラッシュメモリ5の書き換えを行うような場合には、デバッグツール2側でこの領域のデータを内蔵SRAM6から退避できるように、この情報を格納している。8nH’10~H’13番地:フラッシュの書き換え用テンポラリ領域の先頭アドレス8nH’14~H’17番地:フラッシュの書き換え用テンポラリ領域のバイト数注ブロック数=n1個フラッシュ書き込み用バッファのサイズ=ページサイズ情報フラッシュ書き込み用バッファのバイト数=ページサイズを格納する。8nH’18~H’1B番地:フラッシュの書き込み用バッファのバイト数=ページサイズ注ブロック数=n1個次に内蔵フラッシュ書き換え用プログラム書き換えプログラムの構成について説明する。書き換えプログラムは、図6に示したブートROM42内に格納され、E/Wモード移行プログラム、ブロック消去プログラム消去プログラム、ページ書き込みプログラム書き込みプログラム、ステータスレディ待ちプログラム、およびE/W終了プログラムからなるものである。以下に、各プログラムの構成について説明する。E/Wモード移行プログラムE/Wモード移行プログラムは、内蔵フラッシュメモリ5の書き換えの最初に実行しなければならないプログラムであり、書き換えに必要な各種パラメータをCPUレジスタに設定した後、フラッシュE/Wイネーブルモードに移行するものである。実行方法モニタコード供給機能16を使用して、内蔵フラッシュ情報格納領域26の先頭1ワードに格納されているアドレスに分岐させる。この時、MON_PARAMレジスタ35への設定は必要ない。処理内容1CPUレジスタに各パラメータを設定R0:パラメータの設定は無し、デバッグツール2が使用可能R1:パラメータの設定は無し、デバッグツール2が使用可能R2:パラメータの設定は無し、デバッグツール2が使用可能R3:パラメータの設定は無し、デバッグツール2が使用可能R4:H’FFFF8400MON_DATAレジスタ34のアドレスR5:フラッシュ書き込み用バッファの先頭アドレス-4R6:パラメータの設定は無し、デバッグツール2が使用可能R7:フラッシュ書き込み用バッファのバイト数=ページサイズR8:ブロック消去プログラムのエントリアドレスR9:ページ書き込みプログラムのエントリアドレスR10:ステータスレディ待ちのプログラムのエントリアドレスR11:E/W終了プログラムのエントリアドレスR12:パラメータの設定は無し、デバッグツール2が使用可能R13:パラメータの設定は無し、デバッグツール2が使用可能R14:パラメータの設定は無し、デバッグツール2が使用可能R15:パラメータの設定は無し、デバッグツール2が使用可能2内蔵フラッシュメモリ5上のフラッシュ書き換えプログラムを内蔵SRAM6上に転送3フラッシュE/Wイネーブルモードに移行4MON_DATAレジスタ34にプログラム正常/エラー終了情報を書き込む実行終了の確認方法デバッグツール2は、MON_DATAレジスタ34を読み出し、MSBビットbit0の値を確認することによって、E/Wモード移行プログラムが正常終了したか否かを確認できる。ブロック消去プログラムブロック消去プログラムは、MON_PARAMレジスタ35で指定された内蔵フラッシュメモリ5上のブロックに対して消去プログラムを発行するプログラムである。フラッシュE/Wイネーブルモードで使用する。実行方法モニタコード供給機能16を使用して、上記R8が示すアドレスに分岐させる。この際、消去したいメモリブロックの先頭アドレスをMON_PARAMレジスタ35に設定する。内蔵フラッシュメモリ5のブロック構成の情報は、内蔵フラッシュ情報格納領域26にある。処理内容1MON_PARAMレジスタ35で指定されたメモリブロックに対して消去コマンドを発行2プログラムの最後に、MON_DATAレジスタ34への書き込みを行う。実行終了の確認方法MON_DATAレジスタ34の書き込みはツールデバッグツール2側とデバイスマイクロコンピュータ1側とのハンドシェイク用である。MON_DATAレジスタ34への書き込みがこのプログラムの終了を表す。従って、MON_DATAレジスタ34の内容には意味がないが、デバッグツール2は、MON_DATAレジスタ34を一旦空読みしてから次の処理を実行する。このプログラムの終了は、消去が完了していることを示すものではない。消去の完了を確認するにはステータスレディ待ちプログラムを実行する必要がある。ページ書き込みプログラムページ書き込みプログラムは、MON_PARAMレジスタ35で指定されたページに対してページ書き込みコマンドを発行するプログラムである。フラッシュE/Wイネーブルモードで使用する。実行方法モニタコード供給機能16を使用して、上記R9が示すアドレスに分岐させる。この際、書き込みしたいページの先頭アドレスをMON_PARAMレジスタ35に設定する。書き込みデータは、予め内蔵SRAM6上のフラッシュ書き込み用バッファ領域に転送しておく。バッファの先頭アドレスはR5値4、バッファサイズ=ページサイズはR7値で示される。この処理は、以下のような命令をモニタコード供給機能16を使用して実行することによって実現できる。FFFF9000LDR0,4,R4:R4の値4=H’FFFF8004番地を読み出し、読み出してきたデータをR0に格納する。すなわち、FrontMON_PARAM値=書き込みデータを読み出してきてR0にセットする。FFFF9004STR0,R5:R5の値を4してからR5値が示す番地にR0の値をストアする。すなわち、上記命令で読み出してきた書き込みデータをフラッシュ書き込み用バッファに転送する。FFFF9006ADDIR7,-4:R7の値を-4する。すなわち、書き込み用バッファのサイズを1ワード分デクリメントする。FFFF9008BNEZR7,LFFFF9000:R7の値がゼロでない時には、H’FFFF9000番地に分岐し、ゼロになるとH’FFFF900C番地に移る。すなわち、バッファサイズ分の転送が終了するまでループする。FFFF900CJMPR8:R8の値が示す番地にジャンプする。すなわち、転送が終了するとステータスレディ待ちプログラムにジャンプする。FFFF900ENOP処理内容1フラッシュ書き込み用バッファのデータをMON_PARAMレジスタ35で指定されたページに対して書き込みコマンドを発行2CPUレジスタR5,R7の値を以下の値に設定する。次のバッファへの転送処理の時にR5,R7の値をそのまま使用できる。R5:フラッシュ書き込み用バッファの先頭アドレス-4R7:フラッシュ書き込み用バッファのバイト数=ページサイズ3プログラムの最後に、MON_DATAレジスタ34への書き込みを行う。実行終了の確認方法MON_DATAレジスタ34の書き込みは、ツール側とデバイス側とのハンドシェイク用である。MON_DATAレジスタ34への書き込みがこのプログラムの終了を表す。従って、MON_DATAレジスタ34の内容には意味がないが、デバッグツール2は、MON_DATAレジスタ34を一旦空読みしてから次の処理を実行する。このプログラムの終了は、書き込みが完了していることを示すものではない。書き込みの完了を確認するにはステータスレディ待ちプログラムを実行する必要がある。このプログラムの終了後は、フラッシュ書き込み用バッファに次の書き込みデータを書くことができる。ステータスレディ待ちプログラムステータスレディ待ちプログラムは、ブロック消去プログラムやページ書き込みプログラムを実行した後、消去や書き込みが終了するまで待つためのプログラムである。消去や書き込みが正常終了したかどうかはMON_DATAレジスタ34に反映する。フラッシュE/Wイネーブルモードで使用する。実行方法モニタコード供給機能16を使用して、上記R10が示すアドレスに分岐させる。MON_PARAMレジスタ35への設定は必要ない。処理内容1フラッシュの消去もしくは書き込み動作が終了するまで待つ2MON_DATAレジスタ34にプログラム正常/エラー終了情報を書き込む。実行終了の確認方法デバッグツール2は、MON_DATAレジスタ34を読み出し、MSBビットbit0の値を確認することによって、消去や書き込みが正常に行われたかどうかを確認できる。E/Wモード終了プログラムE/Wモード終了プログラムは、フラッシュE/Wモードイネーブルモードから通常モードに戻るためのプログラムである。内蔵フラッシュ書き換え処理の最後に実行する。実行方法モニタコード供給機能16を使用して、上記R11が示すアドレスに分岐させる。MON_PARAMレジスタ35への設定は必要ない。処理内容1通常モードに移行2プログラムの最後に、MON_DATAレジスタ34への書き込みを行う。実行終了の確認方法MON_DATAレジスタ34の書き込みは、ツール側とデバイス側とのハンドシェイク用である。MON_DATAレジスタ34への書き込みがこのプログラムの終了を表す。従って、MON_DATAレジスタ34の内容には意味がないが、デバッグツール2は、MON_DATAレジスタ34を一旦空読みしてから次の処理を実行する。次に動作について説明する。1.モニタコード供給機能およびJTAG制御部の動作図12はモニタコード供給機能およびJTAG制御部の動作を示すフローチャートであり、まず、上記図5の構成図とこの図12のフローチャートを参照しながらモニタコード供給機能およびJTAG制御部の動作を説明する。1モニタコードの設定デバッグツール2は、JTAGインタフェース端子11を通じてMON_CODEレジスタ33に命令コードを設定する。MON_CODEレジスタ33に設定された命令コードは、命令コードバッファ37に転送されると同時にMON_ACCESSレジスタ36のMNCDBUSYビットに1がセットされ、転送完了により0がセットされる。1ワード分の命令コードが命令コードバッファ37のどの段に格納されるかは入力ポインタによって内部制御される。先に設定した順にバッファ0~3に格納される。入力ポインタの値は、デバッグモジュールのリセットを行うか、MNSTARTビットに1を設定することによりゼロクリアされるST1。2命令コードバッファに転送されたことの確認デバッグツール2は、MON_ACCESSレジスタ36を読み出して、MNCDBUSYビットに0がセットされていることを確認する。MNCDBUSYビットに0がセットされていれば、MON_CODEレジスタ33に設定された命令コードが命令コードバッファ37に転送されたことを示している。次のMON_CODEレジスタ33への命令コードの設定は、MNCDBUSYビットに0がセットされていることを確認してから行うST2。上記ST1とST2の処理を最大4回まで任意の回数繰り返す。なお、命令コードバッファ37の命令コードは、MON_CODEレジスタ33をアクセスしない限り保持される。従って、命令コードバッファ37に設定した命令コードを再度使用する場合には新規に設定し直す必要がない。MNSTARTビットに1を設定すれば、命令コードバッファ37に保持されている命令コードが再びCPU3によって実行される。3パラメータの設定モニタプログラムがパラメータを必要としない場合にはこの処理は必要ない。デバッグツール2は、JTAGインタフェース端子11を通じてMON_PARAMレジスタ35にパラメータを設定する。MON_PARAMレジスタ35に設定されたパラメータは、FrontMON_PARAMレジスタ39に転送されると同時にMON_ACCESSレジスタ36のMNPRMVLDビットに1がセットされる。CPU3がFrontMON_PARAMレジスタ39を読み出すとMNPRMVLDビットに0がセットされる。FrontMON_PARAMレジスタ39の内容は、MON_PARAMレジスタ35の設定を行わない限り保持され、同じパラメータを何度も使用する場合は、新規に設定し直す必要はないST3。4モニターコード供給のスタートデバッグツール2は、JTAGインタフェース端子11を通じてMON_ACCESSレジスタ36のMNSTARTビットに1をセットする。MNSTARTビットに1がセットされることにより、CPU3は命令コードバッファ37の内容をフェッチできるようになるST4。5スタート要求の解除デバッグツール2は、MON_ACCESSレジスタ36のMNSTARTビットに0をセットする。6モニタコードがフェッチされたことの確認デバッグツール2は、MON_ACCESSレジスタ36を読み出して、MNCDBUSYビットに0がセットされていることを確認する。MNCDBUSYビットに0がセットされていれば、命令コードバッファ37へ設定した全ての命令のフェッチが完了したことを示す。7MON_PARAMが使用されたことを確認この処理は、パラメータ設定を行った場合のみ必要である。デバッグツール2は、MON_ACCESSレジスタ36を読み出して、MNPRMVLDビットに0がセットされていることを確認する。MNPRMVLDビットに0がセットされていれば、CPU3がFrontMON_PARAMレジスタ39を読み出したことを示している。8FrontMON_DATAに書き込みがあったことの確認この処理は、FrontMON_DATAレジスタ38への書き込みをモニタプログラムが行う場合にのみ必要である。デバッグツール2は、MON_ACCESSレジスタ36を読み出して、MNDTVLDビットに1がセットされていることを確認する。MNDTVLDビットに1がセットされていれば、CPU3がFrontMON_DATAレジスタ38に書き込みを行ったことを示している。9FrontMON_DATAの読み出しこの処理は、FrontMON_DATA38への書き込みをモニタプログラムが行う場合にのみ必要である。デバッグツール2がJTAGインタフェース端子11を通じてMON_DATAレジスタ34を読み出すと、MNDTVLDビットは自動的にクリアされる。FrontMON_DATAレジスタ38の内容は、FrontMON_DATAレジスタ38への書き込みを行わない限り保持されているST9。2.内蔵フラッシュメモリの書き換え動作図13は内蔵フラッシュメモリの書き換え動作の概要を示すフローチャートであり、次に、この図13のフローチャートを参照しながら内蔵フラッシュメモリ5の書き換え動作の概要を説明する。内蔵フラッシュメモリ5の書き換えは、図5に示したJTAG制御部15およびモニタコード供給機能16を使用して、図6に示した内蔵フラッシュメモリ5内のブートROM領域42に格納された書き換えプログラムを呼び出すことによって行う。デバッグツール2からの書き込みデータの転送もJTAG制御部15のMON_PARAMレジスタ35を使用して転送するものである。前処理ST11デバッグツール2は、フラッシュ書き換え処理の前に、予め処理を行っておくことが必要になる。セキュリティレベルのチェック内蔵フラッシュのブロック構成の情報を読み出しておくE/Wモード移行プログラムのエントリアドレスを読み出しておく保持すべきデータの読み出しST12内蔵フラッシュメモリ5への書き込みではブロック単位の消去を伴う。書き込みを行うブロックの中で保持しなければならないデータがある場合では、この段階でフラッシュE/Wイネーブルモードになる前に読み出しておく必要がある。フラッシュE/Wイネーブルモード移行ST13E/Wモード移行プログラムを実行することにより、通常モードからフラッシュE/Wイネーブルモードに移行する。フラッシュ書き換えST14消去のみを行うか、書き込みを行うかで処理が異なる。それぞれの処理の中で必要なプログラムを実行する。ブロック消去プログラムページ書き込みプログラムステータスレディプログラム通常モード復帰ST15E/Wモード終了プログラムを実行することにより、フラッシュE/Wイネーブルモードから通常モードに復帰する。次に図13に示した前処理ST11、および保持すべきデータの読み出しST12について詳細に説明する。デバッグツール2は、起動されるとマイクロコンピュータ1に内蔵されている各種情報をJTAG制御部15およびモニタコード供給機能16を使用して読み出し、セキュリティコードのチェックを行う。1ツールROM設定済み確認コードの読み出しデバッグツール2から図5に示すJTAGインタフェース端子11を介してMON_CODEレジスタ33に命令コードがセットされる。MON_CODEレジスタ33にセットされた命令コードを、JTAG制御部15およびモニタコード供給機能16の機能により、命令コードバッファ37に転送する。ツールROM設定済み確認コードを読み出して、FrontMON_DATAレジスタ38に書き込みを行うプログラムを、上記,の処理を4回行って命令コードバッファ37にセットする。デバッグツール2から図5に示すJTAGインタフェース端子11を介してMON_ACCESSレジスタ36のMNSTARTビットに1がセットされる。図5に示したCPU3は、命令コードバッファ37に転送されたツールROM設定済み確認コードの読み出しプログラムを実行し、以下の処理を行う。図10に示したツールROM領域のH’FF003FFC番地のデータを読み出す。読み出したデータをFrontMON_DATAレジスタ38H’FFFF8000番地に書き込む。H’FFFF9000番地に分岐し、次のデバッグツール2から供給される命令コードを待つ。FrontMON_DATAレジスタ38に書き込まれたデータを、JTAG制御部15およびモニタコード供給機能16の機能により、MON_DATAレジスタ34に転送する。デバッグツール2から図5に示すJTAGインタフェース端子11を介してMON_DATAレジスタ34のデータが読み出される。デバッグツール2では、MON_DATAレジスタ34のデータによって、次のように処理が分けられる。データがH’DF534449であれば、次の2の処理に進む。データがH’DF534449以外であれば、ツールROMの読み出し処理を終了する。2セキュリティコードの読み出しセキュリティコード格納領域の先頭アドレスの読み出し読み出し番地をツールROM領域のH’FF003FF4番地に変更して、上記1の~と同様な処理を行うことによって、図10に示したセキュリティコード格納領域の先頭アドレスを読み出す。セキュリティコードのバイト数、セキュリティのレベルの読み出し読み出し番地をツールROM領域のH’FF003FF0番地に変更して、上記1の~と同様な処理を行うことによって、図10に示したセキュリティコードのバイト数、セキュリティのレベルを読み出す。セキュリティコードの読み出し読み出し番地を上記で得られたセキュリティコード格納領域の先頭アドレスに変更して、上記1の~と同様な処理を行うことによって、セキュリティコードを読み出す。なお、セキュリティコードのバイト数が4バイトを越える場合は、上記1の~と同様な処理を繰り返すことによって全てのセキュリティコードを得る。セキュリティコードのチェックデバッグツール2は、デバッグツール2を使用しているユーザに対してセキュリティコードをキー入力してもらう。デバッグツール2は、キー入力された値とで得られた値とを比較し、で得られたセキュリティのレベルとの組合せで次のように処理が分けられる。キー入力された値とで得られた値とが一致した場合:次の3の処理に進む。キー入力された値とで得られた値とが不一致、かつ、セキュリティレベル=0の場合:デバッグツール2は、デバッグツール2のリセット以外の動作を許可しない。キー入力された値とで得られた値とが不一致、かつ、セキュリティレベル=1の場合:ユーザが内蔵フラッシュメモリ5の全領域の消去を実行しない限り、デバッグツール2の動作を許可しない。このように、セキュリティチェックを行うことによって、内蔵フラッシュメモリ5上のプログラムやデータを安易に他人に読み出されたり書き換えされたりできないようにすることができる。3内蔵フラッシュ情報の読み出し内蔵フラッシュ情報格納領域の先頭アドレスの読み出し読み出し番地をツールROM領域のH’FF003FE8番地に変更して、上記1の~と同様な処理を行うことによって、図10に示した内蔵フラッシュ情報格納領域の先頭アドレスを読み出す。E/Wモード移行プログラムのエントリアドレスの読み出し読み出し番地を上記で得られた内蔵フラッシュ情報格納領域の先頭アドレスに変更して、上記1の~と同様な処理を行うことによって、図11に示したE/Wモード移行プログラムのエントリアドレスを読み出す。ブロック数の読み出し読み出し番地を上記で得られた内蔵フラッシュ情報格納領域の先頭アドレス4に変更して、上記1の~と同様な処理を行うことによって、図11に示したブロック数を読み出す。各ブロックの先頭アドレスとバイト数の読み出し読み出し番地を上記で得られた内蔵フラッシュ情報格納領域の先頭アドレス8に変更して、上記1の~と同様な処理を行うことによって、図11に示したブロック0の先頭アドレスを読み出す。そして、読み出し番地を4ずつ増加させながら上記1の~と同様な処理を行うことによって、図11に示した各ブロックの先頭アドレスおよびバイト数を読み出す。読み出す領域は、で得られたブロック数から次のように計算することができる。で得られた先頭アドレス8~で得られた先頭アドレス8×nH’0C、ただし、n=で得られたブロック数-1フラッシュ書き換え用テンポラリ領域の読み出し読み出し番地を上記で得られた内蔵フラッシュ情報格納領域の先頭アドレス8×nH’10に変更して、上記1の~と同様な処理を行うことによって、図11に示したフラッシュ書き換え用テンポラリ領域の先頭アドレスを読み出す。そして、読み出し番地を上記で得られた内蔵フラッシュ情報格納領域の先頭アドレス8×nH’14に変更して、上記1の~と同様な処理を行うことによって、図11に示したフラッシュ書き換え用テンポラリ領域のバイト数を読み出す。内蔵フラッシュメモリ5の消去および書き込みを行う場合には、フラッシュ書き換えプログラムの格納や書き込みデータのバッファ用として、内蔵SRAM6の一部を使用する。これをフラッシュ書き換え用テンポラリ領域と言う。この領域は、デバッグを行うユーザが使用する領域であるため、デバッグツール2は内蔵フラッシュメモリ5の消去および書き込みを行う前に、ユーザが使用している内蔵SRAM6上のデータを退避する必要がある。デバッグツール2はで得られたフラッシュ書き換え用テンポラリ領域のデータを使用して退避処理を行い、内蔵フラッシュメモリ5の消去および書き込み処理を行った後に復帰処理を行う。フラッシュ書き込み用バッファのバイト数の読み出し読み出し番地を上記で得られた内蔵フラッシュ情報格納領域の先頭アドレス8×nH’18に変更して、上記1の~と同様な処理を行うことによって、図11に示したフラッシュ書き込み用バッファのバイト数を読み出す。フラッシュ書き込み用バッファとは、フラッシュ書き換え用テンポラリ領域のうちの書き込みデータが格納されるバッファ領域である。内蔵フラッシュメモリ5の書き込みを行う場合には、デバッグツール2はページサイズ単位で書き込み処理をループさせるような制御が必要になる。マイクロコンピュータによって異なるページサイズとなる可能性があるため、で得られたページサイズ情報を使用して、書き込みデータを生成する。図14は内蔵フラッシュメモリの消去動作を示すフローチャートであり、次に、この図14のフローチャートを参照しながら内蔵フラッシュメモリ5の消去動作を説明する。なお、この図14に示すフローチャートは、図13のフラッシュE/Wイネーブルモード移行ST13、フラッシュ書き換えST14、および通常モード復帰ST15において、内蔵フラッシュメモリ5の消去動作のみ行った場合の詳細に相当するものである。4E/Wモード移行プログラムの実行E/Wモード移行プログラム実行手段デバッグツール2から図5に示すJTAGインタフェース端子11を介してMON_CODEレジスタ33にE/Wモード移行プログラムに分岐する命令コードがセットされるST21。MON_CODEレジスタ33にセットされた命令コードを、JTAG制御部15およびモニタコード供給機能16の機能により、命令コードバッファ37に転送するST22。デバッグツール2から図5に示すJTAGインタフェース端子11を介してMON_ACCESSレジスタ36のMNSTARTビットに1がセットされるST21。図5に示したCPU3は、命令コードバッファ37に転送されたE/Wモード移行プログラムに分岐する命令コードを実行し、図6に示したブートROM領域42上にあるE/Wモード移行プログラムに分岐するST21。CPU3は、E/Wモード移行プログラムを実行し、以下の処理を行うST22。CPU3の各レジスタに各パラメータをセットする構成で説明したE/Wモード移行プログラムの処理内容:R0~R15を参照。図6に示したブートROM42上にある書き換えプログラムE/Wモード移行プログラム、ブロック消去プログラム、ページ書き込みプログラム、ステータスレディ待ちプログラム、およびE/W終了プログラムを図1に示した内蔵SRAM6上に転送する。この書き換えプログラムの内蔵フラッシュメモリ5内のブートROM領域42上から内蔵SRAM6上への転送は、フラッシュE/Wモードに移行すると、内蔵フラッシュメモリ5からの読み出し動作を行うことができなくなるため、内蔵フラッシュメモリ5上にあるフラッシュ書き換えプログラムを内蔵SRAM6上に退避するためである。内蔵SRAM6に分岐して、さらに以下の処理を引き続いて実行する。図8に示したフラッシュメモリ制御レジスタ61のFENTRYビット62に1をセットし、内蔵フラッシュメモリ5をフラッシュE/Wイネーブルモードに移行させる。図5に示したFrontMON_DATAレジスタ38H’FFFF8000番地にH’00000000を書き込む。H’FFFF9000番地に分岐し、次のデバッグツール2から供給される命令コードを待つ。FrontMON_DATAレジスタ38に書き込まれたデータを、JTAG制御部15およびモニタコード供給機能16の機能により、MON_DATAレジスタ34に転送すると共に、MON_ACCESSレジスタ36のMNDTVLDビットを1にセットするST22。デバッグツール2は、JTAGインタフェース端子11を介してMON_ACCESSレジスタ36を読み出して、MNDTVLDビットをチェックし、1になったらJTAGインタフェース端子11を介してMON_DATAレジスタ34の値を読み出す。読み出したデータのbit0値が0ならば、次の2ブロック消去プログラムの実行に移り、bit0値が1ならば、エラー処理ST24を行うST23。5ブロック消去プログラムの実行消去プログラム実行手段デバッグツール2からJTAGインタフェース端子11を介してMON_PARAMレジスタ35に消去したい内蔵フラッシュメモリ5のブロックに対応するアドレスがセットされるST25。MON_PARAMレジスタ35にセットされたアドレスを、JTAG制御部15およびモニタコード供給機能16の機能により、FrontMON_PARAMレジスタ39に転送するST26。デバッグツール2からJTAGインタフェース端子11を介してMON_CODEレジスタ33にブロック消去プログラムに分岐する命令コードがセットされるST25。デバッグツール2からJTAGインタフェース端子11を介してMON_ACCESSレジスタ36のMNSTARTビットに1がセットされるST25。CPU3は、命令コードバッファ37に転送されたブロック消去プログラムに分岐する命令コードを実行し、内蔵SRAM6上に退避されたブロック消去プログラムに分岐するST26。CPU3は、ブロック消去プログラムを実行し、以下の処理を行うST26。FrontMON_PARAMレジスタ39H’FFFF8004番地を読み出す。内蔵フラッシュメモリ5に対して消去コマンドを発行する。図15は内蔵フラッシュメモリの消去動作の詳細を示すフローチャートであり、このフローチャートを参照しながら、上記消去コマンドに応じた動作を説明する。まず、内蔵フラッシュメモリ5の任意のアドレスにブロックイレーズコマンドデータH’2020を書き込みST41、上記FrontMON_PARAMレジスタ39から読み出した消去したいブロックに対応するアドレスに応じて、消去対象であるブロックの最終偶数アドレスに確認コマンドデータH’D0D0を書き込むST42。そして、図1に示したフラッシュ内部制御回路5cによって消去対象であるブロックの消去が開始されるST43。FrontMON_DATAレジスタ38H’FFFF8000番地にH’00000000を書き込む。H’FFFF9000番地に分岐し、次のデバッグツール2から供給される命令コードを待つ。FrontMON_DATAレジスタ38に書き込まれたデータを、JTAG制御部15およびモニタコード供給機能16の機能により、MON_DATAレジスタ34に転送すると共に、MON_ACCESSレジスタ36のMNDTVLDビットを1にセットするST26。デバッグツール2は、JTAGインタフェース端子11を介してMON_ACCESSレジスタ36を読み出して、MNDTVLDビットをチェックし1になったらJTAGインタフェース端子11を介してMON_DATAレジスタ34のデータを読み出すST27。6ステータスレディ待ちプログラムの実行ステータスレディ待ちプログラム実行手段デバッグツール2からJTAGインタフェース端子11を介してMON_CODEレジスタ33にステータスレディ待ちプログラムに分岐する命令コードがセットされるST28。MON_CODEレジスタ33にセットされた命令コードを、JTAG制御部15およびモニタコード供給機能16の機能により、命令コードバッファ37に転送するST29。デバッグツール2からJTAGインタフェース端子11を介してMON_ACCESSレジスタ36のMNSTARTビットに1がセットされるST28。CPU3は、命令コードバッファ37に転送されたステータスレディ待ちプログラムに分岐する命令コードを実行し、内蔵SRAM6上に退避されたステータスレディ待ちプログラムに分岐するST29。CPU3は、ステータスレディ待ちプログラムを実行し、以下の処理を行うST29。図7に示したフラッシュレディステータスレジスタ51を読み出し、FSTATビットが1になったら、FrontMON_DATAレジスタ38H’FFFF8000番地にH’00000000を書き込み、FSTATビットが所定の一定期間に1にならなければ、FrontMON_DATAレジスタ38H’FFFF8000番地にH’80000000を書き込む。FrontMON_DATAレジスタ38に書き込まれたデータを、JTAG制御部15およびモニタコード供給機能16の機能により、MON_DATAレジスタ34に転送すると共に、MON_ACCESSレジスタ36のMNDTVLDビットを1にセットするST29。デバッグツール2は、JTAGインタフェース端子11を介してMON_ACCESSレジスタ36を読み出して、MNDTVLDビットをチェックし1になったらJTAGインタフェース端子11を介してMON_DATAレジスタ34のデータを読み出す。読み出したデータのbit0値が0ならば、次のの実行に移り、bit0値が1ならば、エラー処理ST31を行うST30。デバッグツール2によって、消去したいブロック数分だけ、上記ST25からST30の処理を繰り返すST32。7E/Wモード終了プログラムの実行E/Wモード終了プログラム実行手段デバッグツール2からJTAGインタフェース端子11を介してMON_CODEレジスタ33にE/Wモード終了プログラムに分岐する命令コードがセットされるST33。MON_CODEレジスタ33にセットされた命令コードを、JTAG制御部15およびモニタコード供給機能16の機能により、命令コードバッファ37に転送するST34。デバッグツール2からJTAGインタフェース端子11を介してMON_ACCESSレジスタ36のMNSTARTビットに1がセットされるST33。CPU3は、命令コードバッファ37に転送されたE/Wモード終了プログラムに分岐する命令コードを実行し、内蔵SRAM6上に退避されたE/Wモード終了プログラムに分岐するST34。CPU3は、E/Wモード終了プログラムを実行し、以下の処理を行うST34。図8に示したフラッシュメモリ制御レジスタ61のFENTRYビット62に0を書き込み、内蔵フラッシュメモリ5を通常モードに移行させる。FrontMON_DATAレジスタ38H’FFFF8000番地にH’00000000を書き込む。FrontMON_DATAレジスタ38に書き込まれたデータを、JTAG制御部15およびモニタコード供給機能16の機能により、MON_DATAレジスタ34に転送すると共に、MON_ACCESSレジスタ36のMNDTVLDビットを1にセットするST34。デバッグツール2は、JTAGインタフェース端子11を介してMON_ACCESSレジスタ36を読み出して、MNDTVLDビットをチェックし、1になったらJTAGインタフェース端子11を介してMON_DATAレジスタ34のデータを読み出すST35。図16は内蔵フラッシュメモリの書き込み動作を示すフローチャートであり、次に、この図16のフローチャートを参照しながら内蔵フラッシュメモリ5の書き込み動作を説明する。なお、この図16に示すフローチャートは、図13のフラッシュE/Wイネーブルモード移行ST13、フラッシュ書き換えST14、および通常モード復帰ST15において、内蔵フラッシュメモリ5の消去および書き込み動作を行った場合の詳細に相当するものである。4E/Wモード移行プログラムの実行E/Wモード移行プログラム実行手段この動作は、図14に示した内蔵フラッシュメモリ5の消去動作のST21~ST24と同一である。5ブロック消去プログラムの実行消去プログラム実行手段この動作は、図14に示した内蔵フラッシュメモリ5の消去動作のST25~ST27と同一である。6内蔵フラッシュメモリへの書き込みデータの転送本来ならば、ST27の後は、消去が終了したかどうかをステータスレディ待ちプログラムを実行して検証すべきであるが、消去に要する時間を利用して、内蔵フラッシュメモリ5への書き込みデータを内蔵SRAM6上のフラッシュ書き込み用バッファに転送する。以下にその動作を説明する。デバッグツール2からJTAGインタフェース端子11を介してMON_CODEレジスタ33に書き込みデータ転送プログラムの命令コードがセットされるST51。MON_CODEレジスタ33にセットされた命令コードを、JTAG制御部15およびモニタコード供給機能16の機能により、命令コードバッファ37に転送するST52。上記の処理を4回行って、書き込みデータ転送プログラムを命令コードバッファ37にセットする。書き込みデータ転送プログラムとは、内蔵フラッシュメモリに書き込みたいデータをデバッグツール2から内蔵SRAM6上のフラッシュ書き込み用バッファに転送するためのプログラムである構成のページ書き込みプログラムの実行方法を参照。デバッグツール2からJTAGインタフェース端子11を介してMON_PARAMレジスタ35に書き込みデータが32ビット分セットされるST51。MON_PARAMレジスタ35にセットされた書き込みデータを、JTAG制御部15およびモニタコード供給機能16の機能により、FrontMON_PARAMレジスタ39に転送するST52。デバッグツール2からJTAGインタフェース端子11を介してMON_ACCESSレジスタ36のMNSTARTビットに1がセットされるST51。CPU3は、命令コードバッファ37にセットされた書き込みデータ転送プログラムを実行し、以下の処理を行うST52。FrontMON_PARAMレジスタ39H’FFFF8004番地を読み出す。読み出した書き込みデータを内蔵SRAM6上のフラッシュ書き込み用バッファに書き込む。書き込み先のアドレスを4する。H’FFFF9000番地に分岐し、新たな命令コードが供給されるのを待つ。~の処理を繰り返すことによって、1ページ=256バイト分の書き込みデータを内蔵SRAM6上のフラッシュ書き込み用バッファに転送する。最終ループのの処理で、最後にステータスレディ待ちプログラムに分岐する。7ステータスレディ待ちプログラムの実行ステータスレディ待ちプログラム実行手段この動作は、図14に示した内蔵フラッシュメモリ5の消去動作のST28~ST31と同一である。8ページ書き込みプログラムの実行書き込みプログラム実行手段デバッグツール2からJTAGインタフェース端子11を介してMON_PARAMレジスタ35に書き込み先のアドレスがセットされるST53。MON_PARAMレジスタ35にセットされたアドレスを、JTAG制御部15およびモニタコード供給機能16の機能により、FrontMON_PARAMレジスタ39に転送するST54。デバッグツール2からJTAGインタフェース端子11を介してMON_CODEレジスタ33にページ書き込みプログラムに分岐する命令コードがセットされるST53。デバッグツール2からJTAGインタフェース端子11を介してMON_ACCESSレジスタ36のMNSTARTビットに1がセットされるST53。CPU3は、命令コードバッファ37に転送されたページ書き込みプログラムに分岐する命令コードを実行し、内蔵SRAM6上に退避されたページ書き込みプログラムに分岐するST54。CPU3は、ページ書き込みプログラムを実行し、以下の処理を行うST54。FrontMON_PARAMレジスタ39H’FFFF8004番地を読み出す。内蔵フラッシュメモリ5に対してページ書き込みコマンドを発行する。図17は内蔵フラッシュメモリの書き込み動作の詳細を示すフローチャートであり、このフローチャートを参照しながら、上記ページ書き込みコマンドに応じた動作を説明する。まず、内蔵フラッシュメモリ5の任意のアドレスにページプログラムコマンドデータH’4141を書き込むST81。フラッシュ書き込み用バッファの先頭16ビット分のデータを読み出し、FrontMON_PARAMレジスタ39から読み出した値を書き込み先アドレスとして書き込みを行うST82。フラッシュ書き込み用バッファから読み出し先のアドレスとフラッシュへの書き込み先アドレスを順次2ずつ増加しながらST83、1ページ分=256バイトの書き込みを行うST82~ST84。1ページ分の書き込みが終了すると、図1に示したフラッシュ内部制御回路5cによって1ページ分のデータの内蔵フラッシュメモリ5への書き込みが開始されるST85。FrontMON_DATAレジスタ38H’FFFF8000番地にH’00000000を書き込む。H’FFFF9000番地に分岐し、次のデバッグツール2から供給される命令コードを待つ。FrontMON_DATAレジスタ38に書き込まれたデータを、JTAG制御部15およびモニタコード供給機能16の機能により、MON_DATAレジスタ34に転送すると共に、MON_ACCESSレジスタ36のMNDTVLDビットを1にセットするST54。デバッグツール2は、JTAGインタフェース端子11を介してMON_ACCESSレジスタ36を読み出して、MNDTVLDビットをチェックし、1になったらJTAGインタフェース端子11を介してMON_DATAレジスタ34の値を読み出すST55。9内蔵フラッシュメモリへの書き込みデータの転送この動作は、6内蔵フラッシュメモリへの書き込みデータの転送と同一であるST56。10ステータスレディ待ちプログラムの実行ステータスレディ待ちプログラム実行手段この動作は、7ステータスレディ待ちプログラムの実行と同一であるST56~ST59。そして、必要なページ数分だけST53~ST58の処理を繰り返しST60、必要なブロック数分だけST25~ST60の処理を繰り返すST32。11E/Wモード終了プログラムの実行E/Wモード終了プログラム実行手段この動作は、図14に示した内蔵フラッシュメモリ5の消去動作のST33~ST35と同一である。なお、上記実施の形態1では、図9に示したように、ツールROM領域24、および書き換えプログラムを内蔵フラッシュメモリ5内のブートROM領域42に設け、セキュリティコード格納領域25および内蔵フラッシュ情報格納領域26を任意の空間に設けた。しかし、これらの領域は、CPU3からアクセスできる空間であればどの領域に置いても良く、ただし、これらの領域を内蔵フラッシュメモリ5に設けると、マイクロコンピュータ1のチップの製作後に、情報を書き込んだり、書き換えたりすることが可能となる利点がある。書き換えプログラムについては、格納場所を内蔵フラッシュメモリ5ではなく、マスクROMに格納してもよく、この場合には、内蔵フラッシュメモリ5の書き換えの際に内蔵SRAM6上に退避する必要がなく、処理が簡単になるという効果がある。なお、上記実施の形態1では、ツールROM領域24内の情報、セキュリティコード格納領域25内の情報、および内蔵フラッシュ情報格納領域26内の情報を区別したが、これら3つの情報をまとめて内蔵フラッシュ情報としても良い。以上のように、この実施の形態1によれば、デバッグツール2から直接に内蔵フラッシュメモリ5の書き換え制御を行うことができ、デバッグの作業効率を高くすることができるマイクロコンピュータが得られる効果がある。"