(57)【要約】【課題】ASICの再開発を行うことなく新規な通信プロトコルに対応することができるインターフェース装置を提供する。【解決手段】FlashROM１２は、通信プロトコルに従って外部装置と行う通信を制御するためのプログラムを記憶する。出力データバッファ制御回路６及び出力信号同期回路７は外部装置へ送信されるデータと制御信号との同期を制御する。CPU１は、プログラムに従って、外部装置へ送信される制御信号を生成する。【選択図】図１
2009015689.tif 000002
【特許請求の範囲】
【請求項１】
通信プロトコルに従って外部装置と行う通信を制御するためのプログラムを記憶する記憶部と、
前記外部装置との間で送信又は受信されるデータと制御信号との同期を制御する同期制御部と、
前記プログラムに従って、前記外部装置へ送信される前記制御信号を生成するCPUと、
を有するインターフェース装置。
【請求項２】
前記データを一時記憶するデータバッファをさらに有し、
前記同期制御部は、前記データバッファに記憶された前記データの転送を、前記CPU又は前記外部装置から入力される前記制御信号に基づき制御する
ことを特徴とする請求項１に記載のインターフェース装置。
【請求項３】
前記同期制御部は、前記CPUによってレジスタに格納された値と、前記外部装置から入力される前記制御信号の値との少なくとも一方に基づいて、前記データバッファに記憶された前記データの転送を制御することを特徴とする請求項２に記載のインターフェース装置。
【請求項４】
前記同期制御部は、前記データバッファに記憶された前記データの転送を制御する信号と、前記CPUによって生成された前記制御信号とに基づいて、前記外部装置へ送信される前記制御信号を制御することを特徴とする請求項２又は請求項３に記載のインターフェース装置。
【請求項５】
前記同期制御部は、前記CPUによって生成された前記制御信号の、前記外部装置への出力を、前記データバッファに記憶された前記データの量に応じて制御することを特徴とする請求項２〜請求項４のいずれかに記載のインターフェース装置。
【請求項６】
前記外部装置から入力される前記制御信号を一時記憶する入力制御信号バッファをさらに有することを特徴とする請求項２〜請求項５のいずれかに記載のインターフェース装置。
【請求項７】
前記同期制御部は、前記外部装置から入力される前記制御信号、或いは前記外部装置から入力されるデータが変化したときのみ、前記データバッファへの前記データの書き込み或いは前記入力制御信号バッファへの前記制御信号の書込みを許可することを特徴とする請求項６に記載のインターフェース装置。
【請求項８】
前記外部装置へ送信される前記制御信号を一時記憶する出力制御信号バッファをさらに有することを特徴とする請求項２〜請求項７のいずれかに記載のインターフェース装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部装置と通信を行うインターフェース装置に関する。
【背景技術】
【０００２】
各種電子機器の中にはASIC（特定用途向けIC）を備えたものがある。ASIC等のデバイスはインターフェース装置を有し、このインターフェース装置を介して、機器内に設けられる他のデバイスとの間でデータの授受を行う。このようなインターフェース装置として、互いに異なるデータ転送方式を有する複数のインターフェース部の中から、動作させるインターフェース部を選択するセレクタを具備することにより、機器のバージョンアップ等により、他の周辺デバイスが採用する通信プロトコルが更新された際に、ASICの再開発を行うことなく通信プロトコルの更新に対応するものがある（例えば特許文献１参照）。
【特許文献１】特開２００４−３４８５８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来のインターフェース装置において、更新された通信プロトコルが、予め用意されたインターフェース装置では対応していないものである場合に、ASICの再開発が必要になり、余計な開発費や作業工数が発生するという観点については記載されていない。
【０００４】
本発明は、上述した課題に鑑みてなされたものであって、ASICの再開発を行うことなく新規な通信プロトコルに対応することができるインターフェース装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明者は、CPUを動作させるためのプログラムを変更することにより、ASICの再開発を行うことなく新規な通信プロトコルに対応可能とすることに着目した。特に、外部装置との間で送信又は受信されるデータと制御信号との同期を制御するための、各通信プロトコルに共通の構成を設けておき、通信プロトコル毎に異なるデータと制御信号との同期方法をプログラムの変更により実現することに着想した。
【０００６】
本発明は、上記の点に鑑み、通信プロトコルに従って外部装置との間で行う通信を制御するためのプログラムを記憶する記憶部（図１のFlashROM１２に対応）と、前記外部装置との間で送信又は受信されるデータと制御信号との同期を制御する同期制御部（図１の入力データバッファ制御回路４、出力データバッファ制御回路６、出力信号同期回路７、図９の入力データバッファ制御回路４、出力データバッファ制御回路６、出力信号同期回路１５に対応）と、前記プログラムに従って、前記外部装置へ送信される前記制御信号を生成するCPUとを有するインターフェース装置である。
【０００７】
また、本発明の通信インターフェース装置は、前記データを一時記憶するデータバッファ（図１の入力データバッファ３、出力データバッファ５に対応）をさらに有し、前記同期制御部は、前記データバッファに記憶された前記データの転送を、前記CPU又は前記外部装置から入力される前記制御信号に基づき制御することを特徴とする。
【０００８】
また、本発明の通信インターフェース装置において、前記同期制御部（図３の出力データバッファ制御回路６に対応）は、前記CPUによってレジスタ（図３のデータ出力許可レジスタ６ａに対応）に格納された値と、前記外部装置から入力される前記制御信号の値との少なくとも一方に基づいて、前記データバッファに記憶された前記データの転送を制御することを特徴とする。
【０００９】
また、本発明の通信インターフェース装置において、前記同期制御部（図３の出力信号同期回路７に対応）は、前記データバッファに記憶された前記データの転送を制御する信号（図３のリードリクエスト信号rdreqに対応）と、前記CPUによって生成された前記制御信号とに基づいて、前記外部装置へ送信される前記制御信号を制御することを特徴とする。
【００１０】
また、本発明の通信インターフェース装置において、前記同期制御部（図８の入力データバッファ制御回路４に対応）は、前記CPUによって生成された前記制御信号の、前記外部装置への出力を、前記データバッファに記憶された前記データの量に応じて制御することを特徴とする。
【００１１】
また、本発明の通信インターフェース装置において、前記外部装置から入力される前記制御信号を一時記憶する入力制御信号バッファ（図１の入力制御信号バッファ２に対応）をさらに有することを特徴とする。
【００１２】
また、本発明の通信インターフェース装置において、前記同期制御部（図１３の入力データバッファ制御回路４に対応）は、前記外部装置から入力される前記制御信号、或いは前記外部装置から入力されるデータが変化したときのみ、前記データバッファへの前記データの書き込み或いは前記入力制御信号バッファへの前記制御信号の書込みを許可することを特徴とする。
【００１３】
また、本発明の通信インターフェース装置において、前記外部装置へ送信される前記制御信号を一時記憶する出力制御信号バッファ（図９の出力制御信号バッファ１４に対応）をさらに有することを特徴とする。
【００１４】
上記において、括弧で括った部分の記述は、後述する本発明の実施形態と本発明の構成要素とを便宜的に対応付けるためのものであり、この記述によって本発明の内容が限定されるわけではない。
【発明の効果】
【００１５】
本発明によれば、CPUを動作させるためのプログラムを変更することにより、ASICの再開発を行うことなく新規な通信プロトコルに対応することができるという効果が得られる。
【発明を実施するための最良の形態】
【００１６】
以下、図面を参照し、本発明の実施形態を説明する。
【００１７】
（第１の実施形態）
まず、本発明の第１の実施形態を説明する。図１は、本実施形態によるインターフェース装置の構成を示している。図１において、インターフェース装置は、CPU１、入力制御信号バッファ２、入力データバッファ３、入力データバッファ制御回路４、出力データバッファ５、出力データバッファ制御回路６、出力信号同期回路７、内部回路I/F８、内部回路９、メモリコントローラ１０、SDRAM１１、FlashROM１２、及びバス１３を有している。
【００１８】
図２はCPU１の構成を示している。CPU１は、ALU１ａ（演算器）、汎用レジスタ１ｂ、ロードストアユニット１ｃ、割込みコントローラ１ｄ、レジスタ１ｅ、立ち下がり微分回路１ｆ、立ち上がり微分回路１ｇ、及びセレクタ１ｈを有している。ALU１ａは演算を実行する。汎用レジスタ１ｂは、ALU１ａが演算に用いる値及び演算の実行結果を記憶する。ロードストアユニット１ｃは、バス１３を介してデータの転送を実行する。割込みコントローラ１ｄは、入力される割込み信号に基づいてCPU１に対する割込みの発生を検出する。レジスタ１ｅは、ALU１ａが演算に用いる値及び演算の実行結果を記憶する。
【００１９】
立ち下がり微分回路１ｆは、入力信号の立ち下がりに対応した信号を出力する。立ち上がり微分回路１ｇは、入力信号の立ち上がりに対応した信号を出力する。セレクタ１ｈは、レジスタ１ｅ、立ち下がり微分回路１ｆ、及び立ち上がり微分回路１ｇのいずれかの出力を選択して出力する。汎用レジスタ１ｂの各ビットが各制御信号に対応しており、基本的にはALU１ａが汎用レジスタ１ｂに値を書き込むと、その値が制御信号（出力）として外部装置（外部デバイス）へ出力される。ただし、レジスタ１ｅの出力が立ち下がり微分回路１ｆ及び立ち上がり微分回路１ｇに接続されており、立ち下がり微分回路１ｆ及び立ち上がり微分回路１ｇの出力とレジスタ１ｅの出力のうち、セレクタ１ｈによって選択された出力が外部装置へ出力される。以上の構成により、任意のレベルの出力を任意のタイミングで出力する以外に、パルス状の波形を出力することも可能である。
【００２０】
図１において、入力制御信号バッファ２は、外部装置から入力される制御信号（入力）を一時記憶する。入力データバッファ３は、外部装置から入力されるデータを一時記憶する。入力データバッファ制御回路４は入力データバッファ３を制御する。出力データバッファ５は、外部装置へ出力されるデータを一時記憶する。出力データバッファ制御回路６は出力データバッファ５を制御する。出力信号同期回路７は、外部装置への制御信号（出力）を発生することが可能であり、外部装置へ出力されるデータ及び制御信号（出力）の同期を制御する。内部回路I/F８は入力データバッファ３及び出力データバッファ５と内部回路９との間でデータを転送する。内部回路９は所定のデータ処理を実行する。
【００２１】
メモリコントローラ１０はCPU１によるSDRAM１１及びFlashROM１２へのアクセスを制御する。SDRAM１１は、CPU１が作業領域として使用するメモリである。FlashROM１２は、通信プロトコルに従って外部装置と行う通信を制御するための書き換え可能なプログラムを記憶する。
【００２２】
本実施形態によるインターフェース装置の動作の概略は以下のようになる。CPU１の命令を記録したプログラムはFlashROM１２に格納されている。CPU１に駆動電力が供給されてリセットが解除されると、CPU１はメモリコントローラ１０を介してFlashROM１２からプログラムを読み出し、SDRAM１１に展開する。プログラムの展開後、CPU１はSDRAM１１から命令をフェッチして動作する。CPU１は、内部回路９の動作状態を判断すると共に、入力制御信号バッファ２に毎クロック（毎サイクル）書き込まれる外部装置からの制御信号（入力）を総合的に判断し、必要に応じて入力データバッファ制御回路４や出力データバッファ制御回路６を制御すると同時に、外部装置への制御信号（出力）を生成する。
【００２３】
図３は出力データバッファ制御回路６及び出力信号同期回路７の構成を示している。出力データバッファ制御回路６は、データ出力許可レジスタ６ａ、AND回路６ｂ、セレクタ６ｃ、及びAND回路６ｄを有している。データ出力許可レジスタ６ａは、データの出力を許可するか否かを示す値を記憶する。AND回路６ｂは、データ出力許可レジスタ６ａの出力と、外部装置から入力される制御信号（入力）とのAND演算結果を出力する。
【００２４】
セレクタ６ｃはデータ出力許可レジスタ６ａ及びAND回路６ｂのいずれかの出力を選択して出力する。AND回路６ｄは、出力データバッファ５から出力される、出力データバッファ５が空であるか否かを示すエンプティ信号emptyとセレクタ６ｃの出力とのAND演算結果を出力する。AND回路６ｄの出力は、出力データバッファ５からのデータの読み出し（出力）を指示するリードリクエスト信号rdreqとなる。
【００２５】
データ出力許可レジスタ６ａの出力はセレクタ６ｃ及びAND回路６ｄを介して出力データバッファ５のリードリクエスト信号rdreqの端子に接続されており、データ出力許可レジスタ６ａの値を制御することにより、出力データの更新を制御することが可能である。ただし、出力データバッファ５にデータが格納されていない場合には、エンプティ信号emptyがアサートされない（１とならない）ため、リクエスト信号rdreqもアサートされない。
【００２６】
一方、リクエスト信号rdreqを外部装置からの制御信号（入力）によって制御することも可能である。セレクタ６ｃがAND回路６ｂの出力を選択している場合には、制御信号（入力）がアサートされていなければ、データ出力許可レジスタ６ａの状態に関わらず、リードリクエスト信号rdreqはアサートされず、出力データの更新が行われない。この構成により、外部装置からのBUSY信号、WAIT信号、READY信号等に対応して出力データバッファ５を制御することが可能である。
【００２７】
出力信号同期回路７は、フリップフロップ７ａ，７ｂ、AND回路７ｃ、及びセレクタ７ｄを有している。フリップフロップ７ａは、CPU１によって生成されて外部装置へ出力される制御信号（出力）を保持する。このフリップフロップ７ａの動作を制御するイネーブル信号として、AND回路６ｄからのリードリクエスト信号rdreqが用いられる。この構成により、出力データの更新タイミングと制御信号（出力）の更新タイミングを合わせることが可能となる。
【００２８】
フリップフロップ７ｂは、出力データバッファ５から出力されるエンプティ信号emptyを保持する。AND回路７ｃはフリップフロップ７ａ，７ｂの出力のAND演算結果を出力する。この構成により、出力データバッファ５にデータが格納されていないとき（エンプティ信号empty＝０）に制御信号（出力）として余計な信号が出力されないようにすることが可能となる。セレクタ７ｄはフリップフロップ７ａ及びAND回路７ｃのいずれかの出力を選択して制御信号（出力）として外部装置へ出力する。
【００２９】
次に、一般的なリクエスト／グラント／バリッドを用いた通信プロトコルの本実施形態での実現方法を説明する。図４は、本実施形態によるインターフェース装置が外部装置へデータを送信する動作を示している。初期状態のデータ出力許可レジスタ６ａには０が格納されているものとする。まず、出力データバッファ５に十分なデータが格納されたことをCPU１が確認すると、CPU１は立ち上がり微分回路１ｇを用いて、外部装置にデータ出力の許可を要求するためのパルス状のリクエスト信号REQを発生する。外部装置はリクエスト信号REQを受け取ると、受信可能状態であれば、データ出力の許可を示すグラント信号GRTを返す。このグラント信号GRTの値は入力制御信号バッファ２に格納される。
【００３０】
CPU１は入力制御信号バッファ２からグラント信号GRTの値を読み出す。読み出したグラント信号GRTの値が１であった場合、CPU１は、データの有効性を示すバリッド信号VLDを１にした後、出力データバッファ制御回路６内のデータ出力許可レジスタ６ａに１を格納する。また、CPU１は予め出力データバッファ制御回路６を制御し、セレクタ６ｃの入力をデータ出力許可レジスタ６ａの出力側にセットしており、データ出力許可レジスタ６ａの値が０から１に変化すると、セレクタ６ｃの出力も０から１に変化する。
【００３１】
セレクタ６ｃの出力はAND回路６ｄに入力される。また、AND回路６ｄには出力データバッファ５からのエンプティ信号emptyも入力される。出力データバッファ５が空ではないため、エンプティ信号emptyはアサートされている（エンプティ信号empty＝１）。したがって、データ出力許可レジスタ６ａに１が格納されると、AND回路６ｄの出力であるリクエスト信号rdreqは１となり、出力データバッファ５からデータが出力される。
【００３２】
一方、CPU１が発生したバリッド信号VLDは出力信号同期回路７のフリップフロップ７ａに入力される。リクエスト信号rdreqがフリップフロップ７ａのイネーブル信号となっているため、リクエスト信号rdreqが１となったタイミングでフリップフロップ７ａの出力が１となる。また、CPU１は予め出力信号同期回路７を制御し、セレクタ７ｄの入力をAND回路７ｃの出力側にセットしている。セレクタ７ｄには、フリップフロップ７ａの出力（バリッド信号VLD）とフリップフロップ７ｂの出力（エンプティ信号empty＝１）が入力される。したがって、フリップフロップ７ａの出力が０から１に変化すると、セレクタ７ｄの出力（バリッド信号VLD）も０から１に変化する。以上の動作により、図４に示すように、出力データバッファ５から出力されるデータ及びバリッド信号VLDが同期して更新される。
【００３３】
図５は、本実施形態によるインターフェース装置が外部装置からデータを受信する動作を示している。外部装置は、自身が送信可能状態であると判断すると、リクエスト信号REQを出力する。このリクエスト信号REQの値は入力制御信号バッファ２に格納される。CPU１は入力制御信号バッファ２からリクエスト信号REQの値を読み出す。読み出したリクエスト信号REQの値が１であった場合、CPU１は、立ち上がり微分回路１ｇを用いて、パルス状の信号をグラント信号GRTとして外部装置へ出力する。
【００３４】
グラント信号GRTを受信した外部装置はデータを出力すると共に、バリッド信号VLDを０から１に変化させて出力する。バリッド信号VLDの値は入力制御信号バッファ２に格納される。CPU１は入力制御信号バッファ２からバリッド信号VLDの値を読み出す。読み出したバリッド信号VLDの値が１であった場合、バリッド信号VLDと同時に入力されて入力データバッファ３に格納されたデータが有効であると判断できるため、CPU１は内部回路I/F８を制御して入力データバッファ３から内部回路９にデータを転送する。バリッド信号VLDとデータの同期を実現する方法は、図４を参照して説明した方法と同様である。
【００３５】
次に、一般的なバリッド／ビジーを用いた通信プロトコルの本実施形態での実現方法を説明する。図６は、本実施形態によるインターフェース装置が外部装置へデータを送信する動作を示している。初期状態のデータ出力許可レジスタ６ａには０が格納されているものとする。また、外部装置から出力される、ビジー状態であるか否かを示すビジー信号BSYは初期状態では１である（外部装置がビジー状態ではない）ものとする。まず、出力データバッファ５に十分なデータが格納されたことをCPU１が確認すると、CPU１はバリッド信号VLDを１にした後、データ出力許可レジスタ６ａに１を格納する。
【００３６】
CPU１は予め出力データバッファ制御回路６を制御し、セレクタ６ｃの入力をAND回路６ｂの出力側にセットしている。外部装置からのビジー信号BSYはAND回路６ｂに入力される。データ出力許可レジスタ６ａの値が０から１に変化すると、セレクタ６ｃの出力も０から１に変化する。セレクタ６ｃの出力はAND回路６ｄに入力される。また、AND回路６ｄには出力データバッファ５のエンプティ信号emptyも入力される。出力データバッファ５が空ではないため、エンプティ信号emptyは１である。したがって、データ出力許可レジスタ６ａに１が格納されると、AND回路６ｄの出力であるリクエスト信号rdreqは１となり、出力データバッファ５からデータが出力される。
【００３７】
一方、CPU１が発生したバリッド信号VLDは出力信号同期回路７のフリップフロップ７ａに入力される。リクエスト信号rdreqがフリップフロップ７ａのイネーブル信号となっているため、リクエスト信号rdreqが１となったタイミングでフリップフロップ７ａの出力が１となる。また、CPU１は予め出力信号同期回路７を制御し、セレクタ７ｄの入力をAND回路７ｃの出力側にセットしている。セレクタ７ｄには、フリップフロップ７ａの出力（バリッド信号VLD）とフリップフロップ７ｂの出力（エンプティ信号empty＝１）が入力される。したがって、フリップフロップ７ａの出力が０から１に変化すると、セレクタ７ｄの出力（バリッド信号VLD）も０から１に変化する。以上の動作により、図６に示すように、出力データバッファ５から出力されるデータ及びバリッド信号VLDが同期して更新される。
【００３８】
外部装置がビジー信号BSYを０にすることで、ビジー状態であることをインターフェース装置に通知すると、このビジー信号BSYはAND回路６ｂに入力される。このため、AND回路６ｂから０が出力される。セレクタ６ｃの入力がAND回路６ｂの出力側にセットされているため、AND回路６ｂから０が出力されると、セレクタ６ｃの出力は０となる。この信号がAND回路６ｄに入力されるため、AND回路６ｄの出力であるリクエスト信号rdreqは０となり、出力データバッファ５のデータ更新は行われず、外部装置がビジー状態の間は同一データの出力が継続する。
【００３９】
また、出力データバッファ５にデータが格納されていない場合には、エンプティ信号emptyが０になるため、AND回路７ｃの出力は０となる。セレクタ７ｄの入力がAND回路７ｃの出力側にセットされているため、AND回路７ｃから０が出力されると、セレクタ７ｄの出力（バリッド信号VLD）も０となる。この動作によって、外部装置が無効なデータを誤って取得しないようにすることが可能である。
【００４０】
図７は、本実施形態によるインターフェース装置が外部装置からデータを受信する動作を示している。また、図８は、この動作を実現する入力データバッファ制御回路４の構成を示している。入力データバッファ制御回路４は入力データ量比較値レジスタ４ａ、比較回路４ｂ，４ｃ、及びOR回路４ｄを有している。
【００４１】
入力データ量比較値レジスタ４ａは、データ量の比較に用いる閾値を記憶する。比較回路４ｂは、入力データバッファ３から出力される、入力データバッファ３に格納されているデータ量を示す信号usedwに基づくデータ量と、入力データ量比較値レジスタ４ａに格納されている閾値（≠０）とを比較し、比較結果に応じた信号を出力する。信号usedwに基づくデータ量が閾値と一致した場合には、比較回路４ｂは１を出力する。また、信号usedwに基づくデータ量が閾値と一致しなかった場合には、比較回路４ｂは０を出力する。
【００４２】
比較回路４ｃは、入力データバッファ３から出力される信号usedwに基づくデータ量と０とを比較し、比較結果に応じた信号を出力する。信号usedwに基づくデータ量が０と一致した場合には、比較回路４ｃは１を出力する。また、信号usedwに基づくデータ量が０と一致しなかった場合には、比較回路４ｃは０を出力する。OR回路４ｄは比較回路４ｂ，４ｃの出力のOR演算結果を出力する。OR回路４ｄから出力された信号は、割込み信号としてCPU１の割込みコントローラ１ｄに入力される。
【００４３】
外部装置からデータを受信する場合、インターフェース装置の動作は以下のようになる。外部装置からインターフェース装置にデータ及びバリッド信号VLDが入力されると、データは入力データバッファ３に格納され、バリッド信号VLDの値は入力制御信号バッファ２に格納される。CPU１は入力制御信号バッファ２からバリッド信号VLDの値を読み出す。読み出したバリッド信号VLDの値が１であった場合、バリッド信号VLDと同時に入力されて入力データバッファ３に格納されたデータが有効であると判断できるため、CPU１は内部回路I/F８を制御して入力データバッファ３から内部回路９にデータを転送する。
【００４４】
入力データバッファ３に格納されたデータ量が、入力データ量比較値レジスタ４ａに格納されている閾値と一致した場合、比較回路４ｂは１を出力する。このため、OR回路４ｄは割込み信号として１を出力する。CPU１は、割込みコントローラ１ｄにより割込み信号が１となったことを検出すると、ビジー信号BSYを０にして、ビジー状態であることを外部装置に通知する。
【００４５】
インターフェース装置と外部装置との間のデータ転送に用いるクロックがインターフェース装置のシステムクロックに比べて速い場合、入力制御信号バッファ２及び入力データバッファ３がオーバフローする恐れがある。そこで、入力データバッファ３に格納されたデータ量が、入力データ量比較値レジスタ４ａに格納されている閾値に到達した場合には、CPU１に対する割込みを発生し、CPU１がビジー信号BSYを０にすることによって、入力制御信号バッファ２及び入力データバッファ３のオーバフローを防止することが可能となる。
【００４６】
CPU１がビジー信号BSYを０にすることによって、インターフェース装置が一旦ビジー状態になった後、入力データバッファ３に格納されたデータ量が０になると、比較回路４ｃは１を出力する。このため、OR回路４ｄは割込み信号として１を出力する。CPU１は、割込みコントローラ１ｄにより割込み信号が１となったことを検出すると、ビジー信号BSYを１にして、ビジー状態ではなくなったことを外部装置に通知する。
【００４７】
なお、CPU１に対する割込みが発生してからCPU１がビジー信号を０にするまでの間に入力データバッファ３に格納されるデータ量をNとし、入力データバッファ３のサイズをMとすると、入力データ量比較値レジスタ４ａに設定される値は（Ｍ-Ｎ）より小さい値となる。また、上記では、入力データバッファ３に格納されたデータ量に応じてCPU１に対して割込みを発生しているが、入力制御信号バッファ２に格納された制御信号量に応じてCPU１に対して上記と同様に割込みを発生してもよい。
【００４８】
以上、一般的な通信プロトコルの実現方法を説明したが、どのような通信プロトコルであっても、上記の通信プロトコルのいずれかに分類される。したがって、新規な通信プロトコルに対応するには、CPUを動作させるためのプログラムを変更すればよい。これにより、ASICの再開発を行うことなく新規な通信プロトコルに対応することができる。また、データバッファに記憶されたデータの転送を、CPU又は外部装置から入力される制御信号に基づいて制御することによって、通信プロトコルに従うデータの送信又は受信と制御信号との同期を実現することができる。
【００４９】
また、図３に示した出力データバッファ制御回路６によって、外部装置からの制御信号の状態変化と、出力データバッファ５に記憶されたデータの転送動作との同期を実現することができる。さらに、図３に示した出力信号同期回路７によって、出力データバッファ５に記憶されたデータの転送動作と、外部装置への制御信号の状態変化との同期を実現することができる。
【００５０】
また、図８に示した入力データバッファ制御回路４によって、通信プロトコルを破綻させることなく、データの転送動作と制御信号の状態変化との同期を実現することができる。
【００５１】
（第２の実施形態）
次に、本発明の第２の実施形態を説明する。図９は、本実施形態によるインターフェース装置の構成を示している。図９に示すインターフェース装置では、図１に示したインターフェース装置と比較して、CPU１から外部装置へ出力される制御信号（出力）を一時記憶する出力制御信号バッファ１４が新たに設けられている。また、図１の出力信号同期回路７の代わりに出力信号同期回路１５が設けられている。
【００５２】
以下、本実施形態によるSPI（シリアル・ペリフェラル・インターフェース）の実現方法を説明する。図１０は、本実施形態によるインターフェース装置が外部装置からデータを受信する動作を示している。また、図１１は、この動作を実現する出力データバッファ制御回路６及び出力信号同期回路１５の構成を示している。
【００５３】
出力データバッファ制御回路６は、図３と同様にデータ出力許可レジスタ６ａ、AND回路６ｂ、セレクタ６ｃ、及びAND回路６ｄを有している。また、出力信号同期回路１５は、フリップフロップ１５ａ、AND回路１５ｂ、及びセレクタ１５ｃを有している。図１１には示していないが、制御信号毎に同じ構成の出力信号同期回路１５が設けられているものとする。
【００５４】
フリップフロップ１５ａは出力データバッファ５のエンプティ信号emptyを保持する。AND回路１５ｂは出力制御信号バッファ１４の制御信号出力及びフリップフロップ１５ａの出力のAND演算結果を出力する。セレクタ１５ｃは、AND回路１５ｂの出力、出力制御信号バッファ１４の制御信号出力、及び出力制御信号バッファ１４の制御信号入力のいずれかを選択して出力する。
【００５５】
外部装置へデータを送信する場合、インターフェース装置の動作は以下のようになる。まず、CPU１はチップセレクト信号CSを１にする。チップセレクト信号CSに関する出力信号同期回路１５では、セレクタ１５ｃは出力制御信号バッファ１４の制御信号入力を選択して出力する。
【００５６】
出力データバッファ５には、図１２（ａ）に示すように、アドレスとオペコードからなるデータがCPU１によって予め格納されている。チップセレクト信号CSを１にした後、CPU１はデータ出力許可レジスタ６ａに１を格納する。また、CPU１は予め出力データバッファ制御回路６を制御し、セレクタ６ｃの入力をデータ出力許可レジスタ６ａの出力側にセットしており、データ出力許可レジスタ６ａの値が０から１に変化すると、セレクタ６ｃの出力も０から１に変化する。
【００５７】
セレクタ６ｃの出力はAND回路６ｄに入力される。また、AND回路６ｄには出力データバッファ５からのエンプティ信号emptyも入力される。出力データバッファ５が空ではないため、エンプティ信号emptyはアサートされている（エンプティ信号empty＝１）。したがって、データ出力許可レジスタ６ａに１が格納されると、AND回路６ｄの出力であるリクエスト信号rdreqは１となり、図１２（ａ）に示すデータが、図１０に示すデータSIとして出力データバッファ５から順次出力される。
【００５８】
また、出力制御信号バッファ１４には、図１２（ｂ）に示すように、１と０が交互に並んだ値がCPU１によって予め格納されている。チップセレクト信号CSを１にした後、CPU１がデータ出力許可レジスタ６ａに１を格納すると、AND回路６ｄの出力であるリクエスト信号rdreqが１となるのは上記の通りである。このリクエスト信号rdreqは出力制御信号バッファ１４にも入力されるため、出力制御信号バッファ１４に格納された１と０がクロックCLKに同期して出力され、出力信号同期回路１５内のフリップフロップ１５ａに入力される。フリップフロップ１５ａは１と０を交互にAND回路１５ｂへ出力する。
【００５９】
CPU１は予め出力信号同期回路１５を制御し、セレクタ１５ｃの出力をAND回路１５ｂの出力側にセットしている。エンプティ信号emptyが１であるため、AND回路１５ｂからは１と０が交互に出力される。セレクタ１５ｃはAND回路１５ｂの出力をシリアルクロックSCKとして外部装置へ出力する。
【００６０】
通常、CPU１が制御信号を出力するには、ALU１ａによる演算と汎用レジスタ１ｂへの値の格納とが必要なため、クロック毎に値が変化する制御信号をリアルタイムに生成して出力することが困難である。しかし、本実施形態では、予め生成した制御信号を一旦出力制御信号バッファ１４にバッファリングし、クロックに同期して制御信号を出力することによって、クロック毎に値が変化する制御信号を出力することができる。したがって、制御信号の値がクロック毎に変化する通信プロトコルに対応することができる。
【００６１】
（第３の実施形態）
次に、本発明の第３の実施形態の変形例を説明する。図１３は、本実施形態によるインターフェース装置の部分構成を示している。図１３に示した構成以外の構成は第１の実施形態又は第２の実施形態と同様である。本実施形態の入力データバッファ制御回路４は、入力データ量比較値レジスタ４ａ、比較回路４ｂ，４ｃ、OR回路４ｄ、及び微分回路４ｅを有している。入力データ量比較値レジスタ４ａ、比較回路４ｂ，４ｃ、及びOR回路４ｄは図８と同様である。微分回路４ｅは、外部装置から入力される制御信号の立ち上がり及び立ち下がりに対応した信号を出力する。また、本実施形態ではカウンタ１６及びカウンタバッファ１７が設けられている。カウンタ１６は、クロックに同期して値（カウント値）をカウントアップする。カウンタバッファは、カウンタ１６から出力されたカウント値を記憶する。
【００６２】
本実施形態では、制御信号の値が変化したときのみ、その値が入力制御信号バッファ２に格納される。したがって、入力制御信号バッファ２に格納された値が保持された期間をCPU１が知ることができない。このため、カウンタ１６及びカウンタバッファ１７を設け、入力制御信号バッファ２に格納された値が保持された期間をカウント及び記憶するようになっている。また、カウンタバッファ１７のオーバフローを防止するため、カウンタバッファ１７に格納されている値の量を示す信号usedwが入力データバッファ制御回路４の比較回路４ｂ，４ｃに入力される。
【００６３】
図１４は、本実施形態によるインターフェース装置が外部装置からデータを受信する動作を示している。入力制御信号バッファ２には外部装置からのバリッド信号VLDの値が格納されるものとする。また、初期状態では、バリッド信号VLDの値を示すＫ−１個の値が入力制御信号バッファ２に格納されていると共に、それらに対応したカウント値Ｋ−１がカウンタバッファ１７に格納されているものとする。また、入力データ量比較値レジスタ４ａには入力データ量比較値としてＫが格納されているものとする。
【００６４】
外部装置から入力されるバリッド信号VLDが０から１に変化したとき、微分回路４ｅの出力が０から１に変化する。微分回路４ｅから出力された信号は、書込みを指示するライトリクエスト信号wrreqとして入力制御信号バッファ２及びカウンタバッファ１７に入力される。これによって、そのときのバリッド信号VLDの値（＝１）が入力制御信号バッファ２に格納されると共に、カウンタ１６から出力されたカウント値（＝N）がカウンタバッファ１７に格納される。このカウント値Ｎは、バリッド信号VLDの値が０であった期間の長さを表す。微分回路４ｅから出力された信号はカウンタ１６にも入力され、その信号の値が０から１に変化したときにカウンタ１６のカウント値が１に初期化される。
【００６５】
カウンタバッファ１７に格納されたカウント値が１つ増加したことによって、カウンタバッファ１７から出力される信号usedwの値はＫとなる。この値が、入力データ量比較値レジスタ４ａに格納されている入力データ量比較値と一致するため、比較回路４ｂから出力される信号は１となり、OR回路４ｄから出力される割込み信号も１となる。これによって、CPU１に対する割込みが発生する。
【００６６】
割込みが発生すると、CPU１は入力制御信号バッファ２及びカウンタバッファ１７に対するリードリクエスト信号rdreqを１にし、入力制御信号バッファ２及びカウンタバッファ１７から値を読み出す。続いて、CPU１は、入力制御信号バッファ２から読み出したＫ個の値と、カウンタバッファ１７から読み出したカウント値Ｋとを対比させ、バリッド信号VLDが０または１であった期間が幾つ分のクロック期間であったのかを判断する。例えば、入力制御信号バッファ２に最後に格納された値（＝１）と、カウンタバッファ１７に最後に格納された値（＝Ｎ）とから、バリッド信号VLDが０であった期間がＮクロック期間であったとCPU１は判断する。
【００６７】
バリッド信号VLDが０または１であった期間が分かると、その期間に対応する分のデータが有効／無効のどちらであるのかが分かる。CPU１は上記の判断結果に応じて、入力データバッファ３に格納されているデータに対して演算を実行する。バリッド信号VLDの値が１から０に変化したときにも、そのときのバリッド信号VLDの値（＝０）が入力制御信号バッファ２に格納されると共に、カウンタ１６のカウント値がカウンタバッファ１７に格納される。
【００６８】
したがって、本実施形態によれば、制御信号の状態に変化があったときにのみ入力制御信号バッファ２への書込みを行う通信プロトコルを実現することができる。また、上記と同様に、微分回路４ｅから出力される信号をライトリクエスト信号wrreqとして入力データバッファ３に入力させることによって、データの状態に変化があったときにのみ入力データバッファ３への書込みを行う通信プロトコルを実現することもできる。
【００６９】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【図面の簡単な説明】
【００７０】
【図１】本発明の第１の実施形態によるインターフェース装置の構成を示すブロック図である。
【図２】本発明の第１の実施形態によるインターフェース装置が備えるCPUの構成を示すブロック図である。
【図３】本発明の第１の実施形態によるインターフェース装置が備える出力データバッファ制御回路及び出力信号同期回路の構成を示すブロック図である。
【図４】本発明の第１の実施形態によるインターフェース装置が外部装置へデータを送信する動作を示すタイミングチャートである。
【図５】本発明の第１の実施形態によるインターフェース装置が外部装置からデータを受信する動作を示すタイミングチャートである。
【図６】本発明の第１の実施形態によるインターフェース装置が外部装置へデータを送信する動作を示すタイミングチャートである。
【図７】本発明の第１の実施形態によるインターフェース装置が外部装置からデータを受信する動作を示すタイミングチャートである。
【図８】本発明の第１の実施形態によるインターフェース装置が備える入力データバッファ制御回路の構成を示すブロック図である。
【図９】本発明の第２の実施形態によるインターフェース装置の構成を示すブロック図である。
【図１０】本発明の第２の実施形態によるインターフェース装置が外部装置へデータを送信する動作を示すタイミングチャートである。
【図１１】本発明の第２の実施形態によるインターフェース装置が備える出力データバッファ制御回路及び出力信号同期回路の構成を示すブロック図である。
【図１２】本発明の第２の実施形態によるインターフェース装置が備える出力データバッファ及び出力制御信号バッファに格納されるデータ及び制御信号の状態を示す参考図である。
【図１３】本発明の第３の実施形態によるインターフェース装置の部分構成を示すブロック図である。
【図１４】本発明の第３の実施形態によるインターフェース装置が外部装置からデータを受信する動作を示すタイミングチャートである。
【符号の説明】
【００７１】
１・・・CPU、２・・・入力制御信号バッファ、３・・・入力データバッファ、４・・・入力データバッファ制御回路、５・・・出力データバッファ、６・・・出力データバッファ制御回路、７，１５・・・出力信号同期回路、８・・・内部回路I/F、９・・・内部回路、１０・・・メモリコントローラ、１１・・・SDRAM、１２・・・FlashROM、１３・・・バス、１４・・・出力制御信号バッファ、１６・・・カウンタ、１７・・・カウンタバッファ
【図１】
2009015689.tif 000003
【図２】
2009015689.tif 000004
【図３】
2009015689.tif 000005
【図４】
2009015689.tif 000006
【図５】
2009015689.tif 000007
【図６】
2009015689.tif 000008
【図７】
2009015689.tif 000009
【図８】
2009015689.tif 000010
【図９】
2009015689.tif 000011
【図１０】
2009015689.tif 000012
【図１１】
2009015689.tif 000013
【図１２】
2009015689.tif 000014
【図１３】
2009015689.tif 000015
【図１４】
2009015689.tif 000016