説明

マスタデバイスおよびバスシステム

【課題】CPUの負担を抑えながら、簡単な構成でスレーブデバイスの割り込み要求を監視することができるマスタデバイスを実現する。
【解決手段】本発明に係るマスタデバイス3は、I2Cバスを介してスレーブデバイス2a〜2eに接続され、各スレーブデバイス2a〜2eに割り当てられたデバイスアドレスを指定することで各スレーブデバイス2a〜2eとの通信を行い、スレーブデバイス2a〜2eのうち、割り込み機能を有するスレーブデバイス2a、2b、2d、2eから、マスタデバイス3およびスレーブデバイス2a〜2eを制御するCPU4への割り込み要求を周期的に監視する割り込み監視回路31を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、I2Cバスを利用したバスシステムに関し、特に、スレーブデバイスからの割り込み要求を監視する技術に関する。
【背景技術】
【0002】
デバイス間の情報伝達を行うためのインターフェイスとして、I2C(Inter Integrated Circuit)バスが知られている。
【0003】
図9は、I2Cバスを用いた従来のバスシステム101の概略構成を示すブロック図である。バスシステム101は、5つのスレーブデバイス102a〜102eと、マスタデバイス103と、CPU104とを備えている。マスタデバイス103およびCPU104とは、同一のチップ105内に設けられる。
【0004】
スレーブデバイス102a〜102eとマスタデバイス103とは、I2Cバスを介して接続されている。マスタデバイス103は、各スレーブデバイス102a〜102eに割り当てられたデバイスアドレスを指定することで、各スレーブデバイス102a〜102eとの通信を行う。各スレーブデバイス102a〜102eは、マスタデバイス103からのシリアルクロックSCLに合わせて、シリアルデータSDAの入出力を行う。
【0005】
CPU104は、スレーブデバイス102a〜102eおよびマスタデバイス103の制御を行うものであり、マスタデバイス103とCPU104とは、データバスDB、アドレスバスABおよび割り込みラインL1を介して接続されている。割り込みラインL1は、マスタデバイス103から見たI2Cバスのエラーや処理完了などによる割り込み要求をマスタデバイス103からCPU104へ送信するためのものである。
【0006】
また、スレーブデバイス102a〜102eのうち、スレーブデバイス102a、102b、102d、102eは、CPU104に対する割り込み機能を有している。しかしながら、I2Cバスを用いたシリアルバスシステムでは、スレーブデバイスからI2Cバスを介してCPUへの割り込みを行うことができない。そのため、バスシステム101では、割り込みを必要とするスレーブデバイス102a、102b、102d、102eとCPU104とが、割り込みラインL2〜L5によってそれぞれ接続されている。なお、スレーブデバイス102cはCPU104に対する割り込み機能を有していないので、CPU104とスレーブデバイス102cとは結線されていない。
【0007】
各スレーブデバイス102a、102b、102d、102eは、割り込み要求を示すペンディングビットを含むステータスレジスタを備えており、ペンディングビットの値をそれぞれ割り込みラインL2〜L5を介してCPU104に送信するように構成されている。これにより、各スレーブデバイス102a、102b、102d、102eからCPU104への割り込み要求を可能としている。
【0008】
しかしながら、図9の破線枠に示すように、チップ105に割り込みラインL2〜L5のための入力ピンが必要となる。このため、チップ105として予め割り込みライン用の入力ピンを備えているものを使用するか、あるいは、ASIC等を使って実装する必要がある。
【0009】
そこで、下記の特許文献1では、マスタデバイス(マスタ装置)がスレーブデバイス(スレーブ装置)にリードアクセスの要求を絶えず送信し続け、割り込み信号を発しているスレーブデバイスから割り込み状態ビットを有する応答を受信することにより、割り込み状態を認識することが記載されている。これにより、スレーブデバイスからCPUへの割り込みラインを不要とし、チップのピン数を抑えることができる。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2006−120146号公報(2006年5月11日公開)
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、特許文献1に記載の構成では、システムの動作速度が遅くなるという問題がある。
【0012】
具体的には、特許文献1には、スレーブデバイスから割り込み状態ビットを有する割り込み関連情報がマスタデバイスに返信された場合、マスタデバイスが割り込みを処理する旨記載されているが(図10、S16)、CPUの割り込みを要求することは記載されていない。また、マスタデバイスがハードウェアによってスレーブデバイスに割り込み要求を「絶えず」送信していると仮定すると、CPUが、割り込み監視以外の通常のスレーブデバイスへのアクセスを実行できるタイミングが存在しないこととなる。
【0013】
そのため、特許文献1では、ソフトウェアによって割り込みの監視を行っていると考えられる。そうすると、CPUが実行するタスクの1つを、常に割り込み監視用に使用することになるため、CPUの負担が増大し、システムの動作速度が遅くなってしまう。
【0014】
本発明は、上記の問題点を解決するためになされたもので、その目的は、CPUの負担を抑えながら、簡単な構成でスレーブデバイスの割り込み要求を監視することができるマスタデバイスを提供することにある。
【課題を解決するための手段】
【0015】
上記の課題を解決するために、本発明に係るマスタデバイスは、I2Cバスを介してスレーブデバイスに接続され、上記スレーブデバイスに割り当てられたデバイスアドレスを指定することで上記スレーブデバイスとの通信を行うマスタデバイスであって、上記スレーブデバイスから、上記マスタデバイスおよび上記スレーブデバイスを制御するCPUへの割り込み要求を周期的に監視する割り込み監視回路を備えることを特徴としている。
【0016】
上記の構成によれば、割り込み監視回路によって、スレーブデバイスからCPUへの割り込み要求を周期的に監視している。割り込み監視回路は、ハードウェア構成であるため、割り込み要求の監視によるCPUの負担の増大を抑えることができる。また、割り込み監視のために、スレーブデバイスとCPUとを結線する必要がない。したがって、CPUの負担を抑えながら、簡単な構成でスレーブデバイスの割り込み要求を監視することができるマスタデバイスを提供することができる。
【0017】
本発明に係るマスタデバイスでは、上記割り込み監視回路は、上記スレーブデバイスの割り込み要求の有無を示すペンディングビットを含むステータスデータを、上記マスタデバイスを介して上記スレーブデバイスから周期的に読み出す読み出し回路と、上記スレーブデバイスから読み出された上記ステータスデータに基づいて、上記スレーブデバイスの割り込み要求の有無を判定する判定回路と、上記判定回路によって、上記スレーブデバイスの割り込み要求が有と判定された場合に、上記CPUに割り込み要求を通知する割り込み要求通知回路と、を備えることが好ましい。
【0018】
上記の構成によれば、読み出し回路によってペンディングビットを含むステータスデータがスレーブデバイスから読み出され、判定回路が、読み出されたステータスデータに基づいて、スレーブデバイスの割り込み要求の有無を判定し、スレーブデバイスの割り込み要求が有と判定された場合に、割り込み要求通知回路によってCPUに割り込み要求が通知される。これにより、CPUは、割り込み要求の有無を検知することができる。
【0019】
本発明に係るマスタデバイスでは、上記判定回路は、上記スレーブデバイスの割り込み要求の有無を判定するための第1および第2の判定用データを、当該スレーブデバイスと対応付けて記憶するメモリと、第1および第2の判定用データおよび上記ステータスデータに基づいて、上記スレーブデバイスの割り込み要求の有無の判定結果を出力する論理回路と、を備えることが好ましい。
【0020】
本発明に係るマスタデバイスでは、上記論理回路は、第1の判定用データの各ビットと上記ステータスデータの各ビットとの論理積を出力するANDゲートと、上記ANDゲートの各出力ビットと第2の判定用データの各ビットとの排他的論理和を出力するEXORゲートと、上記EXORゲートの各出力ビットの論理和を出力するORゲートとを備え、上記ペンディングビットに使用されるロジックがネガティブロジックであるスレーブデバイスに対応する第1および第2の判定用データは、当該ペンディングビットに対応するビットが「1」であり、当該ペンディングビット以外に対応するビットが「0」であり、上記ペンディングビットに使用されるロジックがポジティブロジックであるスレーブデバイスに対応する第1の判定用データは、当該ペンディングビットに対応するビットが「1」であり、当該ペンディングビット以外に対応するビットが「0」であり、当該スレーブデバイスに対応する第2の判定用データは、すべてのビットが「0」であることが好ましい。
【0021】
上記の構成によれば、ペンディングビットに使用されるロジックがネガティブロジックであるスレーブデバイスに対応する第1および第2の判定用データは、ペンディングビットに対応するビットが「1」であるので、ペンディングビットが「0」の場合(すなわち、割り込み要求「有」の場合)、ペンディングビットと「1」との論理積が「0」となり、当該論理積「0」と「1」との排他的論理和は「1」となる。ペンディングビットが「1」の場合(すなわち、割り込み要求「無」の場合)、ペンディングビットと「1」との論理積が「1」となり、当該論理積「1」と「1」との排他的論理和が「0」となる。また、第1および第2の判定用データは、ペンディングビット以外に対応するビットが「0」であるので、ステータスデータのペンディングビット以外のビットをYとすると、「Y」と「0」との論理積と、「0」との排他的論理和は、Yの値に関わらず、「0」となる。
【0022】
同様に、ペンディングビットに使用されるロジックがポジティブロジックであるスレーブデバイスに対応する第1の判定用データは、ペンディングビットに対応するビットが「1」であり、当該スレーブデバイスに対応する第2の判定用データは、ペンディングビットに対応するビットが「0」であるので、ペンディングビットが「1」の場合(すなわち、割り込み要求「有」の場合)、ペンディングビットと「1」との論理積が「1」となり、当該論理積「1」と「0」との排他的論理和は「1」となる。ペンディングビットが「0」の場合(すなわち、割り込み要求「無」の場合)、ペンディングビットと「1」との論理積が「0」となり、当該論理積「0」と「0」との排他的論理和が「0」となる。また、第1および第2の判定用データは、ペンディングビット以外に対応するビットが「0」であるので、ステータスデータのペンディングビット以外のビットをYとすると、「Y」と「0」との論理積と、「0」との排他的論理和は、Yの値に関わらず、「0」となる。
【0023】
したがって、EXORゲートの各出力ビットの論理和は、割り込み要求「有」の場合「1」となり、割り込み要求「無」の場合「0」となるため、ORゲートの出力ビットが割り込み要求の有無に対応する。したがって、判定回路は、割り込み要求の有無を判定することができる。
【0024】
本発明に係るマスタデバイスでは、上記論理回路は、第2の判定用データの各ビットと上記ステータスデータの各ビットとの排他的論理和を出力するEXORゲートと、上記EXORゲートの各出力ビットと第1の判定用データの各ビットとの論理積を出力するANDゲートと、上記ANDゲートの各出力ビットの論理和を出力するORゲートとを備え、上記ペンディングビットに使用されるロジックがネガティブロジックであるスレーブデバイスに対応する第1および第2の判定用データは、当該ペンディングビットに対応するビットが「1」であり、当該ペンディングビット以外に対応するビットが「0」であり、当該ペンディングビット以外に対応するビットが「0」であり、上記ペンディングビットに使用されるロジックがポジティブロジックであるスレーブデバイスに対応する第1の判定用データは、当該ペンディングビットに対応するビットが「1」であり、当該ペンディングビット以外に対応するビットが「0」であり、当該スレーブデバイスに対応する第2の判定用データは、すべてのビットが「0」であることが好ましい。
【0025】
上記の構成によれば、ペンディングビットに使用されるロジックがネガティブロジックであるスレーブデバイスに対応する第1および第2の判定用データは、ペンディングビットに対応するビットが「1」であるので、ペンディングビットが「0」の場合(すなわち、割り込み要求「有」の場合)、ペンディングビットと「1」との排他的論理和が「1」となり、当該排他的論理和「1」と「1」との論理積は「1」となる。ペンディングビットが「1」の場合(すなわち、割り込み要求「無」の場合)、ペンディングビットと「1」との排他的論理和が「0」となり、当該排他的論理和「0」と「1」との論理積は「0」となる。また、第1および第2の判定用データは、ペンディングビット以外に対応するビットが「0」であるので、ステータスデータのペンディングビット以外のビットをYとすると、「Y」と「0」との排他的論理和と、「0」との論理積は、Yの値に関わらず、「0」となる。
【0026】
同様に、ペンディングビットに使用されるロジックがポジティブロジックであるスレーブデバイスに対応する第1の判定用データは、ペンディングビットに対応するビットが「1」であり、当該スレーブデバイスに対応する第2の判定用データは、ペンディングビットに対応するビットが「0」であるので、ペンディングビットが「1」の場合(すなわち、割り込み要求「有」の場合)、ペンディングビットと「0」との排他的論理和が「1」となり、当該排他的論理和「1」と「1」との論理積は「1」となる。ペンディングビットが「0」の場合(すなわち、割り込み要求「無」の場合)、ペンディングビットと「0」との排他的論理和が「0」となり、当該排他的論理和「0」と「1」との論理積が「0」となる。また、第1および第2の判定用データは、ペンディングビット以外に対応するビットが「0」であるので、ステータスデータのペンディングビット以外のビットをYとすると、「Y」と「0」との排他的論理和と、「0」との論理積は、Yの値に関わらず、「0」となる。
【0027】
したがって、ANDゲートの各出力ビットの論理和は、割り込み要求「有」の場合「1」となり、割り込み要求「無」の場合「0」となるため、ORゲートの出力ビットが割り込み要求の有無に対応する。したがって、判定回路は、割り込み要求の有無を判定することができる。
【0028】
本発明に係るマスタデバイスでは、上記読み出し回路は、上記ステータスデータの読み出しのタイミングを制御するタイミング制御回路を備え、上記タイミング制御回路は、所定のタイミングで、上記読み出し回路が上記スレーブデバイスからの上記ステータスデータの読み出しを開始するように制御し、上記CPUが上記マスタデバイスへアクセスしている間に、上記所定のタイミングが到来した場合、上記読み出し回路は、上記CPUの上記マスタデバイスへのアクセスが終了するまで、上記ステータスデータの読み出し開始を延期させることが好ましい。
【0029】
上記の構成によれば、タイミング制御回路によって、ステータスデータの読み出しが所定のタイミングで実行されるので、CPUからマスタデバイスへの通常のアクセスのための時間を確保することができる。また、CPUのマスタデバイスへのアクセスが終了するまで、ステータスデータの読み出し開始が延期されるので、当該アクセスを阻害することなくスレーブデバイスの割り込み監視を行うことができる。
【0030】
本発明に係るバスシステムは、スレーブデバイスと、I2Cバスを介して上記スレーブデバイスに接続され、上記スレーブデバイスに割り当てられたデバイスアドレスを指定することで上記スレーブデバイスとの通信を行うマスタデバイスとを備えるバスシステムであって、上記マスタデバイスとして、上記いずれかのマスタデバイスを備えることを特徴としている。
【発明の効果】
【0031】
以上のように、本発明に係るマスタデバイスは、CPUの負担を抑えながら、簡単な構成でスレーブデバイスの割り込み要求を監視することができるという効果を奏する。
【図面の簡単な説明】
【0032】
【図1】本発明の実施形態に係るバスシステムの概略構成を示すブロック図である。
【図2】上記バスシステムのマスタデバイスの詳細な構成を示す回路図である。
【図3】登録記憶用RAMおよび登録記録用レジスタに記憶されるデータ、および各スレーブデバイスから読み出されるステータスデータの内容を示す図である。
【図4】図2に示すマスタデバイスの判定回路の具体的な構成を示す回路図である。
【図5】ステートマシンの状態遷移図である。
【図6】既存マスタデバイスとスレーブデバイスとの間で、I2Cバスを介して送受信されるデータを示す図である。
【図7】割り込み監視のタイミングを制御するための主な信号の波形の一例を示す図である。
【図8】割り込み監視のタイミングを制御するための主な信号の波形の一例を示す図である。
【図9】I2Cバスを用いた従来のバスシステムの概略構成を示すブロック図である。
【発明を実施するための形態】
【0033】
本発明の実施の一形態について図1〜図8に基づいて説明すれば以下のとおりである。
【0034】
(バスシステムの構成)
図1は、本実施形態に係るバスシステム1の概略構成を示すブロック図である。バスシステム1は、5つのスレーブデバイス2a〜2eと、マスタデバイス3と、CPU4とを備えており、マスタデバイス3およびCPU4とは、同一のチップ5内に設けられる。
【0035】
スレーブデバイス2a〜2eとマスタデバイス3とは、I2Cバスを介して接続されている。マスタデバイス3は、各スレーブデバイス2a〜2eに割り当てられたデバイスアドレスを指定することで、各スレーブデバイス2a〜2eとの通信を行う。各スレーブデバイス2a〜2eは、マスタデバイス3からのシリアルクロックSCLに合わせて、シリアルデータSDAの入出力を行う。なお、バスシステム1におけるI2Cバスの転送速度は、400Kbps(周期2.5μs)であるとする。
【0036】
CPU4は、スレーブデバイス2a〜2eおよびマスタデバイス3の制御を行うものであり、マスタデバイス3とCPU4とは、データバスDB、アドレスバスABおよび割り込みラインL1を介して接続されている。割り込みラインL1は、図9に示す従来のバスシステム101における割り込みラインL1と略同一である。
【0037】
また、スレーブデバイス2a〜2eのうち、スレーブデバイス2a、2b、2d、2eは、CPU4に対する割り込み機能を有しており、スレーブデバイス2cは、CPU4に対する割り込み機能を有していない。従来のバスシステム101では、割り込みを必要とするスレーブデバイスが割り込みラインによってCPUに接続されていたが、本実施形態に係るバスシステム1では、割り込みラインが設けられていない。そこで、バスシステム1では、マスタデバイス3に割り込み監視回路31を設け、割り込み監視回路31によってスレーブデバイスの割り込み要求を監視し、割り込みラインL1を介して、スレーブデバイスの割り込み要求を通知する構成となっている。
【0038】
マスタデバイス3は、割り込み監視回路31および既存マスタデバイス32を備えている。既存マスタデバイス32は、図9に示す従来のマスタデバイス103に相当する。すなわち、マスタデバイス3は、従来のマスタデバイスに割り込み監視回路31が追加された構成である。
【0039】
割り込み監視回路31は、スレーブデバイスからCPU4への割り込み要求を、ハードウェアによって周期的に監視する機能をマスタデバイス3に付加するものである。ソフトウェアによってスレーブデバイスの割り込み要求を監視する場合、CPUに対する負荷が増大し、システムの動作速度の低下を招いてしまう。これに対し、本実施形態では、スレーブデバイスの割り込み要求の監視を、ハードウェアである割り込み監視回路31によって実行する。これにより、スレーブデバイスとCPU4との結線を省略してチップ5のピン数を減らすとともに、CPU4の負荷増大およびバスシステム1の動作速度低下を回避している。
【0040】
詳細には、マスタデバイス3は、375μsの周期で、割り込み機能を有する1つのスレーブデバイス毎に、割り込み要求の有無を示すペンディングビットを含むステータスデータを読み出し、読み出されたステータスデータに基づいて、当該スレーブデバイスの割り込み要求の有無を判定する。そして、マスタデバイス3は、いずれかのスレーブデバイスの割り込み要求が有と判定された場合に、割り込みラインL1を介してCPU4に割り込み要求を通知する。さらに、1つの周期において、120μsの期間、ステータスデータの読み出し、割り込み要求の判定および割り込み要求の通知とが実行され、残りの255μsの期間は、CPU4から既存マスタデバイス32への通常のアクセスを可能としている。
【0041】
(マスタデバイスの構成)
続いて、上記のような機能を有するマスタデバイス3の具体例について説明する。
【0042】
図2は、マスタデバイス3の詳細な構成を示す回路図である。マスタデバイス3は、既存マスタデバイス32に割り込み監視回路31を追加した構成であり、割り込み監視回路31は、ANDゲートAND1〜36、EXORゲートEXOR1〜8、ORゲートOR1〜9、NORゲートNOR1、フリップフロップFF1〜2、カウンタCOUNT1〜3、レジスタREG1〜2、デコーダDEC1〜2、セレクタSEL1〜3、ステートマシンSTATE1、バッファBUF1および登録記憶用RAM33を備えている。
【0043】
これらの構成要素の中で、主に、カウンタCOUNT1〜3、ANDゲートAND10〜36、ORゲートOR2〜9、フリップフロップFF1〜2、レジスタREG1、セレクタSEL2〜3、デコーダDEC2およびステートマシンSTATE1が、読み出し回路31aを構成している。また、主に、登録記憶用RAM33、ANDゲートAND1〜9、EXORゲートEXOR1〜8およびORゲートOR1が、判定回路31bを構成している。また、主にデコーダDEC1、レジスタREG2およびNORゲートNOR1が、割り込み要求通知回路31cを構成している。
【0044】
また、CPU4から既存マスタデバイス32を介してI2Cバスに送信されるデータや、既存マスタデバイス32がI2Cバスから受信したデータは、一旦バッファBUF1に格納される。
【0045】
(判定回路の構成)
先に、判定回路31bについて説明する。後述するように、読み出し回路31aによって、各スレーブデバイスから割り込み要求の有無を示すペンディングビットを含むステータスデータが読み出される。ステータスデータは、通常8ビットのデータであり、上記の1ビットのペンディングデータを含んでいる。判定回路31bは、読み出されたステータスデータに基づいて、割り込み要求の有無を判定する。
【0046】
例えば、図1に示すスレーブデバイス2aから“YXYYYYYY”のステータスデータが読み出されるとする。ここで、Xは割り込み要求の有無を示すペンディングビットであり、Yはその他のビットである。XおよびYは、「1」または「0」の値をとる。スレーブデバイス2aは、ペンディングビットに使用されるロジックがネガティブロジックであるスレーブデバイスであり、割り込み要求が有の場合、Xは「0」となる。なお、ペンディングビットXのステータスデータにおける位置は、スレーブデバイス毎に設定されている。また、本発明は、ペンディングビットに使用されるロジックがポジティブロジックおよびネガティブロジックのどちらの場合でも適用可能であり、ペンディングビットに使用されるロジックもスレーブデバイス毎に設定されている。
【0047】
スレーブデバイス2aから読み出されたステータスデータ“YXYYYYYY”は、判定回路31bに入力され、第1の判定用データD1および第2の判定用データD2に基づいて、ペンディングビットが割り込み要求の有を示すか否かが判定される。第1および第2の判定用データD1、D2は、対応するスレーブデバイスのステータスデータのペンディングビットに対応するビットが「1」であり、ペンディングビット以外に対応するビットが「0」である。例えば、スレーブデバイス2aの割り込み要求の有無を判定するための第1および第2の判定用データD1、D2は、“01000000”である。また、ステータスデータが“YYYYYXYY”のスレーブデバイス2d(図3のアイテムNo.2に対応)の割り込み要求の有無を判定するための第1および第2の判定用データD1、D2は、“00000100”である。
【0048】
続いて、スレーブデバイス2aから読み出されたステータスデータ“YXYYYYYY”から割り込み要求の有無の判定を行うための演算内容について説明する。
【0049】
ステータスデータ“YXYYYYYY”の各ビットは、判定回路31bのANDゲートAND1〜8の各入力端子にそれぞれ入力される。また、登録記憶用RAM33から、スレーブデバイス2aに対応する第1の判定用データD1“01000000”が読み出されて、ANDゲートAND1〜8の各入力端子にそれぞれ入力される。具体的には、第1の判定用データD1“01000000”の各ビットがANDゲートAND1〜8の入力端子にそれぞれ入力され、ステータスデータ“YXYYYYYY”とデータ“01000000”との1ビット毎の論理積が、ANDゲートAND1〜8からそれぞれ出力される。
【0050】
これにより、X=0の場合(割り込み要求「有」の場合)、Yの値に関わらず、“00000000”がANDゲートAND1〜8から出力される。一方、X=1の場合(割り込み要求「無」の場合)、Yの値に関わらず、“01000000”がANDゲートAND1〜8から出力される。
【0051】
ANDゲートAND1〜8からの各出力ビットは、EXORゲートEXOR1〜8の各入力端子に入力される。また、登録記憶用RAM33に記憶されている第2の判定用データD2のうち、スレーブデバイス2aに対応するデータ“01000000”が読み出されて、当該データの各ビットがEXORゲートEXOR1〜8の各入力端子にそれぞれ入力される。これにより、ANDゲートAND1〜8からの出力データとデータ“01000000”との1ビット毎の排他的論理和が、EXORゲートEXOR1〜8からそれぞれ出力される。
【0052】
具体的には、X=0の場合(割り込み要求「有」の場合)、ANDゲートAND1〜8からの出力データ“00000000”とデータ“01000000”との1ビット毎の排他的論理和である“01000000”がEXORゲートEXOR1〜8からそれぞれ出力される。また、X=1の場合(割り込み要求「無」の場合)、ANDゲートAND1〜8からの出力データ“01000000”とデータ“01000000”との1ビット毎の排他的論理和である“00000000”がEXORゲートEXOR1〜8からそれぞれ出力される。
【0053】
EXORゲートEXOR1〜8からの各出力ビットは、ORゲートOR1に入力される。これにより、X=0(割り込み要求「有」)の場合、“01000000”の論理和である「1」がORゲートOR1から出力され、X=1(割り込み要求「無」)の場合、“00000000”の論理和である「0」がORゲートOR1から出力される。このように、ORゲートOR1の出力ビットは、割り込み要求の有無に対応している。
【0054】
ORゲートOR1の出力ビットはANDゲートAND9の一方の入力端子に入力される。また、ANDゲートAND9の他方の入力端子には、後述するステートマシンSTATE1からの信号state_Pollingが入力される。信号state_Pollingは、割り込み要求の監視期間に「1」となる信号であり、信号state_Pollingが「1」のときに、割り込み要求の有無を示すORゲートOR1の出力ビットが割り込み要求通知回路31cに入力される。
【0055】
上記では、スレーブデバイス2aから読み出されたステータスデータ“YXYYYYYY”に基づいて、スレーブデバイス2aからCPU4への割り込み要求の有無を判断する例について説明したが、割り込み要求の有無を判断するための第1および第2の判定用データは、ステータスデータにおけるペンディングビットの位置に応じて異なる。第1および第2の判定用データについて、図3を参照して説明する。
【0056】
図3は、登録記憶用RAM33および登録記録用レジスタREG1に記憶されるデータ、および各スレーブデバイスから読み出されるステータスデータの内容を示す図である。割り込み機能を有するスレーブデバイス2a、2b、2d、2eは、それぞれアイテムNo.0、4、2、6に対応する。なお、スレーブデバイス2cは、割り込み機能を有していないので、どのアイテムNo.にも対応付けられていない。
【0057】
また、スレーブデバイス2a、2b、2dでは、ペンディングビットに使用されるロジックがネガティブロジックである一方、スレーブデバイス2eでは、ペンディングビットに使用されるロジックがポジティブロジックである。まず、ペンディングビットに使用されるロジックがネガティブロジックであるスレーブデバイス2a、2b、2dに対応する第1および第2の判定用データD1、D2について説明する。
【0058】
例えば、アイテムNo.4に対応するスレーブデバイス2bからは、“YYXYYYYY”のステータスデータが読み出され、スレーブデバイス2bの割り込み要求の有無を判断するための第1および第2の判定用データD1、D2として“00100000”が用いられる。同様に、アイテムNo.2に対応するスレーブデバイス2dからは、“YYYYYXYY”のステータスデータが読み出され、スレーブデバイス2dの割り込み要求の有無を判断するための第1および第2の判定用データD1、D2として“00000100”が用いられる。
【0059】
すなわち、ペンディングビットに使用されるロジックがネガティブロジックであるスレーブデバイスに対応する第1および第2の判定用データD1、D2は、1ビットの「1」と7ビットの「0」とからなり、「1」のビット位置は、対応するスレーブデバイスから読み出されるステータスデータにおけるペンディングビットXの位置に対応する。これにより、読み出されたステータスデータのペンディングビットXと、第1の判定用データD1の「1」との論理積が、図2に示すANDゲートAND1〜8のいずれかから出力され、続いて、当該論理積と第2の判定用データD2の「1」との排他的論理和が、EXORゲートEXOR1〜8のいずれかから出力され、EXORゲートEXOR1〜8の各出力ビットの論理和がORゲートOR1から出力される。
【0060】
その結果、X=0の場合(割り込み要求「有」の場合)、EXORゲートEXOR1〜8の各出力ビットのいずれかに「1」が含まれるため、ORゲートOR1から「1」が出力され、X=1の場合(割り込み要求「無」の場合)、EXORゲートEXOR1〜8の各出力ビットはいずれも「0」であるため、ORゲートOR1から「0」が出力される。
【0061】
続いて、ペンディングビットに使用されるロジックがポジティブロジックであるスレーブデバイス2eに対応する第1および第2の判定用データD1、D2について説明する。
【0062】
アイテムNo.6に対応するスレーブデバイス2eからは、“XYYYYYYY”のステータスデータが読み出され、スレーブデバイス2eの割り込み要求の有無を判断するための第1の判定用データD1として、“10000000”が用いられ、第2の判定用データD2として、“00000000”が用いられる。
【0063】
すなわち、ペンディングビットに使用されるロジックがポジティブロジックであるスレーブデバイスに対応する第1の判定用データD1は、1ビットの「1」と7ビットの「0」とからなり、「1」のビット位置は、対応するスレーブデバイスから読み出されるステータスデータにおけるペンディングビットXの位置に対応する。一方、ペンディングビットに使用されるロジックがポジティブロジックであるスレーブデバイスに対応する第2の判定用データD2は、8ビットの「0」からなる。
【0064】
これにより、読み出されたステータスデータのペンディングビットXと、第1の判定用データD1の「1」との論理積が、図2に示すANDゲートAND1〜8のいずれかから出力され、続いて、当該論理積と第2の判定用データD2の「0」との排他的論理和が、EXORゲートEXOR1〜8のいずれかから出力され、EXORゲートEXOR1〜8の各出力ビットの論理和がORゲートOR1から出力される。
【0065】
その結果、X=1の場合(割り込み要求「有」の場合)、EXORゲートEXOR1〜8の各出力ビットのいずれかに「1」が含まれるため、ORゲートOR1から「1」が出力され、X=0の場合(割り込み要求「無」の場合)、EXORゲートEXOR1〜8の各出力ビットはいずれも「0」であるため、ORゲートOR1から「0」が出力される。
【0066】
以上のように、ペンディングビットに使用されるロジックに関わらず、割り込み要求「有」の場合、ORゲートOR1から「1」が出力され、割り込み要求「無」の場合、ORゲートOR1から「0」が出力される。これにより、判定回路31bは、スレーブアドレスから読み出されたステータスデータに基づいて、各スレーブデバイスの割り込み要求の有無を判定する。
【0067】
なお、「Valid」は、各スレーブデバイスに対する割り込み監視の有効/無効を示すデータであり、図2に示す登録記憶用のレジスタREG1に記憶される。Validが「1」の場合は、対応するスレーブデバイスに対する割り込み要求の監視が実行され、Validが「0」の場合は、対応するスレーブデバイスに対する割り込み要求の監視は実行されない。
【0068】
また、デバイスアドレスデータD3は、スレーブデバイスのアドレスを示すデータであり、既存マスタデバイス32は、読み出し回路31aが読み出したデバイスアドレスデータD3に基づいて、スレーブデバイスにアクセスする。レジスタアドレスデータD4は、スレーブデバイスのステータスレジスタにアクセスするためのデータであり、既存マスタデバイス32は、読み出し回路31aが読み出したレジスタアドレスデータD4に基づいて、スレーブデバイスからステータスデータを読み出す。また、登録記憶用RAM33および登録記録用レジスタREG1への上記データの格納は、ソフトウェア処理によって行われる。その具体的内容は後述する。
【0069】
(割り込み要求通知回路の構成)
続いて、割り込み要求通知回路31cについて説明する。
【0070】
図4は、判定回路31bの具体的な構成を示す回路図である。判定回路31bは、デコーダDEC1、ペンディング用のレジスタREG2およびNORゲートNOR1を備えている。レジスタREG2は、SRフリップフロップFF20〜FF29で構成されている。
【0071】
図2に示すように、判定回路31bのANDゲートAND9の出力信号が、デコーダDEC1のイネーブル端子ENBに入力される。また、デコーダDEC1の入力端子には、読み出し回路31aのアイテムカウンタCOUNT3からの3ビットの信号Item_No.が入力される。この信号Item_No.は、割り込み要求の監視対象となっているスレーブデバイスに対応するアイテムNo.(0〜7)に対応している。例えば、アイテムNo.2に対応するスレーブデバイス2dの割り込み要求を監視している期間、「2」の信号Item_No.がデコーダDEC1に入力される。
【0072】
デコーダDEC1は、イネーブル端子ENBに「1」が入力されている場合に、アイテムカウンタCOUNT3からの3ビットの信号Item_No.を8ビットのデータに変換し、当該データの各ビットを、出力端子0〜7からそれぞれ出力する。これにより、イネーブル端子ENBに「1」が入力されると、その時点において入力される信号Item_No.に対応する値の出力端子から「1」が出力され、他の出力端子から「0」が出力される。
【0073】
デコーダDEC1の出力端子0〜7は、フリップフロップFF20〜FF27の各セット入力端子Sにそれぞれ接続されている。これにより、いずれかのスレーブデバイスの割り込み要求が有と判定された場合、デコーダDEC1の出力端子0〜7のうち、当該スレーブアドレスに対応するアイテムNo.の出力端子から「1」が出力され、当該出力端子に接続されているフリップフロップに保持される。
【0074】
フリップフロップFF28、FF29の各セット入力端子Sには、マスタデバイスとしての割り込み要求(例えば、I2Cバスのエラーやアクセス完了)を示す信号が入力される。フリップフロップFF20〜FF29のデータ出力端子は、NORゲートNOR1に入力される。また、図2に示すように、NORゲートNOR1の出力端子は、割り込みラインL1を介してCPU4に接続されている。
【0075】
これにより、フリップフロップFF20〜FF29のいずれかから「1」が出力された場合、NORゲートNOR1から出力される割り込み信号INTが「0」となり、スレーブデバイスおよびマスタデバイスの少なくともいずれかから割り込み要求が有ることがCPU4に通知される。割り込み信号INTが「0」となった場合、CPU4は、レジスタREG2にアクセスして、フリップフロップFF20〜FF29のいずれに「1」が記憶されているかを確認する。これにより、CPU4は、割り込み要求が有のデバイス(マスタデバイス、またはいずれかのスレーブデバイス)を特定することができる。
【0076】
割り込み要求が有のデバイスが特定されると、CPU4は、当該デバイスにアクセスして、ステータスレジスタのペンディングビットを先にリセットし、その後、当該デバイスに対応するフリップフロップをリセットする。
【0077】
また、CPU4がレジスタREG2にアクセスしたときに、複数個のフリップフロップの出力が「1」である場合、CPU4は、1つのフリップフロップ毎にリセットを行う。すなわち、「1」が記憶されている複数のフリップフロップの1つフリップフロップに対し、当該フリップフロップに対応するデバイスのステータスレジスタのペンディングビットを先にリセットし、当該デバイスに対応するフリップフロップをリセットする。このリセット処理を、「1」が記憶されているフリップフロップ毎に行う。
【0078】
(読み出し回路の構成)
続いて、読み出し回路31aについて説明する。読み出し回路31aは、375μsの周期で、割り込み機能を有する1つのスレーブデバイスから、既存マスタデバイス32を介して割り込み要求の有無を示すペンディングビットを含むステータスデータを読み出すように構成されている。また、1つの周期において、120μsの期間は、ステータスデータの読み出しと割り込み要求の判定とが実行され、残りの255μsの期間は、CPU4から既存マスタデバイス32へのアクセスを可能としている。図2、図5〜図7を参照して、読み出し回路31aの具体的な構成について説明する。
【0079】
スレーブデバイスからのステータスデータの読み出し制御は、主に、ステートマシンSTATE1によって実行される。ステートマシンSTATE1は、図5に示すように状態遷移するように実装されたハードウェアであり、TimeCome,STOP,ACK,CPU_REQの各信号を入力とし、I2C_RW,State_DEV,State_REG,State_POL,I2C_Read,With_STOP,I2C_Drive,I2C_DriveWithStart,CPU_ACCESSの各信号を出力する。
【0080】
図2に示すように、各ANDゲートAND13〜20は、一方の入力端子に、CPU4から既存マスタデバイス32への8ビットのアクセスデータがバッファBUF1から入力されるとともに、他方の入力端子に、信号CPU_Accessが入力される。
【0081】
また、各ANDゲートAND21〜27は、一方の入力端子に、登録記憶用RAM33に記憶されている7ビットのデバイスアドレスデータD3がそれぞれ入力されるとともに、他方の入力端子に、信号State_DEVが入力される。ANDゲートAND28は、一方の入力端子に、信号I2C_RWが入力されるとともに、他方の入力端子に、信号State_DEVが入力される。
【0082】
また、各ANDゲートAND29〜36は、一方の入力端子に、登録記憶用RAM33に記憶されている8ビットのレジスタアドレスデータD4がそれぞれ入力されるとともに、他方の入力端子に、信号State_REGが入力される。
【0083】
ORゲートOR2は、ANDゲートAND13・21・29の各出力信号の論理和を出力する。同様に、ORゲートOR3〜9は、それぞれ、ANDゲートAND14・22・30、ANDゲートAND15・23・31、ANDゲートAND16・24・32、ANDゲートAND17・25・33、ANDゲートAND18・26・34、ANDゲートAND19・27・35、ANDゲートAND20・28・36の各出力信号の論理和を出力する。各ORゲートOR2〜9から出力される信号I2C_write_DTは、既存マスタデバイス32に入力され、既存マスタデバイス32は、信号I2C_write_DTによって、I2Cバスを介してスレーブデバイスとの通信を行う。
【0084】
既存マスタデバイス32には、信号I2C_write_DTの他、I2C_Read,With_STOP,I2C_Drive,I2C_DriveWithStartの各信号が入力される。
【0085】
(ステートマシンの状態遷移)
図5に示すように、ステートマシンSTATE1は、リセットまたは電源がONされることにより初期化され(C1)、アイドル状態(C2)となる。
【0086】
ここで、信号TimeCome=0かつ信号CPU_REQ=1の場合、通常のCPU4から既存マスタデバイス32へのアクセスが行われる(C3〜C5)。信号CPU_REQは、CPU4がアクセスに必要なデータが全てバッファBUF1に貯められた時点で「1」になる。信号TimeCome=0のときに信号CPU_REQが「1」になると、ステートマシンSTATE1は信号CPU_ACCESSを「1」とする。これにより、バッファBUF1からアクセスデータが読み出され、ANDゲートAND13〜20およびORゲートOR2〜9を介して既存マスタデバイス32に出力される。
【0087】
なお、信号TimeCome=1のときに信号CPU_REQが「1」になっても、ステートマシンSTATE1は、信号CPU_ACCESSを「0」のまま保持する。そのため、CPU4のアクセスデータは、既存マスタデバイス32に出力されない。
【0088】
一連のCPUアクセスにおける最終のアクセス(C5)では、ステートマシンSTATE1は、これに続く信号にI2Cのストップ信号付きであることを示す信号With_STOPを既存マスタデバイス32に出力し、既存マスタデバイス32から信号STOPを受信することにより、アイドル状態に戻る(C2)。
【0089】
一方、信号TimeCome=1の場合、スレーブデバイスへの割り込み監視が行われる(C6〜C10)。ここからは、既存マスタデバイス32とスレーブデバイスとの間で、I2Cバスを介して送受信されるデータを示す図6も参照して説明する。
【0090】
まず、ステートマシンSTATE1は、信号I2C_DriveWithStartを既存マスタデバイス32に出力するとともに、信号State_DEV=1とし、信号I2C_RW=0とする(デバイスアドレス送信状態、C6)。信号I2C_DriveWithStartは、I2Cのスタート信号を付加してスレーブデバイスのデバイスアドレスを出力するコマンドであり、これにより、スタートシーケンスとなる(図6の期間A)。また、信号State_DEV=1、信号I2C_RW=0となることにより、登録記憶用RAM33からデバイスアドレスデータD3のうち、割り込み監視対象となるスレーブデバイスに対応するデバイスアドレスが読み出され、読み出された当該デバイスアドレスと「0」のRead/Writeフラグとが既存マスタデバイス32から送信される(図6の期間B)。
【0091】
これに対し、スレーブデバイスがACKを返信すると(図6の期間C)、ステートマシンSTATE1は、信号I2C_Driveを既存マスタデバイス32に出力するとともに、信号State_REG=1とし、信号State_DEV=0とする(レジスタアドレス送信状態、C7)。信号I2C_Driveは、I2Cのスタート信号を付加せずにスレーブデバイスのデバイスアドレスを出力するコマンドである。信号State_REG=1となることにより、登録記憶用RAM33からレジスタアドレスデータD4のうち、割り込み監視対象となるスレーブデバイスに対応するレジスタアドレスが読み出され、当該レジスタアドレスが既存マスタデバイス32から送信される(図6の期間D)。
【0092】
これに対し、スレーブデバイスがACKを返信すると(図6の期間E)、ステートマシンSTATE1は、信号I2C_DriveWithStartを既存マスタデバイス32に出力するとともに、信号State_DEV=1とし、信号I2C_RW=1とする(デバイスアドレス送信状態、C8)。これにより、スタートシーケンスとなり(図6の期間F)、続いて、割り込み監視対象となるスレーブデバイスのデバイスアドレスと「1」のRead/Writeフラグとが既存マスタデバイス32から送信される(図6の期間G)。
【0093】
これに対し、スレーブデバイスがACKを返信すると(図6の期間H)、ステートマシンSTATE1は、信号With_STOPおよび信号I2C_Readを既存マスタデバイス32に出力する(ステータスデータ受信状態、C9)。信号I2C_Readは、レジスタアドレスで指定したレジスタからデータを読み出すコマンドであり、既存マスタデバイス32は、割り込み監視対象となるスレーブデバイスのステータスレジスタからステータスデータを受信する(図6の期間I)。続いて、既存マスタデバイス32は、スレーブデバイスにNAKを返信するとともに(図6の期間J)、受信した8ビットのステータスデータを、図2に示す判定回路31bのANDゲートAND1〜8に出力する。
【0094】
続いて、ステートマシンSTATE1は、信号State_POLを判定回路31bのANDゲートAND9に出力する(割り込み要求判定状態、C10)。これにより、判定回路31bにおける割り込み要求の判定結果が、ANDゲートAND9から出力される。また、既存マスタデバイス32から信号STOPが出力される(図6の期間K)。
【0095】
割り込み要求の判定結果が「1」の場合(割り込み要求「有」の場合)、その値がレジスタREG2にセットされ、割り込み要求の判定結果が「0」の場合(割り込み要求「無」の場合)、レジスタREG2に格納される値は変わらない。その後、ステートマシンSTATE1は、アイドル状態に戻る(C2)。
【0096】
以上のように、ステートマシンSTATE1の状態遷移によって、CPU4から既存マスタデバイス32へのアクセスと、ステータスデータの読み出しとが行われる。上記のように、ステータスデータの読み出しは、ステートマシンSTATE1に入力される信号TimeCome=1のときに実行される。そして、信号TimeComeが周期的に「1」となることにより、ステータスデータの読み出しを周期的に実行することができる。
【0097】
(読み出し開始のタイミング制御)
続いて、ステータスデータの読み出し開始のタイミングを制御するための構成について説明する。
【0098】
ステータスデータの読み出しは、ステートマシンSTATE1に入力される信号TimeComeが「1」になることで開始される。特に、カウンタCOUNT1〜3、ANDゲートAND10〜12、フリップフロップFF1〜2、レジスタREG1、セレクタSEL2は、特許請求の範囲に記載のタイミング制御回路を構成している。このタイミング制御回路は、所定のタイミングで、読み出し回路31aが各スレーブデバイスからのステータスデータの読み出しを開始するように、信号TimeComeの値を制御している。
【0099】
レジスタREG1は、図3に示す「Valid」を記憶するための登録記憶用レジスタであり、8つのフリップフロップFF10〜17で構成されている。「Valid」は、各スレーブデバイスに対する割り込み監視の有効/無効を示すデータであり、フリップフロップFF10〜17には、それぞれアイテムNo.0〜7に対応する「Valid」が記憶される。本実施形態では、フリップフロップFF10、12、14、16に「1」が記憶され、フリップフロップFF11、13、15、17に「0」が記憶される。
【0100】
セレクタSEL2は、カウンタCOUNT3からの3ビットの信号Item_No.に基づいて、8つの入力端子0〜7に入力される信号から1つの信号を選択して、選択した信号を信号VALIDとして出力する。より詳細には、信号Item_No.に対応する値の入力端子に入力される信号を、ANDゲートAND10に出力する。すなわち、信号Item_No.が「0」、「2」、「4」、「6」の場合、セレクタSEL2から「1」の信号VALIDが出力され、信号Item_No.が「1」、「3」、「5」、「7」の場合、セレクタSEL2から「0」の信号VALIDが出力される。後述するように、カウンタCOUNT3は375μsの周期でカウント動作を行うため、セレクタSEL2は、375μsの周期で選択切り替えを行う。
【0101】
カウンタCOUNT1は、I2Cバスの転送周期と同一周期のクロック信号を生成するためのカウンタであり、図示しない発振器から入力されるクロック信号BCLKに基づいて、400KHzのクロック信号I2C_CLKを出力する。
【0102】
カウンタCOUNT2は、150ステージのバイナリカウンタであり、クロック信号I2C_CLKに基づいて、375μsの周期でハイパルスとなる2つの信号Item_CNT、Start_POLを出力する。
【0103】
信号Item_CNTは、カウンタCOUNT3に入力され、これにより、カウンタCOUNT3は375μsの周期でカウント動作を行う。
【0104】
信号Start_POLは、セレクタSEL2からの信号VALIDとともに、ANDゲートAND10に入力される。ANDゲートAND10の出力信号は、フリップフロップFF1のセット入力端子Sに入力される。フリップフロップFF1の出力信号は、ANDゲートAND11の入力端子の一方に入力される。ANDゲートAND11の入力端子の他方には、信号CPU_ACCESSの反転信号が入力される。ANDゲートAND11の出力信号は、フリップフロップFF2のセット入力端子Sに入力される。フリップフロップFF2の出力信号である信号TimeComeは、ステートマシンSTATE1、フリップフロップFF1のリセット端子、およびANDゲートAND12の入力端子の一方に入力される。また、ANDゲートAND12の入力端子の他方には、既存マスタデバイス32からの信号STOPが入力される。
【0105】
割り込み監視のタイミングを制御するための主な信号の波形の一例を、それぞれ図7および図8に示す。なお、これらの波形図において、ANDゲートAND10〜12の出力信号をそれぞれ「AND10」、「AND11」、「AND12」と表記し、フリップフロップFF1の出力信号を「FF1」と表記している。
【0106】
図7に示すように、カウンタCOUNT2から出力される2つの信号Item_CNT、Start_POLは、どちらも周期が375μsであり、信号Item_CNTが「1」になった255μs後に信号Start_POLが「1」になる。
【0107】
タイミングaでは、信号Item_CNTが「1」になることにより、信号Item_No.が「7」から「0」に切り替わる。これにより、セレクタSEL2から出力される信号VALIDが、アイテムNo.7に設定されている「0」から、アイテムNo.0に設定されている「1」に切り替わる。
【0108】
続いて、タイミングbにおいて、CPU4が既存マスタデバイス32へのアクセスするために、信号CPU_REQが「1」になると、ステートマシンSTATE1は、信号CPU_ACCESSを「1」にする。これにより、CPU4から既存マスタデバイス32へのアクセスが行われる(図5のC3〜C5)。
【0109】
続いて、タイミングcにおいて、CPU4から既存マスタデバイス32へのアクセスが終了すると、既存マスタデバイス32から「1」の信号STOPが出力され、ステートマシンSTATE1は、信号CPU_ACCESSを「0」にする。
【0110】
続いて、タイミングaから255μs経過後のタイミングdにおいて、カウンタCOUNT2から出力される信号Start_POLが「1」になる。このとき、信号VALIDが「1」であることにより、ANDゲートAND10は「1」の信号を出力する。この時点で、信号TimeComeは「0」であるため、フリップフロップFF1は、「1」の信号を出力する。また、信号CPU_ACCESSは「0」であるため、ANDゲートAND11は、「1」の信号を出力する。このとき、ANDゲートAND12の出力信号は「0」であるため、フリップフロップFF2は、「1」の信号TimeComeを出力する。これにより、アイテムNo.0に対応するスレーブデバイス2aからのステータスデータの読み出し、およびスレーブデバイス2aの割り込み監視処理が開始される(図5のC6〜C10)。
【0111】
その後、信号Start_POLが「0」になると、ANDゲートAND10およびフリップフロップFF1の出力も「0」となる。これにより、ANDゲートAND11の出力も「0」となり、ANDゲートAND12の出力は「0」であるため、フリップフロップFF2の出力信号TimeComeは「1」のまま保持される。
【0112】
カウンタCOUNT3から出力される信号Item_No.は、セレクタSEL2の他、セレクタSEL3の一方の入力端子0およびデコーダDEC1にも入力される。セレクタSEL3の他方の入力端子1は、アドレスバスABに接続されており、デコーダDEC2からのセレクト信号SELによって、入力端子0、1の一方への入力信号を選択して出力する。登録記憶用RAM33およびレジスタREG1の書き換え時以外は、セレクタSEL3を制御するセレクト信号SELは「0」となっており、登録記憶用RAM33に、信号Item_No.が入力される。これにより、信号Item_No.が示すアイテムNo.に対応するデバイスアドレス、レジスタアドレス、第1および第2の判定用データが、登録記憶用RAM33から読み出される。
【0113】
また、割り込み要求通知回路31cのデコーダDEC1は、イネーブル端子ENBへの入力信号が「1」の場合(すなわち、割り込み要求「有」の場合)に、出力端子0〜7ののうち信号Item_No.が示す値の出力端子から「1」を出力する。これにより、レジスタREG2のフリップフロップFF20〜27(図4)のうち、監視対象となっているスレーブデバイスに対応するフリップフロップに「1」が記憶される。
【0114】
タイミングdでは、信号Item_No.が「0」であるため、デバイスデータ、レジスタデータ、第1の判定用データおよび第2の判定用データとして、“00000001”、“00001000”、“01000000”および“0100000”がそれぞれ読み出される。また、割り込み要求「有」と判定された場合、スレーブデバイス2aに対応するフリップフロップFF20に「1」が記憶される。
【0115】
再び図7を参照し、信号TimeCome=1となっているタイミングeにおいて、信号CPU_REQが「1」になった場合、ステートマシンSTATE1は、信号CPU_ACCESSを「0」のまま保持する。そのため、割り込み監視処理が優先され、CPU4から既存マスタデバイス32へのアクセスは行われない。
【0116】
続いて、タイミングfにおいて、割り込み監視処理が終了すると、既存マスタデバイス32から出力される信号STOPが「1」となる。これにより、ANDゲートAND12から「1」の信号が出力され、フリップフロップFF2から出力される信号TimeComeは「0」となる。
【0117】
またこのとき、信号CPU_REQ=1であることにより、ステートマシンSTATE1は、信号CPU_ACCESSを「1」にする。これにより、CPU4から既存マスタデバイス32へのアクセスが行われる(図5のC3〜C5)。
【0118】
続いて、割り込み監視処理の開始から120μs経過後のタイミングgにおいて、信号Item_CNTが「1」になり、信号Item_No.が「1」に切り替わる。これにより、セレクタSEL2から出力される信号VALIDが、アイテムNo.0に設定されている「1」から、アイテムNo.1に設定されている「0」に切り替わる。割り込み監視処理の所要時間は、100μs程度であるので、信号Item_No.の切り替えまでに、余裕を持って割り込み監視処理を完了することができる。
【0119】
なお、割り込み監視処理のために確保される期間(本実施形態では120μs)は、I2Cバスの転送速度や、既存マスタデバイスとスレーブデバイスとの間で送受信されるデータ量によって、適宜変更してもよい。
【0120】
続いて、タイミングhにおいてCPU4から既存マスタデバイス32へのアクセスが終了し、タイミングgから255μs経過後のタイミングiにおいて、カウンタCOUNT2から出力される信号Start_POLが「1」になる。しかしながら、ANDゲートAND10に入力される信号VALIDが「0」であるため、ANDゲートAND10の出力信号は「0」のままである。そのため、フリップフロップFF2から出力される信号TimeComeも「0」のまま保持される。したがって、ステートマシンSTATE1は、割り込み監視処理を行う状態(図5のC6〜C10)には遷移しない。
【0121】
信号Item_No.は、0〜7の範囲で375μs毎にカウントアップされるため、1つのスレーブデバイスに着目すると、当該スレーブデバイスに対して、375μs×8=3msの周期で割り込み監視が行われることとなる。この周期は、I2Cバスの転送速度(400Kbps)に対して、充分に短い。なお、割り込み監視処理を行う周期は、上記に限定されず、I2Cバスの転送速度などに応じて適宜設定される。
【0122】
上記のように、読み出し回路31aは、所定のタイミングで、各スレーブデバイスからのステータスデータの読み出しを開始するように構成される。
【0123】
(読み出し開始の延期)
続いて、CPU4が既存マスタデバイス32へアクセスしている間に、上記所定のタイミングが到来した場合について説明する。図7に示す例では、信号Item_No.が切り替わってから255μs経過する前に、CPU4から既存マスタデバイス32へのアクセスが終了していた。しかしながら、信号Item_No.が切り替わってから255μs経過時に、CPU4から既存マスタデバイス32へのアクセスが継続する場合もある。この場合に、すぐにスレーブデバイスからのステータスデータの読み出しを実行すると、CPU4から既存マスタデバイス32へのアクセスを阻害するおそれがある。そこで本実施形態では、当該場合に、CPU4によるアクセスが終了するまで、信号TimeComeを「0」に保持して、ステータスデータの読み出し開始を延期させる。その具体例を図8に示す。
【0124】
タイミングjにおいて、信号Item_CNTが「1」になることにより、信号Item_No.が「1」から「2」に切り替わる。これにより、セレクタSEL2から出力される信号VALIDが、アイテムNo.1に設定されている「0」から、アイテムNo.2に設定されている「1」に切り替わる。
【0125】
続いて、タイミングkにおいて、CPU4が既存マスタデバイス32へのアクセスするために、信号CPU_REQが「1」になると、ステートマシンSTATE1は、信号CPU_ACCESSを「1」にする。これにより、CPU4から既存マスタデバイス32へのアクセスが行われる(図5のC3〜C5)。
【0126】
続いて、タイミングjから255μs経過後のタイミングlにおいて、カウンタCOUNT2から出力される信号Start_POLが「1」になる。このとき、信号VALIDが「1」であることにより、ANDゲートAND10は「1」の信号を出力する。この時点で、信号TimeComeは「0」であるため、フリップフロップFF1は、「1」の信号を出力する。
【0127】
一方、図7に示す例と異なり、CPU4から既存マスタデバイス32へのアクセスは継続しているため、信号CPU_ACCESSは「1」のままである。したがって、ANDゲートAND11の出力信号は「0」であり、フリップフロップFF2の出力信号TimeComeは、「0」で維持される。そのため、フリップフロップFF1の出力信号も「1」のままである。
【0128】
ここで、フリップフロップFF1の出力信号は、カウンタCOUNT2のホールド端子HOLDにも入力される。カウンタCOUNT2は、ホールド端子HOLDへの入力信号が「1」の場合、出力値を維持したまま停止するように構成されている。そのため、フリップフロップFF1の出力信号が「1」で維持されることにより、カウンタCOUNT2の出力信号Start_POLも、「1」のまま維持される。
【0129】
その後、タイミングmにおいて、CPU4から既存マスタデバイス32へのアクセスが終了すると、既存マスタデバイス32から「1」の信号STOPが出力され、ステートマシンSTATE1は、信号CPU_ACCESSを「0」にする。これにより、ANDゲートAND11の出力信号が「1」になり、フリップフロップFF2から出力される信号TimeComeも「1」になる。これにより、アイテムNo.2に対応するスレーブデバイス2dからのステータスデータの読み出し、およびスレーブデバイス2dの割り込み監視処理が開始される(図5のC6〜C10)。なお、フリップフロップFF1は、リセット優先のSRフリップフロップであり、リセット端子に「1」が入力されることにより、フリップフロップFF1の出力信号は「0」になる。
【0130】
このように、信号Item_No.が切り替わってから255μs経過時に、CPU4から既存マスタデバイス32へのアクセスが継続している場合、当該アクセスが終了するまで信号TimeComeを「0」に保持して、ステータスデータの読み出し開始を延期させる。これにより、CPU4から既存マスタデバイス32へのアクセスを阻害することなくスレーブデバイスの割り込み監視を行うことができる。
【0131】
なお、タイミングlからタイミングmの間は、カウンタCOUNT2はカウント動作を停止しており、タイミングmから再びカウント動作を開始する。そのため、カウンタCOUNT2は、タイミングmから120μs経過後のタイミングnにおいて、信号Item_CNTが「1」になる。そのため、ステータスデータの読み出し開始が延期されても、割り込み監視処理のために確保される期間は短縮されない。
【0132】
(データ登録処理)
続いて、図2に示す登録記憶用RAM33およびレジスタREG1へのデータ登録処理について説明する。データ登録処理は、バスシステム1の稼働前にCPU4のソフトウェア処理によって実行される。
【0133】
データ登録処理時において、デコーダDEC2からバッファBUF1に出力される信号CPU_CSが「1」の時に、デコーダDEC2からセレクタSEL3に出力されるセレクト信号SELが「1」となることにより、CPU4は、アドレスバスABを介して登録記憶用RAM33にアクセス可能となる。また、セレクタSEL1のイネーブル端子ENBに「1」が入力されることにより、CPU4は、データバスDBを介してレジスタREG1にアクセス可能となる。これにより、登録記憶用RAM33およびレジスタREG1に記憶されているデータの書き換えが可能となる。
【0134】
データ登録処理が終了すると、デコーダDEC2からセレクタSEL3に出力されるセレクト信号SELは「0」となる。これにより、登録記憶用RAM33には、カウンタCOUNT3から出力される信号Item_No.が入力され、信号Item_No.に対応するデバイスアドレス等が登録記憶用RAM33から読み出し可能となる。また、セレクタSEL1のイネーブル端子ENBに「0」が入力されることにより、レジスタREG1に対する書き換えができなくなる。
【0135】
データValid、アドレスデータ、レジスタアドレスデータ、第1および第2の判定用データを記憶するためのメモリの種類は、特に限定されない。例えば、レジスタREG1を設ける代わりに、各スレーブデバイスに対する割り込み監視の有効/無効を示すデータValidを、登録記憶用RAM33に記憶させてもよい。ただし、あるスレーブデバイスが割り込み監視不要となった場合、当該スレーブデバイスに対応するデータValidを「0」に変更すれば、当該スレーブデバイスに対応するアドレスデータ、レジスタアドレスデータ、第1および第2の判定用データの書き換えを行う必要はない。そのため、データValidはレジスタREG1に記憶させることが望ましい。なお、アドレスデータ、レジスタアドレスデータ、第1および第2の判定用データのデータ量が小さければ、それらのデータをレジスタに記憶させてもよい。
【0136】
また、図3に示すように、アドレスデータ、レジスタアドレスデータ、第1および第2の判定用データを登録可能なスレーブデバイスの最大数は8である。当該最大数は、特に限定されない。
【0137】
また、データ登録は、アイテムNo.が0、4、2、6、1、5、3、7の順に行うことが望ましい。これにより、アイテムNo.が若い順にデータ登録を行う場合に比べ、割り込み監視を行うタイミングの偏りが緩和されるため、CPU4から既存マスタデバイス32へのアクセスが容易になる。
【0138】
また、1つのスレーブデバイスに対応するデータ登録の順序に関して、アドレスデータ、レジスタアドレスデータ、第1および第2の判定用データの登録後に、Validを「1」に設定することが望ましい。
【0139】
〔付記事項〕
上記の実施形態では、第1の判定用データとステータスデータとの論理積を演算し、当該論理積と第2の判定用データとの排他的論理和を演算し、当該排他的論理和の論理和を演算したが、これに限定されない。例えば、第2の判定用データとステータスデータとの排他的論理和を演算し、当該排他的論理和と第1の判定用データとの論理積を演算し、当該論理積の論理和を演算してもよい。この場合も、当該論理和は、割り込み要求の有無に対応する。
【0140】
判定回路に用いられる論理回路や第1および第2の判定用データは、判定回路から割り込み要求の有無に対応する判定結果が得られるものであれば、特に限定されない。
【0141】
本発明は上記の実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。すなわち、請求項に示した範囲で適宜変更した技術的手段を組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【0142】
本発明は、I2Cバスシステムに好適である。
【符号の説明】
【0143】
1 バスシステム
2a〜2e スレーブデバイス
3 マスタデバイス
4 CPU
5 チップ
31 割り込み監視回路
31a 読み出し回路
31b 判定回路
31c 割り込み要求通知回路
32 既存マスタデバイス
33 登録記憶用RAM(メモリ)
AND1〜8 ANDゲート
D1 第1の判定用データ
D2 第2の判定用データ
EXOR1〜8 EXORゲート
OR1 ORゲート

【特許請求の範囲】
【請求項1】
I2Cバスを介してスレーブデバイスに接続され、上記スレーブデバイスに割り当てられたデバイスアドレスを指定することで上記スレーブデバイスとの通信を行うマスタデバイスであって、
上記スレーブデバイスから、上記マスタデバイスおよび上記スレーブデバイスを制御するCPUへの割り込み要求を周期的に監視する割り込み監視回路を備えることを特徴とするマスタデバイス。
【請求項2】
上記割り込み監視回路は、
上記スレーブデバイスの割り込み要求の有無を示すペンディングビットを含むステータスデータを、上記マスタデバイスを介して上記スレーブデバイスから周期的に読み出す読み出し回路と、
上記スレーブデバイスから読み出された上記ステータスデータに基づいて、上記スレーブデバイスの割り込み要求の有無を判定する判定回路と、
上記判定回路によって、上記スレーブデバイスの割り込み要求が有と判定された場合に、上記CPUに割り込み要求を通知する割り込み要求通知回路と、を備えることを特徴とする請求項1に記載のマスタデバイス。
【請求項3】
上記判定回路は、
上記スレーブデバイスの割り込み要求の有無を判定するための第1および第2の判定用データを、当該スレーブデバイスと対応付けて記憶するメモリと、
第1および第2の判定用データおよび上記ステータスデータに基づいて、上記スレーブデバイスの割り込み要求の有無の判定結果を出力する論理回路と、を備えることを特徴とする請求項2に記載のマスタデバイス。
【請求項4】
上記読み出し回路は、
上記ステータスデータの読み出しのタイミングを制御するタイミング制御回路を備え、
上記タイミング制御回路は、所定のタイミングで、上記読み出し回路が上記スレーブデバイスからの上記ステータスデータの読み出しを開始するように制御し、
上記CPUが上記マスタデバイスへアクセスしている間に、上記所定のタイミングが到来した場合、
上記読み出し回路は、上記CPUの上記マスタデバイスへのアクセスが終了するまで、上記ステータスデータの読み出し開始を延期させることを特徴とする請求項2または3に記載のマスタデバイス。
【請求項5】
スレーブデバイスと、I2Cバスを介して上記スレーブデバイスに接続され、上記スレーブデバイスに割り当てられたデバイスアドレスを指定することで上記スレーブデバイスとの通信を行うマスタデバイスとを備えるバスシステムであって、
上記マスタデバイスとして、請求項1〜4のいずれか1項に記載のマスタデバイスを備えることを特徴とするバスシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2012−194829(P2012−194829A)
【公開日】平成24年10月11日(2012.10.11)
【国際特許分類】
【出願番号】特願2011−58862(P2011−58862)
【出願日】平成23年3月17日(2011.3.17)
【出願人】(000134109)株式会社デジタル (224)
【Fターム(参考)】