上記特許文献1に記載の従来の自動販売機のように、主制御部がシリアル通信によって複数の従制御部を統括的に制御する場合、主制御部および各従制御部は、各機能をソフトウエアによって実現するCPUとシリアル通信を行なうシリアルバスの通信インタフェース機能を有する通信部とで構成されるのが一般的である。
主制御部および各従制御部のCPUが実行する処理は異なるが、シリアル通信に関する処理は全て同じである。また、主制御部および各従制御部の通信部の機能も全て同じであるので、ここでは主制御部を例に挙げて説明する。
図10に、従来の自動販売機の主制御部の構成を示すブロック図である。主制御部は、CPU1000と、通信部2000とを備えている。CPU1000は、図示していない記憶部に記憶されるソフトウエアによって各従制御部をシリアル通信によって統括的に制御する。
CPU1000は、シリアル通信に関する構成部分として、シリアル通信部1100と、割込みコントローラ1200とを備えている。
シリアル通信部1100は、CPU1000によって各従制御部に送信すべきデータが設定される送信レジスタ1110、シリアルバスを介して通信部2000が受信したデータが設定される受信レジスタ1120、および送信レジスタ1110に設定されたパラレルのデータをシリアルのデータに変換して通信部2000に出力するとともに、通信部2000からのシリアルのデータをパラレルのデータに変換して受信レジスタ1120に設定するシリアル・パラレル変換部1130を備えている。割込みコントローラ1200は、シリアル通信部1100、通信部2000、および図示していないタイマなどのCPUの周辺回路からの割込み要求を制御する機能を備えている。
通信部2000は、シリアル・パラレル変換部1130によって設定されたシリアルのデータを保持するとともに、シリアルバスI/F部2200によって設定されたシリアルのデータを保持するデータバッファ2100と、データバッファ2100に保持されているデータからデータフレームを生成してシリアルバスに送信するとともに、シリアルバスからのデータフレームを受信してデータフレーム内のデータをデータバッファ2100に設定するシリアルバス・インターフェース部(以下、シリアルバスI/F部とする)2200とを備えている。
データバッファ2100は、シリアル通信におけるコマンドに対応するn(0<n,nは自然数)個の受信レジスタ2130−1〜2130−nと、n個の送信レジスタ2140−1〜2140−nと、シリアル・パラレル変換部1130から出力されたコマンドに基づいてデータを設定する受信レジスタ2130−1〜2130−nを選択するとともに、選択した受信レジスタ2130−1〜2130−nをシリアルバスI/F部2200に通知する受信レジスタ選択部2110と、シリアル・パラレル変換部1130から出力されたコマンドに基づいて送信レジスタ2140−1〜2140−nを選択し、選択した送信レジスタ2140−1〜2140−nに設定されているデータを出力する送信レジスタ選択部2120とを備えている。
シリアルバスI/F部2200は、受信レジスタ選択部2110によって通知された受信レジスタ2130−1〜2130−nに設定されているデータにコマンドを付加したデータフレームを生成し、生成したデータフレームをシリアルバスに送信する送信部2210と、シリアルバスからのデータフレームを受信してコマンドを識別し、識別したコマンドに対応する送信レジスタ2140−1〜2140−nにデータフレーム内のデータを設定する受信部2220と、CPU1000への割込み要求を生成する割込み制御部2230とを備えている。
つぎに、図11〜14のシーケンス図を参照して、従来の主制御部のシリアル通信処理の動作を説明する。まず、図11のシーケンス図を参照して、主制御部が1バイトのデータをシリアルバスに送信する1バイト送信処理の動作を説明する。
送信すべきデータが発生すると、CPU1000は、送信すべきデータに応じたコマンドをシリアル通信部1100の送信レジスタ1110に設定(コマンドライト)する。送信レジスタ1110にコマンドを設定した後、CPU1000は、1バイト送信処理とは異なる処理を実行することが可能であり、必要に応じて処理を実行する。
シリアル通信部1100は、送信レジスタ1110に設定されたコマンドをシリアル・パラレル変換部1130によってシリアルのコマンドに変換し、変換したコマンドを通信部2000に出力(コマンドをシリアル送信)する。
通信部2000の受信レジスタ選択部2110は、シリアル通信部1100のシリアル・パラレル変換部1130から出力されたコマンドを識別して、コマンドに対応する受信レジスタ2130−1〜2130−nを選択する。また、受信レジスタ選択部2110は、選択した受信レジスタ2130−1〜2130−nを送信部2210に通知する。
一方、シリアル通信部1100は、シリアル・パラレル変換部1130によって送信レジスタ1110に設定されたコマンドの出力が終了すると、コマンドの出力が終了したことを示す送信完了の割込み要求をCPU1000の割込みコントローラ1200に出力(データをシリアル送信)する。
割込みコントローラ1200は、シリアル通信部1100からの割込み要求を検出してCPU1000に通知する。CPU1000は、現在実行している1バイト送信処理とは異なる処理を中断して1バイト送信処理を行なうための割込み処理を実行する。CPU1000は、送信すべきデータをシリアル通信部1100の送信レジスタ1110に設定(データライト)する。CPU1000は、割込み要求によって中断した処理に戻って処理を実行する。
シリアル通信部1100は、送信レジスタ1110に設定されたデータをシリアル・パラレル変換部1130によってシリアルのデータに変換し、変換したデータを通信部2000に出力する。
通信部2000の受信レジスタ選択部2110は、シリアル通信部1100のシリアル・パラレル変換部1130から出力されたデータを先のコマンドによって選択した受信レジスタ2130−1〜2130−nに設定する。受信レジスタ2130−1〜2130−nはコマンドに対応している。送信部2210は、受信レジスタ選択部2110からの通知によって送信すべきデータが設定された受信レジスタ2130−1〜2130−nを認識し、データが設定された受信レジスタ2130ーn〜2130−nが何バイトのデータであるかを認識する。データが設定された受信レジスタ2130−1〜2130−nが1バイトのデータからなるコマンドに対応する場合、送信部2210は、シリアル通信部1100によってデータが設定された受信レジスタ2130−1〜2130−nに対応するコマンドと、受信レジスタ2130−1〜2130−nに設定されているデータとに基づいてデータフレームを生成し、生成したデータフレームをシリアルバスに出力する。
一方、シリアル通信部1100は、シリアル・パラレル変換部1130によって送信レジスタ1110に設定されたデータの出力が終了すると、データの出力が終了したことを示す送信完了の割込み要求をCPU1000の割込みコントローラ1200に出力する。
割込みコントローラ1200は、シリアル通信部1100からの割込み要求を検出してCPU1000に通知する。CPU1000は、現在実行している1バイト送信処理とは異なる処理を中断して1バイト送信処理を行なうための割込み処理を実行する。CPU1000は、1バイト送信処理によってデータを送信した後処理を行なった後に、中断した処理に戻って処理を継続する。
つぎに、図12のシーケンス図を参照して、主制御部が複数バイトのデータをシリアルバスに送信する複数バイト送信処理の動作を説明する。なお、複数バイト送信処理の動作は、上述した1バイト送信処理の動作を複数回繰り返すものであるので、CPU1000のシリアル通信部1100と、通信部2000のデータバッファ2100およびシリアルバスI/F部2200の詳細な動作の説明は省略する。
送信すべきデータが発生すると、CPU1000は、送信すべきデータに応じたコマンドをシリアル通信部1100に設定(コマンドライト)する。シリアル通信部1100は、設定されたコマンドをシリアルのコマンドに変換して通信部2000に出力(コマンドをシリアル送信)する。通信部2000は、通信部2000から出力されたコマンドを識別して、コマンドに対応する受信レジスタ2130−1〜2130−nを選択する。一方、シリアル通信部1100は、コマンドの出力が終了すると、送信完了の割込み要求をCPU1000に出力する。
シリアル通信部1100からの割込み要求を受けると、CPU1000は、現在実行している1バイト送信処理とは異なる処理を中断して1バイト送信処理を行なうための割込み処理を実行する。
CPU1000は、送信すべきデータが存在するか否か、すなわちデータの転送が終了したか否かを判定する。CPU1000は、送信すべきデータがなくなるまで、シリアル通信部1100にコマンドを設定し、送信完了の割込み要求を受けた後に、シリアル通信部1100にデータを設定する動作を繰り返す。
一方、選択された受信レジスタ2130−1〜2130−nがフルになると(選択された受信レジスタ2130−1〜2130−nに送信すべきデータがすべて設定されると)、送信部2210は、シリアル通信部1100によってデータが設定された受信レジスタ2130−1〜2130−nに対応するコマンドと、受信レジスタ2130−1〜2130−nに設定されているデータとに基づいてデータフレームを生成し、生成したデータフレームをシリアルバスに送信する。
つぎに、図13のシーケンス図を参照して、主制御部が1バイトのデータをシリアルバスから受信する1バイト受信処理の動作を説明する。通信部2000の受信部2220は、シリアルバスからのデータフレームを受信すると、受信したデータフレーム内のコマンドを識別し、識別したコマンドに対応する送信レジスタ2140−1〜2140−nにデータフレーム内のデータを設定する。受信したデータフレーム内のデータが送信レジスタ2140−1〜2140−nに設定されると、割込み制御部2230は、処理すべき受信データがあることを示す割込み要求をCPU1000の割込みコントローラ1200に出力する。
CPU1000の割込みコントローラ1200は、通信部2000からの割込み要求を検出してCPU1000に通知する。CPU1000は、現在実行している1バイト受信処理とは異なる処理を中断して1バイト受信処理を行なうための割込み処理を実行する。
CPU1000は、受信すべきデータが設定されている送信レジスタ2140−1〜2140−nを選択するためのコマンドをシリアル通信部1100の送信レジスタ1110に設定(コマンドライト)する。送信レジスタ1110にコマンドを設定した後、CPU1000は、中断した処理に戻って処理を実行する。
シリアル通信部1100は、送信レジスタ1110に設定されたデータをシリアル・パラレル変換部1130によってシリアルのデータに変換し、変換したデータを通信部2000に出力(コマンドをシリアル送信)する。
シリアル通信部1100は、シリアル・パラレル変換部1130によって送信レジスタ1110に設定されたコマンドの出力が終了すると、コマンドの出力が終了したことを示す送信完了の割込み要求をCPU1000の割込みコントローラ1200に出力する。
割込みコントローラ1200は、シリアル通信部1100からの割込み要求を検出してCPU1000に通知する。CPU1000は、現在実行している1バイト受信処理とは異なる処理を中断して1バイト受信処理を行なうための割込み処理を実行する。
CPU1000は、シリアル通信部1100の受信レジスタ1120に設定されているデータをリードする。このデータリードは、シリアル通信部1100に通信部2000からのデータを読み出させるためのものであるので、CPU1000はリードしたデータを読み捨てる。
シリアル通信部1100のシリアル・パラレル変換部1130は、通信部2000の送信レジスタ選択部2120が出力しているデータをパラレルのデータに変換して受信レジスタ1120に設定(データをシリアル受信)する。シリアル通信部1100は、受信レジスタ1120にデータを設定した後に、受信完了を示す割込み要求を割込みコントローラ1200に出力する。
割込みコントローラ1200は、シリアル通信部1100からの割込み要求を検出してCPU1000に通知する。CPU1000は、現在実行している処理を中断して1バイト受信処理を行なうための割込み処理を実行する。CPU1000は、シリアル通信部1100の受信レジスタ1120に設定されているデータをリードする。このデータは、受信すべきデータ、すなわち有効なデータである。
シリアル通信部1100のシリアル・パラレル変換部1130は、CPU1000によって受信レジスタ1120に設定されているデータが読み出されたことにより、通信部2000の送信レジスタ選択部2120が出力しているデータをパラレルのデータに変換して受信レジスタ1120に設定(データをシリアル受信)する。シリアル通信部1100は、受信レジスタ1120にデータを設定した後に、受信完了を示す割込み要求を割込みコントローラ1200に出力する。
割込みコントローラ1200は、シリアル通信部1100からの割込み要求を検出してCPU1000に通知する。CPU1000は、現在実行している1バイト受信処理とは異なる処理を中断して1バイト受信処理を行なうための割込み処理を実行した後、1バイト受信処理によってデータを受信した後処理を行なう。CPU1000は、中断した処理に戻って処理を継続する。
つぎに、図14のシーケンス図を参照して、主制御部が複数バイトのデータをシリアルバスから受信する複数バイト受信処理の動作を説明する。なお、複数バイト受信処理の動作は、上述した1バイト受信処理の動作を複数回繰り返すものであるので、CPU1000のシリアル通信部1100と、通信部2000のデータバッファ2100およびシリアルバスI/F部2200の詳細な動作の説明は省略する。
通信部2000は、シリアルバスからのデータフレームを受信すると、受信したデータフレーム内のコマンドに対応する送信レジスタ2140−1〜2140−nにデータフレーム内のデータを設定する。通信部2000は、処理すべき受信データがあることを示す割込み要求をCPU1000に出力する。
通信部2000からの割込み要求を受けると、CPU1000は、現在実行している複数バイト受信処理とは異なる処理を中断して複数バイト受信処理を行なうための割込み処理を実行する。CPU1000は、受信すべきデータが設定されている送信レジスタ2140−1〜2140を選択するためのコマンドをシリアル通信部1100に設定(コマンドライト)する。CPU1000は、中断した処理に戻って処理を実行する。
シリアル通信部1100は、設定されたコマンドをシリアルのコマンドに変換して通信部2000に出力(コマンドをシリアル送信)し、通信部2000はシリアル通信部1100から出力されたコマンドを識別して、コマンドに対応する送信レジスタ2140−1〜2140−nを選択する。一方、シリアル通信部1100は、コマンドの出力が終了すると、送信完了の割込み要求をCPU1000に出力する。
シリアル通信部1100からの割込み要求を受けると、CPU1000は、現在実行している処理を中断して複数バイト受信処理を行なうための割込み処理を実行する。CPU1000は、シリアル通信部1100からデータをリードして、シリアル通信部1100に新たなデータ(コマンドによって選択した送信レジスタ2140−1〜2140−nに設定されているデータ)を設定させる。通信部2000からのデータの設定(データのシリアル受信)が終了すると、シリアル通信部1100は、受信完了を示す割込み要求をCPU1000に出力する。
シリアル通信部1100からの割込み要求を受けると、CPU1000は、現在実行している処理を中断して複数バイト受信処理を行なうための割込み処理を実行する。CPU1000は、シリアル通信部1100からデータをリードする。このデータは有効なデータである。
シリアル通信部1100は、CPU1000がデータをリードしたことにより、通信部2000から新たなデータが設定され、データの設定が終了すると受信完了の割込み要求をCPU1000に出力する。
シリアル通信部1100からの割込み要求を受けると、CPU1000は、現在実行している処理を中断して複数バイト受信処理を行なうための割込み処理を実行する。CPU1000は、受信すべきデータが存在するか否か、すなわち、データの受信が終了したか否かを判定する。CPU1000は、データをすべて受信するまで、シリアル通信部1100にコマンドを設定し、送信完了を示す割込要求を受けた後に、シリアル通信部1100からデータをリードし、受信完了を示す割込み要求を受けた後に、シリアル通信部1100から有効なデータをリードする動作を繰り返す。
このように従来の自動販売機の主制御部および各従制御部のCPU1000は、通信部2000を用いてデータフレームを生成してシリアルバスにデータフレームを送信するために、通信部2000にデータを1バイト単位で設定しなければならず、さらに1バイトのデータを通信部2000に設定するためにコマンドを出力しなければならない。また、シリアルバスからのデータフレーム内のデータを1バイト受信するために、コマンドの出力、2回のデータのリードを行なわなければならない。そのため、シリアル通信処理に関するCPU1000の処理負荷が大きくなるという問題があった。
また、コマンドの設定、データの設定またはデータのリードの度に、シリアル通信部1100は割込み要求を出力するので、1バイトのデータを送信する場合には2回の割込みが発生し、1バイトのデータを受信する場合には3回の割込みが発生することになる。すなわち、m(0<m,mは自然数)バイトのデータを送信する場合「2×m」回の割込みが発生し、mバイトのデータを受信する場合「3×m」回の割込みが発生する。割込みが発生する度に、CPU1000は、現在実行している処理を中断してシリアル通信処理(1バイト送信処理、複数バイト送信処理、1バイト受信処理、または複数バイト受信処理)を行なうための割込み処理を行なわなければならないため、シリアル通信処理およびシリアル通信処理によって中断される他の処理の処理時間が長くなるという問題があった。シリアル通信処理の処理時間が長くなることは主制御部が各従制御部を制御する時間が長くなることを意味する。すなわち、金額表示や押釦によって選択された商品を識別する時間が長くなり、自動販売機の利用者が購入金額の紙幣またはコインを投入してから商品を出力するまでの時間が長くなってしまうという問題が生じる。
本発明は、上記実情に鑑みて、シリアル通信処理における割込み回数を低減してCPUの処理負荷を軽減して、高機能の自動販売機を提供することを目的とする。
上記の目的を達成するために、本発明の請求項1にかかる自動販売機は、複数の従制御装置と、該複数の従制御装置とシリアルバスによって接続される主制御装置とを備え、主制御装置がシルアル通信を用いて複数の従制御装置を制御する自動販売機において、前記主制御装置および前記複数の従制御装置は、シリアル通信処理を含む処理を実行するCPUと、前記シリアルバスにコマンドおよびデータを含むデータフレームを送信するとともに、前記シリアルバスから受信したデータフレーム内のデータを保持する通信部と、前記CPUと通信部との間に介在するシリアルコントローラとを夫々備え、前記シリアルコントローラは、前記CPUから出力されるバイト単位の送信データを保持する送信バッファと、前記通信部からの受信データを保持する受信バッファと、前記送信バッファに保持されている送信データをシリアルの送信データに変換するとともに、前記通信部からのシリアルの受信データをバイト単位のデータに変換して前記受信バッファに出力するシリアル・パラレル変換部と、データ送信時には、前記送信バッファに保持されている送信データに対応するコマンドを選択して前記通信部に出力するとともに、前記シリアル・パラレル変換部によって変換されたシリアルのデータを前記通信部に出力させ、前記送信バッファに保持している送信データを全て前記通信部に出力した後に送信完了を示す割込み要求を前記CPUに出力し、データ受信時には、前記通信部が受信したデータを全て受信バッファに保持した後に受信完了を示す割込み要求を前記CPUに出力する送受信制御部と、を夫々備えることを特徴とする。
また、本発明の請求項2にかかる自動販売機は、上記請求項1において、前記シリアルコントローラは、前記送信バッファを前記コマンドに対応付けて複数個備えておき、前記CPUからの送信データを保持した送信バッファを識別して前記コマンドを選択することを特徴とする。
また、本発明の請求項3にかかる自動販売機は、上記請求項1または2において、前記送受信制御部は、前記CPUから出力される送信データのバイト数をカウントするライト回数カウンタを備え、前記ライト回数カウンタのカウント値に基づいて前記通信部に全ての送信データを出力したか否かを判定することを特徴とする。
また、本発明の請求項4にかかる自動販売機は、上記請求項1〜3のいずれか一つにおいて、前記CPUは、前記通信部が受信する受信データのバイト数を前記送受信制御部に通知し、前記送受信制御部は、前記CPUから通知されたバイト数に基づいて前記通信部から全てのデータを受信したか否かを判定することを特徴とする。
本発明にかかる自動販売機は、主制御装置および複数の従制御装置の夫々のCPUと通信部との間に、データ送信時には、CPUから設定された送信バッファに保持されている送信データに対応するコマンドを選択して通信部に出力するとともに、送信データをシリアルのデータに変換して通信部に出力させ、送信バッファに保持されている送信データを全て通信部に出力した後に送信完了を示す割込み要求をCPUに出力し、データ受信時には、通信部が受信したデータを全て受信バッファに保持した後に受信完了を示す割込み要求をCPUに出力するシリアルコントローラを配置したので、シリアル通信の送受信時に発生するCPUへの割込み要求の回数を低減してCPUの処理負荷を軽減し、シリアル通信とは異なる処理の処理時間を短縮することができる自動販売機を得ることができるという効果を奏する。
図1は、この発明にかかる自動販売機の本実施例の構成を示すブロック図である。図1に示した自動販売機は、自動販売機内の各構成部分を統括的に制御する主制御部1(特許請求の範囲でいうところの主制御装置)と、ルートマンやサービスマンが自動販売機のメンテナンスに用いるリモコン2と、商品の金額を表示する金額表示機3と、商品を選択するための押釦4とが、シリアルバス5に接続されている。なお、リモコン2、金額表示機3、および押釦4が特許請求の範囲でいうところの従制御装置である。
主制御部1は、CPU11と、シリアルコントローラ12と、通信部13とを備えている。CPU11とシリアルコントローラ12とはバス接続され、シリアルコントローラ12と通信部13とはシリアルに接続されている。
CPU11は、割込みコントローラ111を有し、図示していない記憶部に記憶されているソフトウエアによって各種処理を実行して、シリアルコントローラ12および通信部13を介して、リモコン2、金額表示機3、および押釦4をシリアル通信によって制御する。割込みコントローラ111は、シリアルコントローラ12、通信部13、および図示していないタイマなどからの割込み要求を検出して、CPU11が実行するソフトウエアの各種処理を制御する。
シリアルコントローラ12は、CPU11がシリアルバス5を介してリモコン2、金額表示機3、および押釦4とシリアル通信を行なう際のデータを通信部13に転送するとともに、通信部13が受信したデータをCPU11に転送する。
通信部13は、シリアルコントローラ12からのデータにコマンドを付加したデータフレームを生成してシリアルバス5に送信するとともに、シリアルバス5からデータフレームを受信し、受信したデータフレーム内のデータをシリアルコントローラ12に送信する。
リモコン2は、CPU21と、シリアルコントローラ22と、通信部23とを備えている。CPU21とシリアルコントローラ22とはバス接続され、シリアルコントローラ22と通信部23とはシリアルに接続されている。
CPU21は、割込みコントローラ211を有し、図示していない記憶部に記憶されているソフトウエアによって、図示していない入力部を介して入力された指示や主制御部1からの指示による処理を実行する。CPU21が実行する処理は、たとえば、入力部から入力された指示をシリアルコントローラ22および通信部23を介して主制御部1に通知するとともに、図示していない表示部に入力部から入力されたデータや主制御部1から指示されたデータを表示するなどである。
割込みコントローラ211は、シリアルコントローラ22、通信部23、および図示していないタイマなどからの割込み要求を検出して、CPU21が実行するソフトウエアの各種処理を制御する。
シリアルコントローラ22は、CPU21がシリアルバス5を介して主制御部1とシリアル通信を行なう際のデータを通信部23に転送するとともに、通信部23が受信したデータをCPU21に転送する。
通信部23は、シリアルコントローラ22からのデータにコマンドを付加したデータフレームを生成してシリアルバス5に送信するとともに、シリアルバス5からデータフレームを受信し、受信したデータフレーム内のデータをシリアルコントローラ22に送信する。
金額表示機3は、CPU31と、シリアルコントローラ32と、通信部33とを備えている。CPU31とシリアルコントローラ32とはバス接続され、シリアルコントローラ32と通信部33とはシリアルに接続されている。
CPU31は、割込みコントローラ311を有し、図示していない記憶部に記憶されているソフトウエアによって、自動販売機の金額表示に関する処理を実行する。CPU31が実行する処理は、主制御部1からの指示によって図示していない表示部に自動販売機に投入された金額を表示するなどである。
割込みコントローラ311は、シリアルコントローラ32、通信部33、および図示していないタイマなどからの割込み要求を検出して、CPU31が実行するソフトウエアの各種処理を制御する。
シリアルコントローラ32は、CPU32がシリアルバス5を介して主制御部1とシリアル通信を行なう際のデータを通信部33に転送するとともに、通信部33が受信したデータをCPU31に転送する。
通信部33は、シリアルコントローラ32からのデータにコマンドを付加したデータフレームを生成してシリアルバス5に送信するとともに、シリアルバス5からデータフレームを受信し、受信したデータフレーム内のデータをシリアルコントローラ32に送信する。
押釦4は、CPU41と、シリアルコントローラ42と、通信部43と、スイッチ(以下、SWとする)44と、LED(Light Emitting Diode)45とを備えている。CPU41とシリアルコントローラ42とはバス接続され、シリアルコントローラ42と通信部33とはシリアルに接続されている。
CPU41は、割込みコントローラ411を有し、図示していない記憶部に記憶されているソフトウエアによって、押釦4に関する処理を実行する。CPU41が実行する処理は、たとえば、主制御部1からの指示によってLED45を発光させたり、SW44の状態を監視して主制御部に通知するなどの処理である。
割込みコントローラ411は、シリアルコントローラ42、通信部43、SW44、および図示していないタイマなどからの割込み要求を検出して、CPU41が実行するソフトウエアの各種処理を制御する。たとえば、SW44が、押釦4が押された場合にオンになり、押釦4が押されていない場合にはオフになるとする。割込みコントローラ411は、SW44がオンになると割込要求が発生したとして、CPU41にSW44からの割込みが発生したことを通知する。この通知により、CPU41は、押釦4が押されたことを主制御部1に通知するデータの転送処理を実行する。
シリアルコントローラ42は、CPU41がシリアルバス5を介して主制御部1とシリアル通信を行なう際のデータを通信部43に転送するとともに、通信部43が受信したデータをCPU41に転送する。
通信部43は、シリアルコントローラ42からのデータにコマンドを付加したデータフレームを生成してシリアルバス5に送信するとともに、シリアルバス5からデータフレームを受信し、受信したデータフレーム内のデータをシリアルコントローラ42に送信する。
シリアルコントローラ12,22,32,42は、すべて同じ機能を備えている。図2に示したシリアルコントローラ12の構成を示すブロック図を参照して、シリアルコントローラの機能を説明する。
シリアルコントローラ12は、シリアル通信におけるコマンドの数n(0<n,nは自然数)に対応する送信バッファ121−1〜121−nおよび受信バッファ122−1〜122−nと、シリアル・パラレル変換部123と、送信レジスタ124と、コマンド群レジスタ125と、セレクタ126と、受信レジスタ127と、送受信制御部128とを備えている。
送信バッファ121−1〜121−nは、CPU11からのデータを保持する。シリアル・パラレル変換部123は、送受信制御部128からの選択指示に基づいて送信バッファ121−1〜121−nを選択し、選択した送信バッファ121−1〜121−nに保持されているデータをシリアルのデータに変換して送信レジスタ124に出力する。また、シリアル・パラレル変換部123は、受信レジスタ127に保持されているデータをパラレルのデータに変換し、変換したデータを送受信制御部128からの選択指示に基づいて選択した受信バッファ122−1〜122−nに出力する。
送信レジスタ124は、シリアル・パラレル変換部123から出力されたデータを保持し、セレクタ126に出力する。コマンド群レジスタ125は、シリアル通信におけるコマンドを記憶しており、送受信制御部128からコマンド選択指示に基づいて記憶しているコマンドをセレクタ126に出力する。
セレクタ126は、送受信制御部128からの選択指示に基づいて送信レジスタ124の出力、またはコマンド群レジスタ125の出力を選択して通信部13に出力する。
受信レジスタ127は、通信部13からのデータを保持する。受信バッファ122−1〜122−nは、シリアル・パラレル変換部123から出力されたデータを保持するとともに、CPU11からの要求によって保持しているデータをCPU11に出力する。
送受信制御部128は、送信タイミング生成部1282、ライト回数カウンタ1281、コマンド切替部1285、受信タイミング生成部1283、受信回数カウンタ1284、および割込み生成部1286を備えている。
送信タイミング生成部1282は、送信バッファ121−1〜121−nに保持されているデータを通信部13に送信する際のタイミングを生成する。ライト回数カウンタ1281は、CPU11から送信バッファ121−1〜121−nに設定されたデータのバイト数をカウントする。コマンド切替部1285は、送信バッファ121−1〜121−nに対応するコマンドを選択するコマンド選択指示をコマンド群レジスタ125に出力する。
受信タイミング生成部1283は、通信部13からのデータを受信バッファ122−1〜122−nに保持させる受信時のタイミングを生成する。受信回数カウンタ1284は、通信部13から受信したデータ、すなわち受信バッファ122−1〜122−nが保持したデータのバイト数をカウントする。
割込み生成部1286は、送信バッファ121−1〜121−nに保持されたデータを通信部13に送信した場合、または通信部13からのデータを受信バッファ122−1〜122−nに保持した場合、すなわち、通信部13とのデータ転送が完了した際に、処理完了を示す割込み要求を生成してCPU11の割込みコントローラ111に出力する。
通信部13,23、33,43は、すべて同じ機能を備えている。図3に示した通信部13の構成を示すブロック図を参照して、通信部の機能を説明する。
通信部13は、シリアルコントローラ12から出力されたシリアルのデータを保持するとともに、シリアルバス5から受信したシリアルのデータを保持するデータバッファ130と、データバッファ130に保持されているデータからデータフレームを生成してシリアルバス5に送信するとともに、シリアルバス5からのデータフレームを受信してデータフレーム内のデータをデータバッファ130に保持させるシリアルバス・インターフェース部(以下、シリアルバスI/F部とする)131とを備えている。
データバッファ130は、シリアル通信におけるコマンドの数n(0<n,nは自然数)に対応した受信レジスタ1303−1〜1303−nと、送信レジスタ1304−1〜1304−nと、シリアルコントローラ12から出力されたコマンドに基づいてデータを保持する受信レジスタ1303−1〜1303−nを選択するとともに、選択した受信レジスタ1303−1〜1303−nをシリアルバスI/F部131に通知する受信レジスタ選択部1301と、シリアルコントローラ12から出力されたコマンドに基づいて選択した送信レジスタ1304−1〜1304−nが保持しているデータを出力する送信レジスタ選択部1302とを備えている。
シリアルバスI/F部131は、受信レジスタ選択部1301によって通知された受信レジスタ1303−1〜1303−nに保持されているデータに対応するコマンドを付加したデータフレームを生成し、生成したデータフレームをシリアルバス5に送信する送信部1311と、シリアルバス5からのデータフレームを受信してコマンドを識別し、識別したコマンドに対応する送信レジスタ1304−1〜1304−nにデータフレーム内のデータを保持させるとともに、識別したコマンドに対応する送信レジスタ1304−1〜1304−nの情報を含む選択通知を送信レジスタ選択部1302に出力する受信部1312と、CPU11への処理を要求する割込み要求を生成する割込み制御部1313とを備えている。
つぎに、図4および図5のフローチャートを参照して、シリアル通信の動作を説明する。なお、主制御部1のCPU11、リモコン2のCPU21、金額表示機3のCPU31、および押釦4のCPU41が実行する処理は異なるが、シリアル通信に関する処理はすべて同じであるので、ここでは、主制御部1を例に挙げてシリアル通信の動作を説明する。
まず、図4のフローチャートを参照して、シリアルバス5にデータフレームを送信する送信処理の動作を説明する。送信すべきデータが発生すると、CPU11は、送信データをシリアルコントローラ12の送信バッファ121−1〜121−nに設定する(ステップS100,S101)。具体的には、CPU11とシリアルコントローラ12の送信バッファ121−1〜121−nとは、バス接続されており、CPU11は送信バッファ121−1〜121−nをメモリとして認識している。CPU11は、一般的なメモリへのデータライトと同様に、チップセレクトによって送信バッファ121−1〜121−nを選択し、送信バッファ121−1〜121−nのアドレスをアドレスバスに出力し、送信バッファ121−1〜121−nに設定する送信データをデータバスに出力して、送信データに付加するコマンドに対応する送信バッファ121−1〜121−nに送信データを設定する。
送受信制御部128は、CPU11からのチップセレクトによってCPU11が送信データを設定した送信バッファ121−1〜121−nを識別する。送信データが設定された送信バッファ121−1〜121−nが1バイトのデータからなるコマンドに対応するものであるのか、複数バイトのデータからなるコマンドに対応するものなのかを判定する。送信データが設定された送信バッファ121−1〜121−nが複数バイトのデータからなるコマンドに対応する場合、送受信制御部128は、ライト回数カウンタ1281の値をカウントアップする(ステップS102)。
CPU11は、全ての送信データを送信バッファ121−1〜121−nに設定するまで、1バイト単位で送信バッファ121−1〜121−nに設定し、送受信制御部128は、送信データが設定された送信バッファ121−1〜121−nが複数バイトのデータからなるコマンドに対応する場合にはライト回数カウンタ1281の値をカウントアップする動作を繰り返す(ステップS101〜S103)。
CPU11は、全ての送信データを送信バッファ121−1〜121−nに設定すると、送信を許可すること示す送信許可通知をシリアルコントローラ12の送受信制御部128に出力する(ステップS104)。
送信許可通知を受けると、送受信制御部128は、送信タイミング生成部1282を起動して送信データが設定された送信バッファ121−1〜121−nからシリアル・パラレル変換部123への送信データ出力や、シリアル・パラレル変換部123のデータ変換、送信レジスタ124へのデータ設定など、送信バッファ121−1〜121−nに設定されているデータを通信部に送信する際のタイミングを生成させて、通信部13へのデータ転送を開始する。
コマンド切替部1285は、コマンド群レジスタ125からコマンドを選択して通信部13に出力する(ステップS105)。具体的には、送受信制御部128は、送信データが設定された送信バッファ121−1〜121−nを認識している。送受信制御部128は、コマンド切替部1285に送信データが設定された送信バッファ121−1〜121−nを通知する。送信バッファ121−1〜121−nはコマンドに対応しているので、コマンド切替部1285は、送信データが設定された送信バッファ121−1〜121−nによってコマンドを選択し、選択したコマンドの出力するコマンド選択指示をコマンド群レジスタ125とセレクタ126とに出力する。コマンド群レジスタ125は、コマンド選択指示に基づいてコマンド切替部1285によって選択されたコマンドをセレクタ126に出力する。送信タイミング生成部1282は、コマンドを通信部13に出力する間、コマンド群レジスタ125からの出力を選択する選択指示をセレクタ126に出力している。したがって、セレクタ126は、コマンド群レジスタ125から出力されたコマンドを選択して通信部13に出力する。
通信部13の受信レジスタ選択部1301は、シリアルコントローラ12から入力されたコマンドを識別して、コマンドに対応する受信レジスタ1303−1〜1303−nを選択する(ステップS106)。また、受信レジスタ選択部1301は、選択した受信レジスタ1303−1〜1303−nを送信部1311に通知する。
シリアルコントローラ12の送信タイミング生成部1282は、送信バッファ121−1〜121−n、シリアル・パラレル変換部123、および送信レジスタ124を制御して、送信バッファ121−1〜121−nに設定されているデータを送信レジスタ124に設定する(ステップS107)。具体的には、コマンドを通信部13に出力した後、送信タイミング生成部1282は、送信データが設定された送信バッファ121−1〜121−nに設定されたデータを出力させる。シリアル・パラレル変換部123は、送信バッファ121−1〜121−nから出力された送信データをシリアルのデータに変換して送信レジスタ124に設定する。
送信タイミング生成部1282は、送信レジスタ124およびセレクタ126を制御して送信レジスタ124に設定されたデータを通信部13に出力する(ステップS108)。具体的には、送信タイミング生成部1282は、送信レジスタ124に設定されたデータを出力させる。また、送信タイミング生成部1282は、送信レジスタ124の出力を選択する選択指示をセレクタ126に出力する。これにより、セレクタ126は、送信レジスタ124から出力されたデータを選択して、送信レジスタ124に設定されたデータを通信部13に出力する。
通信部13の受信レジスタ選択部1301は、シリアルコントローラ12から受信したデータを先のコマンドによって選択した受信レジスタ1303−1〜1303−nに設定する(ステップS109)。
シリアルコントローラ12の送信タイミング生成部1282は、CPU11から送信バッファ121−1〜121−nに設定されたデータを全て通信部13に出力するまで、送信バッファ121−1〜121−n、シリアル・パラレル変換部123、送信レジスタ124、およびセレクタ126を制御して、送信バッファ121−1〜121−nに設定されたデータをシリアルのデータに変換して送信レジスタ124に設定し、セレクタ126を介して送信レジスタ124に設定されたデータを通信部13に出力し、通信部13の受信レジスタ選択部1301は、コマンドによって選択した受信レジスタ1303−1〜1303−nにシリアルコントローラ12からのデータを設定する動作を繰り返す(ステップS107〜S110)。送信タイミング生成部1282は、クロックをカウントするなどして通信部13に出力したデータのバイト数を認識して、ライト回数カウンタ1281のカウント値と比較することで、CPU11から送信バッファ121−1〜121−nに設定されたデータをすべて通信部13に出力したか否かを判定すればよい。
CPU11から送信バッファ121−1〜121−nに設定されたデータを全て通信部13に出力すると、送信タイミング生成部1282は、データ転送が終了したことを割込み生成部1286に通知する。割込み生成部1286は、送信完了を示す割込み要求を生成してCPU11の割込みコントローラ111に出力する(ステップS111)。
一方、選択された受信レジスタ1303−1〜1303−nがフルになると(選択された受信レジスタ1303−1〜1303−nに送信すべきデータが設定されると)、送信部1311は、選択された受信レジスタ1303−1〜1303−nに対応するコマンドと受信レジスタ1303−1〜1303−nに設定されているデータとに基づいてデータフレームを生成し、生成したデータフレームをシリアルバス5に出力する(ステップS112)。
なお、CPU11は、全ての送信データを送信バッファ121−1〜121−nに設定すると、送信を許可すること示す送信許可通知をシリアルコントローラ12の送受信制御部128に出力するステップS104は、送信すべきデータが1バイトの場合には、省略してもよい。この場合、シリアルコントローラ12の送受信制御部128は、CPU11によって選択された受信バッファ122−1〜122−nに対応するコマンドが、1バイトのデータによるコマンドの場合には、受信バッファ122−1〜122−nにデータが設定されたことを確認した後に、通信部13への転送処理を実行するようにすればよい。
つぎに、図5のフローチャートを参照して、シリアルバス5からデータフレームを受信する受信処理の動作を説明する。通信部13の受信部1312は、シリアルバス5からのデータフレームを受信すると、受信したデータフレーム内のコマンドを識別し、識別したコマンドに対応する送信レジスタ1304−1〜1304−nにデータフレーム内のデータを保持させる。受信したデータフレーム内のデータが送信レジスタ1304−1〜1304−nに保持されると、割込み制御部1313は、処理すべきデータがあることを示す割込み要求をCPU11の割込みコントローラ111に出力する。
CPU11の割込みコントローラ111は、割込み要求を検出してCPU11に通知する。割込みコントローラ11から通信部13からの割込み要求を受けると、CPU11は、受信すべきデータが設定されている通信部13の送信レジスタ1304−1〜1304−nを選択するためのコマンドをシリアルコントローラ12の送信バッファ121−1〜121−nに設定する(ステップS200,S201)。CPU11は、受信すべきデータのバイト数をシリアルコントローラ12の受信回数カウンタ1284に設定する(ステップS202)。
シリアルコントローラ12の送受信制御部128は、送信タイミング生成部1282を起動して送信データが設定された送信バッファ121−1〜121−nからシリアル・パラレル変換部123への送信データ出力や、シリアル・パラレル変換部123のデータ変換、送信レジスタ124へのデータ設定など、送信バッファ121−1〜121−nに設定されているデータを通信部に送信する際のタイミングを生成させる。
コマンド切替部1285は、コマンド群レジスタ125からコマンドを選択して通信部13に出力する(ステップS203)。具体的には、送受信制御部128は、送信データが設定された送信バッファ121−1〜121−nを認識している。送受信制御部128は、コマンド切替部1285に送信データが設定された送信バッファ121−1〜121−nを通知する。送信バッファ121−1〜121−nはコマンドに対応しているので、コマンド切替部1285は、送信データが設定された送信バッファ121−1〜121−nによってコマンドを選択し、選択したコマンドの出力するコマンド選択指示をコマンド群レジスタ125とセレクタ126とに出力する。コマンド群レジスタ125は、コマンド選択指示に基づいてコマンド切替部1285によって選択されたコマンドをセレクタ126に出力する。送信タイミング生成部1282は、コマンドを通信部13に出力する間、コマンド群レジスタ125からの出力を選択する選択指示をセレクタ126に出力している。したがって、セレクタ126は、コマンド群レジスタ125から出力されたコマンドを選択して通信部13に出力する。
通信部13の送信レジスタ124は、シリアルコントローラ12から入力されたコマンドを識別して、コマンドに対応する送信レジスタ1304−1〜1304−nを選択する(ステップS204)。これにより、通信部13は選択された送信レジスタ1304−1〜1304−nに設定されているデータの出力を開始して、出力したデータをシリアルコントローラ12の受信レジスタ127に設定する(ステップS205)。
シリアルコントローラ12の送受信制御部128は、送信タイミング生成部1282を停止して、受信タイミング生成部1283を起動して、通信部13から出力されるデータを受信レジスタ127に設定させたり、シリアル・パラレル変換部123のデータ変換、CPU11からのコマンドライトによって選択された受信バッファ122−1〜122−nにシリアル・パラレル変換部123によって変換されたデータを設定するなどのタイミングを生成させて、通信部13からのデータの受信を開始する。
受信タイミング生成部1283は、受信レジスタ127、シリアル・パラレル変換部123および送信バッファ121−1〜121−nを制御して、受信レジスタ127に設定されたデータをパラレルのデータに変換して選択されている送信バッファ121−1〜121−nに設定する(ステップS206)。
シリアルコントローラ12の受信タイミング生成部1283は、受信回数カウンタ1284に設定されているバイト数のデータを選択された送信バッファ121−1〜121−nに設定するまで、受信レジスタ127に設定されているデータを変換して選択された送信バッファ121−1〜121−nに設定する動作を繰り返す(ステップS205〜S207)。送信タイミング生成部1282は、クロックをカウントするなどして選択された送信バッファ121−1〜121−nに設定したデータのバイト数を認識して、受信回数カウンタ1284の値と比較することで、通信部13から全てのデータを受信したか否かを判定すればよい。
通信部13から受信回数カウンタ1284に設定されたバイト数のデータを受信すると、受信タイミング生成部1283は、データ受信が完了したことを割込み生成部1286に通知する。割込み生成部1286は、受信完了を示す割込み要求を生成してCPU11の割込みコントローラ111に出力する(ステップS208)。
CPU11の割込みコントローラ111は、シリアルコントローラ12からの割込み要求を検出してCPU11に通知する。CPU11は、受信バッファ122−1〜122−nに設定されているデータをリードする(ステップS209)。具体的には、CPU11とシリアルコントローラ12の受信バッファ122−1〜122−nとは、バス接続されており、CPU11は受信バッファ122−1〜122−nをメモリとして認識している。CPU11は、一般的なメモリからのデータリードと同様に、チップセレクトによって受信バッファ122−1〜122−nを選択し、受信バッファ122−1〜122−nのアドレスをアドレスバスに出力して受信バッファ122−1〜122−nからデータを出力させてデータをリードする。
なお、CPU11がシリアルコントローラ12の受信回数カウンタ1284に受信するデータのバイト数を設定するステップS202は、受信すべきデータが1バイトの場合には省略してもよい。この場合、シリアルコントローラ12の送受信制御部128は、CPU11のコマンドライトによって選択された送信バッファ121−1〜121−nに対応するコマンドが、1バイトのデータによるコマンドか否かを判定し、1バイトのデータによるコマンドの場合には1バイトのデータを受信した後に、割込み生成部1286に受信が完了したことを通知するようにすればよい。
また、CPU11がコマンドをシリアルコントローラ12の送信バッファ121−1〜121−nに設定するステップS201は、受信すべきデータが複数バイトの場合には省略してもよい。この場合、CPU11は、受信すべきデータのバイト数をシリアルコントローラ12の受信回数カウンタ1284に設定するS203において、選択すべき送信レジスタ1304−1〜1304−nに対応する送信バッファ121−1〜121−nに受信すべきデータのバイト数を設定する。シリアルコントローラ12の送受信制御部128は、データが設定された送信バッファ121−1〜121−nが1バイトのコマンドではない場合、設定されたデータが受信すべきデータのバイト数であると判断して、受信回数カウンタ1284に設定する。これにより、複数バイト受信において、CPU11がコマンドを出力する動作を省略することができる。
つぎに、図6〜図9のシーケンス図を参照して、CPU11、シリアルコントローラ12、および通信部13におけるデータの流れを説明する。まず、図6のシーケンス図を参照して1バイト送信処理のデータの流れを説明する。CPU11は、送信すべきデータをシリアルコントローラ12に設定(データライト)する。CPU11は、1バイト送信処理とは異なる処理を実行することが可能であり、必要に応じて処理を実行する。
シリアルコントローラ12は、CPU11によってデータが設定された送信バッファ121−1〜121−nに対応したコマンドをシリアルのコマンドに変換して通信部13に出力(コマンドをシリアル送信)する。シリアルコントローラ12は、CPU11によってデータが設定された送信バッファ121−1〜121−nのデータをシリアルのデータに変換して通信部13に出力(データをシリアル送信)する。
通信部13は、シリアルコントローラ12から出力されたコマンドに対応する受信レジスタ1303−1〜1303−nのデータにコマンドを付加したデータフレームを生成してシリアルバス5に出力する。
一方、シリアルコントローラ12は、CPU11によってデータが設定された送信バッファ121−1〜121−nのデータを通信部13に出力した後に、送信完了の割込み要求をCPU11に出力する。CPU11は、送信完了の割込み要求によって、現在実行している処理から1バイト送信処理を実行するための割込み処理を実行する。
このようにこの発明にかかる自動販売機のシリアル通信における1バイト送信処理では、シリアルコントローラ12にコマンドに対応した送信バッファ121−1〜121−nを設けて、CPU11がデータを設定した送信バッファ121−1〜121−nに基づいてコマンドを選択して通信部13に出力するようにしているので、CPU11がコマンドを出力する必要がなくなり、割込み回数が1回となっている。すなわち、図11のシーケンス図を参照して説明した従来の自動販売機のシリアル通信における1バイト送信処理と比較して割込み回数を半分にしている。
つぎに、図7のシーケンス図を参照して複数バイト送信処理のデータの流れを説明する。CPU11は、送信すべきデータを1バイト単位でシリアルコントローラ12に設定(データライト)する。送信すべきデータがm(0<m,mは自然数)バイトの場合、CPU11は、データライトをm回繰り返す。全てのデータをシリアルコントローラ12に設定した後、CPU11は、送信を許可することを示す送信許可通知をシリアルコントローラ12に出力する。CPU11は、複数バイト送信処理とは異なる処理を実行することが可能であり、必要に応じて処理を実行する。
送信許可通知を受けると、シリアルコントローラ12は、CPU11によってデータが設定された送信バッファ121−1〜121−nに対応したコマンドをシリアルのコマンドに変換して通信部13に出力(コマンドをシリアル送信)する。シリアルコントローラ12は、CPU11によってデータが設定された送信バッファ121−1〜121−nのデータをシリアルのデータに変換して通信部13に出力(データをシリアル送信)する。
通信部13は、シリアルコントローラ12から出力されたコマンドに対応する受信レジスタ1303−1〜1303−nのデータにコマンドを付加したデータフレームを生成してシリアルバス5に出力する。
一方、シリアルコントローラ12は、CPU11によってデータが設定された送信バッファ121−1〜121−nのデータを通信部13に出力した後に、送信完了の割込み要求をCPU11に出力する。CPU11は、送信完了の割込み要求によって、現在実行している処理から複数バイト送信処理を実行するための割込み処理を実行する。
このようにこの発明にかかる自動販売機のシリアル通信における複数バイト送信処理では、シリアルコントローラ12にコマンドに対応した送信バッファ121−1〜121−nを設けて、CPU11がデータを設定した送信バッファ121−1〜121−nに基づいてコマンドを選択して通信部13に出力するようにしているので、CPU11がコマンドを出力する必要がなくなる。
また、CPU11は、送信すべきmバイトのデータを全てシリアルコントローラ12に設定した後に、送信許可通知を出力してシリアルコントローラ12に通信部13へのデータ転送を開始させている。
これにより、複数バイトのデータを有するデータフレームをシリアルバス5に送信する場合でも、割込み回数が1回となっている。すなわち、図12のシーケンス図を参照して説明した従来の自動販売機のシリアル通信における複数バイト送信処理では、mバイトのデータを有するデータフレームをシリアルバスに送信する場合には「2×m」回の割り込みが発生するのに対して、この発明にかかる自動販売機のシリアル通信における複数バイト送信処理では1回の割込みとなっており、大幅に割込み回数を削減している。
つぎに、図8のシーケンス図を参照して1バイト受信処理のデータの流れを説明する。通信部13から処理すべきデータがあることを示す割込み要求を受けると、CPU11は、現在実行している処理を中断して1バイト受信処理を実行するための割込み処理を実行する。CPU11は、受信すべきデータが設定されている通信部13の送信レジスタ1304−1〜1304−nを選択するためのコマンドをシリアルコントローラ12に設定(コマンドライト)する。CPU11は、中断した処理に戻って処理を継続する。
シリアルコントローラ12は、データを読み出す送信レジスタ1304−1〜1304−nを選択するためのコマンドをシリアルのコマンドに変換して通信部13に出力(コマンドをシリアル送信)する。通信部13は、シリアルコントローラ12から出力されたコマンドに対応する送信レジスタ1304−1〜1304−nに設定されているデータをシリアルコントローラ12に出力する。
シリアルコントローラ12は、通信部13から出力されたデータをパラレルのデータに変換して、CPU11から出力されたコマンドに対応する受信バッファ122−1〜122−nに設定(データをシリアル受信)する。シリアルコントローラ12は、受信バッファ122−1〜122−nにデータを設定した後に、受信完了の割込み要求をCPU11に出力する。CPU11は、受信完了の割込み要求によって、現在実行している処理から1バイト受信処理を実行するための割込み処理を実行する。
このようにこの発明にかかる自動販売機のシリアル通信における1バイト受信処理では、シリアルコントローラ12が通信部13の送信レジスタ1304−1〜1304−nに設定されているデータをパラレルのデータに変換して受信バッファ122−1〜122−nに設定するようにしているので、割込み回数が1回となっている。すなわち、図11のシーケンス図を参照して説明した従来の自動販売機のシリアル通信における1バイト受信処理では、通信部13からのデータをリードするために3回の割り込みが発生するのに対して、割込み回数を1/3にしている。
つぎに、図9のシーケンス図を参照して複数バイト受信処理のデータの流れを説明する。通信部13から処理すべきデータがあることを示す割込み要求を受けると、CPU11は、現在実行している処理を中断して複数バイト受信処理を実行するための割込み処理を実行する。CPU11は、受信すべきデータが設定されている通信部13の送信レジスタ1304−1〜1304−nを選択するためのコマンドに対応するシリアルコントローラ12の送信バッファ121−1〜121−nに、受信すべきデータのバイト数を設定(受信バイト数ライト)する。
シリアルコントローラ12は、データを読み出す送信レジスタ1304−1〜1304−nを選択するためのコマンドをシリアルのコマンドに変換して通信部13に出力(コマンドをシリアル送信)する。通信部13は、シリアルコントローラ12から出力されたコマンドに対応する送信レジスタ1304−1〜1304−nに設定されているデータをシリアルコントローラ12に出力する。
シリアルコントローラ12は、通信部13から出力されたデータをパラレルのデータに変換して、CPU11から出力されたコマンドに対応する受信バッファ122−1〜122−nに設定(データをシリアル受信)する。CPU11から設定された受信すべきバイト数のデータを受信バッファ122−1〜122−nに設定した後に、シリアルコントローラ12は、受信完了の割込み要求をCPU11に出力する。CPU11は、受信完了の割込み要求によって、現在実行している処理から複数バイト数受信処理を実行するための割込み処理を実行する。
このようにこの発明にかかる自動販売機のシリアル通信における複数バイト受信処理では、シリアルコントローラ12にコマンドに対応した送信バッファ121−1〜121−nを設けて、CPU11が受信すべきデータのバイト数を設定した送信バッファ121−1〜121−nに基づいてコマンドを選択して通信部13に出力するようにしているので、CPU11がコマンドを出力する必要がなくなる。
また、シリアルコントローラ12が、CPU11から設定された受信すべきバイト数のデータを通信部13から読み出してコマンドに対応する受信バッファ122−1〜122−nに設定するようにしている。
これにより、複数バイトのデータを有するデータフレームをシリアルバス5から受信した場合でも、割込み回数が1回となっている。すなわち、図14のシーケンス図を参照して説明した従来の自動販売機のシリアル通信における複数バイト受信処理では、mバイトのデータを受信する場合には「3×m」回の割り込みが発生するのに対して、この発明にかかる自動販売機のシリアル通信における複数バイト送信処理では1回の割込みとなっており、大幅に割込み回数を削減している。
以上説明したように、本実施例の自動販売機は、主制御装置および複数の従制御装置であるリモコン、金額表示機、および押釦の夫々のCPUと通信部との間に、データ送信時には、CPUから設定された送信バッファに保持されている送信データに対応するコマンドを選択して通信部に出力するとともに、送信データをシリアルのデータに変換して通信部に出力させ、送信バッファに保持されている送信データを全て通信部に出力した後に送信完了を示す割込み要求をCPUに出力し、データ受信時には、通信部が受信したデータを全て受信バッファに保持した後に受信完了を示す割込み要求をCPUに出力するシリアルコントローラを配置したので、シリアル通信の送受信時に発生するCPUへの割込み要求の回数を低減してCPUの処理負荷を軽減し、シリアル通信とは異なる処理の処理時間を短縮することができる。
また、シリアルコントローラに、コマンドに対応付けて複数の送信バッファを備えておき、CPUがコマンドに対応する送信バッファに送信データを設定し、シリアルコントローラは、送信データが設定された送信バッファを識別してコマンドを選択して通信部に出力するようにしているので、CPUがコマンドを出力する必要が無くなり、CPUのシリアル通信における処理負荷を軽減することができる。