(57)【要約】【課題】スキャナ処理、プリンタ処理を実行できる画像処理装置において、スキャナ処理とプリンタ処理でマトリクス演算回路を共有する構成で、実行している処理を中断して、優先度の高い他の処理へ動的に切り替える。【解決手段】内部にインストラクションメモリを内蔵しデータ転送のみに特化した命令セットを持つＤＭＡプロセッサ２に、スキャナ処理回路１４、プリンタ処理回路１５が接続される。共有されるマトリクス演算処理回路７は、その内部にセレクタ回路３３を持つ。そして、割り込まれる処理に含まれるマトリクス回路を用いた処理段階が完了するまで、マトリクス演算処理回路７の使用権を、割り込む側の処理に渡すことはない。また、係数マトリクスの変更も、マトリクス回路が処理を実行中は行えない。【選択図】図１
2007018450.tif 000002
【特許請求の範囲】
【請求項１】
命令メモリに記録された命令コードに従ってデータを転送可能なＤＭＡプロセッサと、
前記ＤＭＡプロセッサから入力される係数を記憶する係数記憶手段と、
入力画像データに対して、前記係数記憶手段に記憶された係数を用いてマトリクス演算を行うマトリクス処理手段とを備え、
前記ＤＭＡプロセッサは、前記マトリクス処理手段によりマトリクス演算が行われている場合には、前記係数記憶手段に記憶される係数を更新しないことを特徴とする画像処理装置。
【請求項２】
命令メモリに記録された命令コードに従ってデータを転送可能なＤＭＡプロセッサと、
マトリクス演算に用いられる係数を記憶する係数記憶手段と、
入力画像データに対して、前記係数記憶手段に記憶された係数を用いてマトリクス演算を行うマトリクス処理手段と、
前記マトリクス演算手段へのデータ入力元を選択する入力セレクタと、
前記マトリクス演算手段からのデータ出力先を選択する出力セレクタと、
前記入力セレクタにより一方の入力元が選択されている場合、該入力元に対応した出力先を、前記出力セレクタにより選択させるためのセレクタ制御手段と
を備えることを特徴とする画像処理装置。
【請求項３】
前記セレクタ制御手段は、前記入力セレクタにより一方の入力元が選択されている場合、該入力元に対応した出力先を、前記マトリクス演算部による前記入力元から入力されるデータの処理および出力が完了するまでの間、前記出力セレクタにより選択させることを特徴とする請求項２に記載の画像処理装置。
【請求項４】
命令メモリに記録された命令コードに従ってデータを転送可能なＤＭＡプロセッサと、
前記ＤＭＡプロセッサから入力される係数を記憶する係数記憶手段と、
入力画像データに対して、前記係数記憶手段に記憶された係数を用いてマトリクス演算を行うマトリクス処理手段と、
前記マトリクス演算手段へのデータ入力元を選択する入力セレクタと、
前記マトリクス演算手段からのデータ出力先を選択する出力セレクタと、
前記入力セレクタにより一方の入力元が選択されている場合、該入力元に対応した出力先を、前記マトリクス演算部による前記入力元から入力されるデータの処理および出力が完了するまでの間、前記出力セレクタにより選択させるためのセレクタ制御手段とを備え、
前記ＤＭＡプロセッサは、前記マトリクス処理手段によりマトリクス演算が行われている場合には、前記係数記憶手段に記憶される係数を更新しないことを特徴とする画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、たとえば画像処理のために用いるメモリを、スキャナ処理とプリンタ処理とで共有する画像処理装置に関する。
【背景技術】
【０００２】
複写機のように、スキャナとプリンタとを合わせ持った画像処理装置がある。この種の画像処理装置では、プリンタの画像処理を行うためのプリンタ処理部と、スキャナの画像処理を行うためのスキャナ処理部とは、いずれもマトリクス演算を行う。そこで、プリント処理ブロックと、スキャナ処理ブロックとによりマトリクス演算回路を共有することで、回路規模を縮小できる（たとえば特許文献１等参照）。
【０００３】
この画像処理装置により、スキャナ処理およびプリント処理を実行するには、マトリクス演算回路が共有されているために、画像処理順序を処理に応じて切り替える必要がある。特許文献１においては、スキャナ処理、プリント処理で画像処理順序を変更する為に、セレクタ回路が設けられている。また、マトリクス演算で用いる係数を記憶する係数記憶部も具備されている。係数記憶部にはスキャナ処理時にスキャナ処理用の係数が設定され、プリント処理時にプリント処理用の係数が設定される。
【特許文献１】特開平０９−１３０６１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
複写機等の使用に際しては、プリンタ処理中にそのプリンタ処理を中断してスキャナ処理を行う場合など、利用者の要求に応じて処理を切り替えたい場合がある。しかしながら、従来のスキャナ処理とプリンタ処理とで回路を共有した構成では、プリンタ処理中にスキャナ処理へ処理を切り替えると、プリンタ処理途中のデータが共有回路に残ってしまう。このため、スキャナ処理に切り替えた場合でも、共有回路に残されたプリンタ処理中のデータを、スキャナにより読み込まれた画像データとして処理が行われることがある。
これを防止するためには、処理の切り替え時にはプリンタ処理中のデータをリセットし、共有回路から消去する必要がある。つまり、プリンタ処理は、再開可能な中断できず、中止するしかなかった。この場合、プリンタ処理はあらためて最初からやり直すか、あるいは操作者が中止箇所を記憶しておき、その続きからプリンタ処理を行うべく操作を行わねばならなかった。
【０００５】
本発明は上記問題点を解決するためになされたもので、共有回路を二つの異なる処理のために利用する場合に、一方の処理を中断して他方の処理を実行することができる画像処理装置を提供することを目的とする。
【０００６】
さらに、処理の切り替えに際して、共有回路において実行される割り込む側の処理と割り込まれる側の処理とを明確に切り分けることができる画像処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本発明の画像処理装置は以下の構成を備える。
【０００８】
命令メモリに記録された命令コードに従ってデータを転送可能なＤＭＡプロセッサと、
前記ＤＭＡプロセッサから入力される係数を記憶する係数記憶手段と、
入力画像データに対して、前記係数記憶手段に記憶された係数を用いてマトリクス演算を行うマトリクス処理手段とを備え、
前記ＤＭＡプロセッサは、前記マトリクス処理手段によりマトリクス演算が行われている場合には、前記係数記憶手段に記憶される係数を更新しないことを特徴とする。
【０００９】
あるいは、命令メモリに記録された命令コードに従ってデータを転送可能なＤＭＡプロセッサと、
マトリクス演算に用いられる係数を記憶する係数記憶手段と、
入力画像データに対して、前記係数記憶手段に記憶された係数を用いてマトリクス演算を行うマトリクス処理手段と、
前記マトリクス演算手段へのデータ入力元を選択する入力セレクタと、
前記マトリクス演算手段からのデータ出力先を選択する出力セレクタと、
前記入力セレクタにより一方の入力元が選択されている場合、該入力元に対応した出力先を、前記出力セレクタにより選択させるためのセレクタ制御手段とを備える。
【００１０】
あるいは、命令メモリに記録された命令コードに従ってデータを転送可能なＤＭＡプロセッサと、
前記ＤＭＡプロセッサから入力される係数を記憶する係数記憶手段と、
入力画像データに対して、前記係数記憶手段に記憶された係数を用いてマトリクス演算を行うマトリクス処理手段と、
前記マトリクス演算手段へのデータ入力元を選択する入力セレクタと、
前記マトリクス演算手段からのデータ出力先を選択する出力セレクタと、
前記入力セレクタにより一方の入力元が選択されている場合、該入力元に対応した出力先を、前記マトリクス演算部による前記入力元から入力されるデータの処理および出力が完了するまでの間、前記出力セレクタにより選択させるためのセレクタ制御手段とを備え、
前記ＤＭＡプロセッサは、前記マトリクス処理手段によりマトリクス演算が行われている場合には、前記係数記憶手段に記憶される係数を更新しないことを特徴とする。
【発明の効果】
【００１１】
本発明によれば、ＤＭＡプロセッサが二つの処理それぞれのスレッドを動的に切り替え、共有回路のデータ出力先をセレクタ回路およびセレクタ回路を制御するセレクタ制御回路により切り替えることができる。また、切り替え時に、それぞれのスレッドで処理されているデータおよび処理パラメータも、各処理に同期して切り替えることが出来る。
【発明を実施するための最良の形態】
【００１２】
＜画像処理装置の構成＞
本発明における一実施形態を図面を用いて説明する。図８（Ｂ）は、画像スキャナおよびプリンタを組み合わせて構成され、スキャン、プリント、コピーという３つの動作モード（処理モード）で動作可能なディジタル複合機の構成を示すブロック図である。図８（Ｂにおいて、画像スキャナ１１０２は、ＣＣＤ等の画像センサにより原稿画像を光学的に走査して、スキャナＩＦ１１０２を介して、ディジタル画像データを制御部１１０１に入力する。プリンタ部１１０５は、制御部１１０１から出力されるディジタル画像データをプリンタＩＦ１１０４を介して受信し、画像データに基づいて、シート等の印刷媒体上に画像を形成する。操作部１１０６は利用者に対する画面やキーボード等のユーザインターフェースを提供し、利用者によりたとえばスキャン、プリント、コピーといった処理モードが入力される。なおこれらの動作モードは、ネットワークインターフェース（不図示）を介して他の端末等から入力することもできる。制御部１１０１は、入力された処理モードに応じて画像スキャナ１１０１およびプリンタ１１０５を制御する。処理モードがスキャンモードであれば、画像スキャナ１１０２によって画像を読み取り、読み取った画像に対して一定の入力画像処理を施した後に、メモリの与えられたアドレスにその画像データを保存する。また、プリントモードであれば、入力された画像データに対して一定の出力画像処理を施した後、プリンタ１１０５によりその画像データに基づく画像を出力させる。コピーモードであれば、画像スキャナ１１０２によって画像を読み取り、読み取った画像に対して一定の入力画像処理を施す。その後に、さらにその画像データに対して一定の出力画像処理を施す。さらにその後、プリンタ１１０５によりその画像データに基づく画像を、指定された部数出力させる。それら画像処理のために、制御部１１０１には画像処理部１６が内蔵されている。
【００１３】
図１は本発明に係る画像処理部１６の構成の一例を示した図である。図１で示しているように、スキャナシステム（入力画像処理部）１４はシェーディング回路９、ガンマ補正回路１０、ＭＴＦ回路１１を備え、それら回路により画像データの処理を行う。ＭＴＦ回路１１は、読取速度や変倍率によって読取のＭＴＦ（変調伝達関数）が変るため、その変化を補正するための回路である。プリントシステム（出力画像処理部）１５は、γ補正回路１２、誤差拡散処理回路１３を備え、それら回路により画像データの処理を行う。ここで、マスキング処理部１７は、スキャナシステム１４とプリントシステム１５で共有されている。マスキング処理部１７は、マスキング処理回路７、入力セレクタ３８、出力セレクタ３７、セレクタ制御回路３３を含む。マスキング処理回路７は、入力画像処理（スキャン処理）においては、ＣＣＤ等の光電変換素子の分光特性及び光源および反射傘の分光特性を補正する処理を行う。また、出力画像処理（プリント処理）においては、ＹＭＣ表色系のカラー画像データを、プリントに用いるトナーやインク特性に応じて色変換する処理などを行う。いずれにしても係数マトリクスと画像データとの行列演算を行うことで、それらの入力マスキング処理や出力マスキング処理を行うことができる。係数記憶部８は、マスキング処理回路７で使用する係数を記憶する。
【００１４】
プロセッサ１は、ＤＭＡプロセッサインターフェース６を通してＤＭＡプロセッサ２が読み込むインストラクションメモリ２１を書き換えることができる。インストラクションメモリ２１は書き替え可能なメモリであり、ＤＭＡプロセッサ２が解釈実行可能なプログラムが格納される。
【００１５】
ＤＭＡプロセッサインターフェース６はＤＭＡプロセッサ２と接続されている。また、ＤＭＡプロセッサインターフェース６はアドレスバスおよびデータバス経由でプロセッサ１から読み書き可能なレジスタ６１を持つ。プロセッサ１はこのレジスタ６１を書き換えることによってＤＭＡプロセッサ２のリセット状態の制御およびＤＭＡプロセッサ２内のインストラクションメモリ２１の書き換えを行うことができる。
【００１６】
ＤＭＡプロセッサ２は、アドレスバスおよびデータバスに接続されているローカルメモリ３と、メモリコントローラ４を介して接続されたメインメモリ５との間のデータ転送を行う。さらにＤＭＡプロセッサ２は、内部のインストラクションメモリ２１に保持している命令列を読み込み、それを解釈し実行する。インストラクションメモリ２１は３２ビットを１ワードとし、１２８ワードの命令列を格納することができる。個々のワードには０〜１２７のアドレスが割り振られており、基本的には０番地から順に命令列を実行する。
【００１７】
また、ＤＭＡプロセッサ２には出力ポート、入力ポートが複数あり、外部の回路へデータを出力したり、データを入力したりすることができる。図１の構成では、ＤＭＡプロセッサ２の入出力ポートは、シェーディング回路９、γ補正回路１０、ＭＴＦ回路１１、係数記憶部８、マスキング処理回路７、γ補正回路１２、誤差拡散処理回路１３と接続している。
【００１８】
具体的なＤＭＡプロセッサ２と画像処理回路１６との接続は図８（Ａ）のようになっている。メモリコントローラ４はアドレスバス及びデータバスからメインメモリ５にアクセスするための制御を行う。プロセッサ１、ＤＭＡプロセッサ２、ローカルメモリ３、メモリコントローラ４はそれぞれクロスバー接続されている。プロセッサ１とＤＭＡプロセッサ２とはＤＭＡプロセッサインターフェース６を介して接続されており、ＤＭＡプロセッサ２には画像処理モジュール１６が図４のように接続されている。プロセッサ１およびＤＭＡプロセッサ２のデータバスおよびアドレスバスはクロスバースイッチ１００を介してローカルメモリ３とメモリコントローラ４を介してメインメモリ５とに接続されている。この構成により、ＤＭＡプロセッサ２は、メインメモリ５またはローカルメモリ３に格納された画像データを画像処理モジュール１６に転送して各種の画像処理を施させ、処理後の画像データを再びメインメモリ５またはローカルメモリ３に保存することができる。またプロセッサ１もローカルメモリ３またはメインメモリ５にアクセスでき、画像処理に供する画像データをローカルメモリ３またはメインメモリ５に格納したり、あるいは画像処理後の画像データにアクセスすることができる。
【００１９】
図５はプロセッサ１及びＤＭＡプロセッサ２において有効なメモリのアドレスマップである。プロセッサ１及びＤＭＡプロセッサ２のアドレス空間には、ＲＯＭ領域５１、ＤＭＡプロセサインターフェース６のレジスタ６１、ローカルメモリ３，メインメモリ５がマッピングされている。ローカルメモリ３は、低レイテンシでアクセス可能であるが小容量のＳＲＡＭで構成されている。メインメモリ５は、アクセスには多くのレイテンシを必要とするが容量を大きくすることが可能なＤＲＡＭで構成されている。ＤＭＡプロセッサインターフェース６はプロセッサ１から読み書き可能なレジスタである。ＲＯＭ領域５１は、プロセッサ１のブート、及びプログラム格納用になっている。メインメモリ５には本実施形態で用いる入力画像処理用の係数マトリクスおよび出力画像処理用の係数マトリクスを含み、いずれかを選択的に読み出し可能に構成された係数記憶領域３０１が確保されている。なお、係数マトリクスが固定的に与えられる場合には、係数記憶領域３０１はＲＯＭ３１に設けても良い。
【００２０】
図６は、プロセッサ１からアクセス可能なＤＭＡプロセッサインターフェースのレジスタ６１のレジスタマップである。０ｘｅ０００００００番地（先頭の０ｘは１６進表記であることを意味する。以下同じ。）はリセットレジスタである。リセットレジスタに１を書き込むとＤＭＡプロセッサ２がリセット状態となり、０を書き込むとリセット解除状態となる。初期値は１である。０ｘｅ００００００４番地はトリガエミットレジスタである。トリガエミットレジスタに１を書き込むとＤＭＡプロセッサ２に対してトリガイベントを発生させることができる。ＤＭＡプロセッサ２はこのトリガイベントを専用の命令を実行することによって検知することができる。０ｘｅ００００００８番地はトリガステータスレジスタである。０ｘｅ００００００ｃ番地はモードレジスタである。モードレジスタに１を書き込むと、ＤＭＡプロセッサ２が停止状態となり、インストラクションメモリ２１を書き換え可能となる。０ｘｅ０００００１０番地はＩＭＥＭアドレスレジスタである。ＤＭＡプロセッサ２が停止状態にあってインストラクションメモリ２１を書き換え可能なときに、インストラクションメモリ２１の書き換え対象のアドレスをＩＭＥＭアドレスレジスタに書き込むことで、書き換え対象のアドレスが指定される。０ｘｅ０００００１４番地はＩＭＥＭデータレジスタである。ＤＭＡプロセッサ２が停止状態にあってインストラクションメモリ２１を書き換え可能なときに、ＩＭＥＭデータレジスタに値を書き込む。こうすることで、書き込まれた値を、ＩＭＥＭアドレスレジスタで指定されたインストラクションメモリ２１の番地にＤＭＡプロセッサ２の命令として書き込むことができる。このようにして、プロセッサ１はＤＭＡプロセッサインターフェース６のレジスタの値を書き換えることにより、ＤＭＡプロセッサ２の命令を入れ替えることができる。この様な構成を備えることで、ＤＭＡプロセッサ２により実行される命令コードを格納したインストラクションメモリ２１の内容を、プロセッサ１により動的に書き替えることができる。
【００２１】
＜マスキング処理＞
カラー画像データのスキャナ時に行うマスキング処理（入力マスキング処理）の内容を図７（Ａ）に示す。図７（Ａ）において、Ｒ，Ｇ，Ｂは読み取ったカラー画像データを表し、Ｒ′，Ｇ′，Ｂ′はマスキング処理後のカラー画像データを示している。また、Ａ１１，Ａ１２，Ａ１３，Ａ２１，Ａ２２，Ａ２３，Ａ３１，Ａ３２，Ａ３３は３×３の係数マトリクスであり、読み取った画像データとの積和演算に用いられる。つまり、原稿のカラー画像データ（輝度データ）Ｒ，Ｇ，Ｂと前記３×３のマトリクス演算によってマスキング後のカラー画像データＲ′，Ｇ′，Ｂ′を得る。
【００２２】
また、カラー画像データのプリント時に行うマスキング処理（出力マスキング処理）の内容を図７（Ｂ）に示す。図７（Ｂ）において、Ｃ，Ｍ，Ｙは輝度濃度変換後のカラー画像データであり、Ｃ′，Ｍ′，Ｙ′はマスキング処理後のカラー画像データを示している。また、Ｂ１１，Ｂ１２，Ｂ１３，Ｂ２１，Ｂ２２，Ｂ２３，Ｂ３１，Ｂ３２，Ｂ３３は３×３の係数である。つまり、輝度濃度変換後のカラー画像データ（濃度データ）と前記３×３係数によるマトリクス演算によって、濃度のカラー画像データのインク特性を考慮したマスキング処理後のカラー画像データＣ′，Ｍ′，Ｙ′を得ることが出来る。
【００２３】
ここで、係数記憶部８には、スキャナ処理時（すなわちスキャン処理モードの場合）には、Ａ１１，Ａ１２，Ａ１３，Ａ２１，Ａ２２，Ａ２３，Ａ３１，Ａ３２，Ａ３３から成る係数マトリクス５０１が設定（格納）される。プリント処理時（すなわちプリント処理モードの場合）には、Ｂ１１，Ｂ１２，Ｂ１３，Ｂ２１，Ｂ２２，Ｂ２３，Ｂ３１，Ｂ３２，Ｂ３３から成る係数マトリクス５０２が設定（格納）される。コピー処理時（すなわちコピー処理モードの場合）には、スキャナ処理前にＡ１１，Ａ１２，Ａ１３，Ａ２１，Ａ２２，Ａ２３，Ａ３１，Ａ３２，Ａ３３の係数を設定（格納）する。スキャナ処理後にはＢ１１，Ｂ１２，Ｂ１３，Ｂ２１，Ｂ２２，Ｂ２３，Ｂ３１，Ｂ３２，Ｂ３３の係数を設定してプリント処理を行う。マスキング回路７は、係数記憶部８に記憶された係数マトリクスを用いて行列演算を実行する。
【００２４】
マスキング処理回路７は、スキャナシステム１４とプリントシステム１５とで共有している。そのため、スキャナ処理が行われる時は係数記憶部８にスキャナ処理用の係数を設定してから、たとえばシェーディング回路９、マスキング処理回路７、γ補正回路１０、ＭＴＦ回路１１の順番で画像データの処理を行う。プリンタ処理を行う場合には、係数記憶部８にプリント処理用の係数を設定してから、マスキング処理回路７、γ補正回路１２、誤差拡散処理回路１３の順番に画像データの処理を行う。このように、処理モードに応じてデータパスの切り替えを行うことにより、マスキング処理回路７の共有を実現することができる。
【００２５】
＜画像処理全体の手順＞
上述の通り、処理モードには、スキャナ処理モード、プリント処理モード、コピー処理モードの３通りのモードがある。プロセッサ１は図９のようなフローチャートに従う処理を実行する。図９のように、プロセッサ１がスキャナ処理、プリント処理、コピー処理の中から実行する処理モードを判断し、ＤＭＡプロセッサ２のインストラクションメモリに命令を書き込む。このようにして、処理に応じて命令を切り替える。ＤＭＡプロセッサ２は書き込まれたインストラクションメモリから命令を読み込み実行する。
【００２６】
図２５に図８（Ｂ）の画像処理装置における処理手順の概略を示す。操作部１１０６から、あるいは不図示のネットワークインターフェースから処理開始の指示が与えられると図２５の手順が制御部１１０１、具体的にはプロセッサ１により実行される。この手順はメインメモリ５などに格納されたプログラムの実行により実現される。
【００２７】
まず、処理内容がスキャン又はコピーか、それともそれらのいずれでもないか（すなわちプリントか）が判定される（ステップＳ２５１１）。プリントであれば、入力インターフェースからプリント対象の画像データが制御部１１０１に入力される（ステップＳ２５１３）。スキャン又はコピーであれば、画像スキャナ１１０２が駆動されて画像データが読み取られて制御部１１０１に入力される（ステップＳ２５１２）。
【００２８】
入力された画像データはメインメモリ５に保存されて（ステップＳ２５１４）、画像処理部１６によるデータ処理（画像処理）が実行される（ステップＳ２５１６）。
【００２９】
データ処理が終了すると、指定された処理内容がプリント又はコピーか、それともスキャンか判定される（ステップＳ２５１７）。スキャンであれば、出力インターフェース（不図示）から画像処理後の画像データを出力するか、あるいはメモリやハードディスク等に保存しておく。指定された処理がプリント又はコピーであれば、処理後の画像データをプリンタ１１０５に送信して印刷を行わせる（ステップＳ２５１８）。
【００３０】
図９に、ステップＳ２５１６の詳細を示す。ステップＳ２５１６におけるデータ処理は、処理モードに応じて行われる。処理モードには、スキャナ処理モード、プリント処理モード、コピー処理モードの３通りのモードが考えられる。それぞれの処理を実行する為に、プロセッサ１は図９のような処理順序のフローチャートになる。図９において、プロセッサ１は、処理モードがスキャナ処理か（ステップＳ６０１）、プリント処理か（ステップＳ６０２）判定し、いずれでもなければコピー処理と判定する。こうして処理モードを判断して、ＤＭＡプロセッサ２が読み込むインストラクションメモリに、各処理モードにおいてＤＭＡプロセッサ２が実行すべき命令を書き込む（ステップＳ６０３〜Ｓ６０５）。このようにして、処理に応じて命令を切り替える。ＤＭＡプロセッサ２は設定されたインストラクションメモリから命令を読み込む。ＤＭＡプロセッサ２はスキャナ処理の場合には図１０、プリント処理の場合には図１１のような処理手順で動作する。なお、処理モードは、操作部１１０６やあるいは不図示のインターフェースから入力された処理モードを示す値に基づいて判定できる。
【００３１】
図１０より、スキャナ処理モードの処理順序は、係数記憶部８にスキャナ処理用の係数を設定してから、シェーディング回路９、マスキング処理回路７、γ補正回路１０、ＭＴＦ回路１１の順番で処理を行うことが示されている。図１１より、プリント処理モードの処理順序は、係数記憶部８にプリント処理用の係数を設定してから、マスキング処理回路７、γ補正回路１２、誤差拡散処理回路１３の順番に処理を行うことが示されている。
【００３２】
図１０は、スキャナ処理モードの場合に画像処理部１６により実行される処理（Ｓ２５１６）の手順を示す。最初に、係数記憶部８にスキャナ処理用のマスキング係数を設定する（ステップＳ１２０１）。このマスキング係数はローカルメモリの係数記憶領域から読み出される。そして、画像が格納されているメインメモリ５から、データを順次シェーディング回路９へデータを転送する（ステップＳ１２２１）。シェーディング回路９、マスキング処理回路７、γ補正回路１０、ＭＴＦ回路１１の順番にデータを渡して処理させ（ステップＳ１２２２〜Ｓ１２２４）、最終的にメインメモリ５へデータを転送する（ステップＳ１２３０）。ここでステップＳ１２２１〜Ｓ１２２４は、画像処理部１６により行われる。ステップＳ１２１０、Ｓ１２３０はＤＭＡプロセサ２によって行われる。
【００３３】
図１１は、プリント処理モードの場合に画像処理部１６により実行される処理（Ｓ２５１６）の手順を示す。最初に、係数記憶部８にプリント処理用のマトリクス係数を設定する（ステップＳ１３１０）。次に、画像が格納されたメインメモリ５からデータを順次、マスキング処理回路７へデータを転送する（ステップＳ１３２１）。マスキング処理回路７、γ補正回路１２、誤差拡散処理回路１３の順番に処理した後に、最終的にメインメモリ５へデータを転送する（ステップＳ１３２２〜Ｓ１３２３）。最後に処理済みの画像データをメモリに保存する（ステップＳ１３３０）。ここでステップＳ１３２１〜Ｓ１３２３は、画像処理部１６により行われる。ステップＳ１３１０、Ｓ１３３０はＤＭＡプロセサ２によって行われる。
【００３４】
ここで、ある画像データのために図２５のステップＳ２５１６が実行されている場合に、それを中断して、それと異なる画像データのためのステップＳ２５１６の処理を実行することも必要となる。たとえば、プリンタシステム１５によるプリンタ用画像処理中に、スキャナシステム１４によるスキャナ用画像処理が割り込み的に優先して実行される場合もある。図１０，１１で説明すると、図１１のステップＳ１３２０実行中に、図１０の処理が割り込み実行される。以下、本実施形態では、プリント処理中にその処理を中断して、スキャナ処理を行い、スキャナ処理終了後にプリント処理を再開する方法について説明する。
【００３５】
＜マルチスレッドによるＤＭＡ処理＞
このような優先処理を実施する為には、ＤＭＡプロセッサ２がスキャナ処理を行うスレッドとプリント処理を行うスレッドを用意しておく。そして、スキャナスレッドが処理している間にプリントスレッドを停止させ、処理が終わったら停止していたプリントスレッドを再開させることが必要である。しかし、スレッドの停止と再開のみでプリント処理からスキャナ処理に切り替えると、マスキング処理回路７は、プリント処理したデータを、スキャナ処理したデータとして出力してしまう。そこで、共有回路であるマスキング処理回路７にデータの出力先を切り替えるセレクタ回路を構成する必要がある。また、マスキング処理回路７でプリント処理中に、プリント処理からスキャナ処理に動的に切り替えると、プリント処理用係数がスキャナ処理用係数に切り替わってしまうことがある。そこで、係数記憶部８はマスキング処理回路７で処理中に係数が切り替わらないようにする必要がある。本実施形態では、一方のスレッドを停止させてその後再開する方法と、共有されるマスキング処理回路７の出力先をセレクタ制御回路によって切り替えるセレクタ回路とを説明する。さらに、係数記憶部８に記憶された係数が処理中に切り替わらないようにする手法についても説明する。
【００３６】
プリント処理とスキャナ処理を動的に切り替える為に、ＤＭＡプロセッサ２が二つのスレッドの命令を交互に実行する。例えば、スキャナ処理用のスレッド、プリンタ処理用のスレッドを用意し、スキャナ処理とプリント処理を交互に実行していく。つまり、図２のように、スレッド１の命令１−１、スレッド２の命令２−１、スレッド１命令１−２、スレッド２の命令２−２、という具合に各スレッドの命令を交互に実行していく。この複数スレッドを使うプログラムには、図３の機能がある。つまり、スレッド２の命令を実行してスレッド１を停止させ、スレッド２の処理が終了すると、その最後に、停止させていたスレッド１の命令を再開させる。つまり、スレッド１の命令１−１を実行した後に、スレッド２においてスレッド１をサスペンドするサスペンド（ｓｕｓｐｅｎｄ）命令１５０１を実行する。そうすると、スレッド１の処理は中断する。その間に、スレッド２の命令２−１から命令２−３までを行う。その最後に、スレッド１を再開させるレジューム（ｒｅｓｕｍｅ）命令１５０２を実行する。それによって、スレッド１は処理を再開し、命令１−２から処理を順番に実行していく。スレッド２は自分のスレッドが終了する命令を実行する。このことにより、スレッド２は消える。
【００３７】
また、プロセッサ１はＤＭＡプロセッサインタフェース６のトリガエミットレジスタに値を書き込むことにより、何種類かのトリガ信号を発生させることができる。ＤＭＡプロセッサ２は種類ごとにトリガ信号を検知することができる。ＤＭＡプロセッサ２にはトリガ信号を検知するまで待つ命令が定義されている。その命令を各スレッドで実行することで、各スレッドはトリガ信号が来るまでは動作を停止している。このことから、プロセッサ１の判断によって、スレッドごとに命令実行の開始時間を変えることができる。このようすを図１２に示す。
【００３８】
ここで、これらの機能を合わせると図１３のようにスレッドを制御することができる。図１３では、スレッド２の、トリガ信号を待機するためのウエイトトリガ（ｗａｉｔｔｒｉｇｇｅｒ）命令１６０１をＤＭＡプロセッサ２が実行することで、スレッド２はトリガ信号が検知されるまで停止（ウエイトトリガ命令を繰返し実行）している。その間に、ＤＭＡプロセッサ２はスレッド１の命令１−１から命令１−３の処理を行う。ここで、ＤＭＡプロセッサ２はトリガ信号１６０２を検知するとスレッド２の処理を開始する。ウエイトトリガ命令の次の命令はサスペンド命令なので、それを実行することでスレッド１を停止させる。その間に、ＤＭＡプロセッサ２はスレッド２の処理を命令２−１から行う。スレッド２の処理の最後はレジューム命令１６０３なので、それを実行することで停止させていたスレッド１の実行を再開させる。ＤＭＡプロセッサ２は、中断直後のスレッド１の命令１−４から順番に処理していく。一方スレッド２においては、スレッドが終了する命令を実行する。このことにより、スレッド２は消える。
【００３９】
＜スキャナ処理を優先した画像処理の一例＞
このように、プリント処理とスキャナ処理を動的に切り替えることができる。本実施形態では前述したとおり、プリント処理とスキャナ処理を動的に切り替えることができる。そのスキャナ処理を優先した処理手順の例を図１４に示す。プリント処理スレッドはトリガ１を待ち、スキャナ処理スレッドはトリガ２を待って実行開始される。プロセッサ１はＤＭＡプロセッサインタフェース６を操作してトリガ１を発生させる。ＤＭＡプロセッサ２はトリガ１を検知して、プリント処理を開始する。まず、係数記憶部８にプリント処理用係数を設定する（ステップＳ２３０１）。その後、プリント処理を実行していく（ステップＳ２３２０）。ここで、スキャナ処理へ動的に切り替える場合には、プロセッサ１はＤＭＡプロセッサインタフェース６を操作して、トリガ２を発生させる。ＤＭＡプロセッサ２はトリガ２を検知する。検知したらスキャナ処理のスレッドが起動し、サスペンド処理を実行してプリント処理スレッドを停止させる（ステップＳ２３１０）。スキャナ処理スレッドがプリント処理を中断させると、スキャナ処理スレッドの命令が実行されていく。まず、ＤＭＡプロセッサ２は、係数記憶部８にスキャナ処理用係数を設定する（ステップＳ２３１１）。その後、画像処理部１６を用いたスキャナ処理を実行していく（ステップＳ２３１２）。スキャナ処理が終了したら、係数記憶部８にプリント処理用係数を再設定する（ステップＳ２３１４）。再設定後に、ＤＭＡプロセッサ２はレジューム命令を実行して停止していたプリント処理スレッドを再開させる。このことにより、プリント処理が再開する。
【００４０】
一方、プリンタスレッドはステップＳ２３０２で中断し、ステップＳ２３０３から再開される。
【００４１】
なお、本実施形態においては、画像処理モジュール１６はパイプライン化されていない。画像処理モジュールは決められた量の画素データを受信して処理し、決められた量の画素データを受信する。
【００４２】
具体的なＭＭＡプロセッサ２のプログラムを図２３に示す。図中プログラムの「；」以降はコメント文である。ここで、プログラムにおけるｏｕｔは外部の画像処理回路と接続しているＤＭＡプロセッサ２の出力ポートのレジスタ番号で、ｉｎは逆に外部の画像処理回路と接続している入力ポートのレジスタ番号である。具体的には図４のように、ｏｕｔ０はγ補正回路１０、ｏｕｔ１はＭＴＦ回路１１と、ｏｕｔ２はシェーディング回路９と、ｏｕｔ３は係数記憶部８と、ｏｕｔ４はマスキング処理回路７と、ｏｕｔ５は誤差拡散回路１３と接続されている。また、ｉｎ０はγ補正回路１０と、ｉｎ１はＭＴＦ回路１１と、ｉｎ２はマスキング処理回路７と、ｉｎ３はγ補正回路１２と、ｉｎ４は誤差拡散回路１３と接続されている。
【００４３】
たとえば、以下のような命令の場合には、γ補正回路１０にｇｐｒ０レジスタの値が転送されることになる：
move gpr0 out0 ；out0レジスタ←gpr0レジスタ、すなわちγ補正回路１０へデータ転送。
【００４４】
また以下のような命令の場合には、γ補正回路１０から出力されたデータがｇｐｒ０レジスタへ転送されることになる：
move in0 gpr0 ；gpr0レジスタ←in0 レジスタ、すなわちγ補正回路１０からデータ受信。
【００４５】
プログラムにおけるａｒはアドレスレジスタを表している。例えばａｒ０は、０番目のアドレスレジスタで、ａｒ１は１番目のアドレスレジスタである。また、次の命令のように、ａｒ０［０］に０ｘ３０が代入されると、ａｒ０＝０ｘ００００００３０となる。ただし、アドレスは、バイトアドレスで示してある。
load  0x30  ar0[0]   ;ar0 レジスタ←0x00000030；
以下の命令の場合は、ar0[1]に0x30が代入されるので、ar0=0x00003000となる。
load  0x30  ar0[1]   ;ar0 レジスタ←0x00003000；
以下の命令の場合は、ar0[2]に0x30が代入されるので、ar0=0x00300000となる。
load  0x30  ar0[2]   ;ar0 レジスタ←0x00300000；
以下の命令の場合は、ar0[3]に0x30が代入されるので、ar0=0x30000000となる。
load  0x30  ar0[3]   ;ar0 レジスタ←0x30000000；
以上を踏まえると図２３のプログラムは、以下のような動作になる。まず、クリア命令でアドレスレジスタであるａｒ０の値をクリアする（Ｓ２４０１）。
clr   ar0 ;ａｒ０の値をクリアする  スキャナ処理用の画像が展開されるアドレス；
次にロード命令で、アドレスレジスタにスキャナ処理用の画像が格納されているメインメモリのアドレス値を代入する（Ｓ２４０２）。
load  0x30  ar0[3]   ;ａｒ０レジスタ←0x30000000。
【００４６】
同じように、レジスタａｒ１をスキャナ処理した画像を出力するアドレス、ａｒ２をスキャナ処理用係数を展開するアドレス、ａｒ３をプリント処理用係数を展開するアドレスに設定する。また、ａｒ４をプリント処理用の画像が展開されるアドレス、ａｒ５をプリント処理した画像を出力するアドレスにそれぞれ設定していく（Ｓ２４０３）。
【００４７】
次に以下の命令で、プリントスレッドとスキャナスレッドを設定する（Ｓ２４０４）。
load  printer  pc1  ; プリントスレッドの設定(0b0001に設定)；
load  scanner  pc2   ;スキャナスレッドの設定(0b0010に設定)；
これは、ｐｒｉｎｔｅｒ、ｓｃａｎｎｅｒというラベルがついたスレッドを、０ｂ０００１と０ｂ００１０という番号に設定している。この二つのスレッドは、交互に実行される。次の命令でスレッドが有効化される（Ｓ２４０５）。
enable  0b0010 ；スレッドの有効化。
【００４８】
次の記述は、スキャナスレッドとプリントスレッドのラベルである。このラベルから、スレッドが始まる。
scanner:  ；スキャナスレッド；
printer:  ；プリントスレッド。
【００４９】
＜スキャナスレッド＞
ここで、スキャナスレッドとプリントスレッドの動作についてそれぞれ説明する。最初にスキャナスレッドについて述べる。まず、ウエイト命令で、トリガ信号が検知されるまで待つ。つまり、プリント処理中にはプロセッサ１から指示があるまで、待機している（Ｓ２４０６）。
wait   E0b10   ;プロセッサからのtriggerイベントが来るまで停止。
【００５０】
次にプロセッサ１からスキャナ処理をするように指示があった場合には、プリント処理を停止させる必要がある。以下の命令で、プリントスレッドの動作を停止させる（Ｓ２４０７）。0b0001はプリントスレッドの番号である。
suspend  0b0001  ;プリントスレッドを停止する。
【００５１】
このようにしてプリント処理を停止させて、スキャナ処理を実行していく。ここで、ａｒ２レジスタはスキャナ処理用のマスキング処理を行う係数が格納されているアドレス値である。下記の命令で、係数を係数記憶部８へ転送する。ここで、loopはループ命令で、loop_endというラベルまでの命令を３回行う（Ｓ２４０８）。係数は１回で転送しきれないので、３回にわけて転送している。
loop 0 3 loop_end  ;係数記憶部8にマトリクス処理で用いる係数を設定する；
load (ar2,8)+ gpr0 ;gpr0レジスタ= ar2レジスタ値番地内容/ar2レジスタに８加算；
move gpr0 out3 ;out3 レジスタ= gpr0 レジスタ/係数記憶部8へデータ転送；
loop_end: ；ループのラベル。
【００５２】
ａｒ０レジスタは、画像が格納されているメインメモリのアドレス値である。以下の命令で、メインメモリ５から、シェーディング回路９へデータを転送する（Ｓ２４０９）。なお、本例では、処理対象の画像データは２８８×４６画素であるので、ステップＳ２４０９〜Ｓ２４１４までの処理は２８８×４６回繰り返される。
load (ar0,8)+ gpr0 ;gpr0レジスタ= ar0レジスタ値番地内容/ar0レジスタに８加算；
move gpr0 out2 ;out2 レジスタ= gpr0 レジスタ/シェーディング回路９へデータ転送。
【００５３】
次に以下の命令で、マスキング処理回路７からデータを受け取る（Ｓ２４１０）。
move in2 gpr0 ; gpr0 レジスタ= in0 レジスタ/シェーディング回路９からデータ受信；
次に以下の命令で、γ補正回路１０へデータを転送する（Ｓ２４１１）。
move gpr0 out0 ;out1 レジスタ＝gpr0レジスタ/γ補正回路10へデータ転送；
次の命令で、γ補正回路１０からデータを受信してから、ＭＴＦ回路１１へデータを転送する（Ｓ２４１２）。
move in0 gpr0  ; gpr0 レジスタ= in0 レジスタ/γ補正回路１０からデータ受信；
move gpr0 out1  ;out1レジスタ＝gpr0レジスタ/ＭＴＦ回路１１へデータ転送。
【００５４】
次に以下の命令でＭＴＦ回路１１からデータを受け取る（Ｓ２４１３）。
move in1 gpr0  ; gpr0 レジスタ= in1レジスタ/ＭＴＦ回路１１からデータ受信；
最終的に、以下の命令でメインメモリ5へデータを転送する（Ｓ２４１４）。
store gpr0 (ar1,8)+  ; ar1レジスタ値番地内容= gpr0レジスタ/ ar1レジスタに８加算。
【００５５】
このような処理を繰り返してスキャナ処理を実行していく。スキャナ処理が終わったら、今度はプリント処理を再開しなければならない。しかし、係数記憶部にはスキャナ処理用の係数が残っているので、次の命令でプリント処理用の係数に切り替える（Ｓ２４１５）。
loop 0 3 loop_end  ;係数記憶部８にマスキング処理で用いる係数を設定する；
load (ar3,8)+  gpr0 ;gpr0レジスタ= ar3レジスタ値番地内容/ar3レジスタに８加算；
move gpr0 out3 ;out3 レジスタ= gpr0 レジスタ/係数記憶部８へデータ転送；
loop_end: ；ループのラベル；
load (ar3,-24)+  gpr0 ; ar3 レジスタ=0x32000000にする；
ここで、プリント処理を再開する為に、以下の命令を実行する（Ｓ２４１６）。
resume  0b0001   ;プリントスレッドを再開させる。
【００５６】
最後に、以下の命令でスキャナ処理を終了する（Ｓ２４１７）。0b0010はスキャナスレッドの番号である。
disable 0b0010  ；スキャナスレッドを終了させる。
【００５７】
＜プリンタスレッド＞
次にプリントスレッドについて説明する。まず、次の命令で、トリガ信号が検知されるまで待つ（Ｓ２４１８）。
wait E0b01 ; trigger イベントが来るまで停止；
ａｒ３レジスタはプリント処理用のマスキング処理を行う係数が格納されているアドレス値である。以下の命令で、係数を係数記憶部８へ転送する（Ｓ２４１９）。
loop  0   3   loop_end  ;係数記憶部8にマスキング処理で用いる係数を設定する；
load (ar3,8)+  gpr0    ;gpr0レジスタ= ar3レジスタ値番地内容/ar3レジスタに８加算；
move  gpr0   out3   ;out3 レジスタ= gpr0 レジスタ/係数記憶部8へデータ転送；
loop_end:   ；ループのラベル。
【００５８】
ここで、レジスタａｒ３の値は初期値より２４進んでいるので、以下の命令で初期値に戻す（Ｓ２４２０）。
load (ar3,-24)+  gpr0    ; ar3 レジスタ=0x32000000にする。
【００５９】
次の命令で、メインメモリ５からマスキング処理回路７へデータを転送する（Ｓ２４２１）。
load (ar4,8)+  gpr0 ;gpr0レジスタ= ar4レジスタ値番地内容/ar0レジスタに８加算；
move gpr0 out4 ;out4 レジスタ＝gpr0レジスタ/マスキング処理回路7へデータ転送。
【００６０】
次の命令で、γ補正回路１２からデータを受信する（Ｓ２４２２）。
move  in3      gpr0 ; gpr0 レジスタ= in3 レジスタ/γ補正回路12からデータ受信。
以下の命令で、誤差拡散回路１３へデータを転送する（Ｓ２４２３）。
move  gpr0   out5  ;out5 レジスタ= gpr0 レジスタ/誤差拡散回路13へデータ転送；
次の命令で、誤差拡散回路１３からデータを受信する（Ｓ２４２４）。
move  in4    gpr0 ; gpr0 レジスタ= in4レジスタ/誤差拡散回路13からデータ受信；
最終的に誤差拡散回路13からのデータをメインメモリ5へ転送する（Ｓ２４２５）。
store gpr0   (ar5,8)+  ; ar5レジスタ値番地内容= gpr0レジスタ/ ar5レジスタに８加算。
【００６１】
なお、本例では、処理対象の画像データは２８８×４６画素であるので、ステップＳ２４２１〜Ｓ２４２５までの処理は２８８×４６回繰り返される。
【００６２】
以上の手順によりＤＭＡプロセッサ２を用いた構成によりローカルメモリを共有することができ、プリンタ処理中にプリンタ処理を中断してスキャナ処理に切り替えることができる。また、スキャナ処理が終了したなら、プリンタ処理に復帰することができる。
【００６３】
＜処理切り替え時のデータ転送＞
次に、共有するマスキング処理回路における動的切り替え時のデータ転送について説明する。シェーディング回路９、係数記憶部８、マスキング処理回路７、γ補正回路１２、ＤＭＡプロセッサ２は図１５のように接続されている。ここで、ＤＭＡプロセッサ２と外部にある画像処理回路４４とのデータ転送プロトコルを、図１６で説明する。画像処理回路４４とは画像処理モジュール１６に含まれる個々の回路ユニットを一般化したものである。たとえば、γ補正回路１０や誤差拡散回路１３等が画像処理回路４４に該当する。
【００６４】
ＤＭＡプロセッサ２から画像処理回路４４にデータを転送する場合は、図１７のタイミングチャート（上半分）のようになる。まず画像処理回路４４からリクエスト信号を出力ポートのｒｅｑ＿ｏｕｔ４０に出力し、それを見てＤＭＡプロセッサ２はデータをｄａｔａ＿ｏｕｔ３９から、ａｃｋ信号をａｃｋ＿ｏｕｔ３８から出力する。逆に、画像処理回路４４からＤＭＡプロセッサ２へデータを転送する場合も、図１７のタイミングチャート（下半分）のようになる。まず画像処理回路４４からリクエスト信号をｒｅｑ＿ｉｎ４３に出力し、ＤＭＡプロセッサ２はｒｅｑ＿ｉｎ４３でリクエスト信号がアサートされているとデータをｄａｔａ＿ｉｎ４２から受信し、ａｃｋ＿ｉｎ４１からａｃｋ信号を返す。リクエスト信号は、画像処理回路４４で処理中にはネゲートされていて、その間にＤＭＡプロセッサ２はデータを送受信することはできない。しかし、画像処理回路４４が処理していない間は、常にアサートされている。ここで、図１５において、リクエスト信号は信号ｒｅｑ＿ｓｈｄ２０、ｒｅｑ＿ｋｅｉ２３、ｒｅｑ＿１（２６）、ｒｅｑ＿２（２９）、ｒｅｑ＿ｇａｍ３２で受信する。ａｃｋ信号は、信号ａｃｋ＿ｓｈｄ１８、ａｃｋ＿ｋｅｉ２１、ａｃｋ＿１（２４）、ａｃｋ＿２（２７）、ａｃｋ＿ｇａｍ３０から出力される。
【００６５】
図１５のように、マスキング処理回路７は、その出力信号が出力セレクタ回路３７を経て出力されるように出力セレクタ回路３７と接続されている。また、マスキング処理回路７は、その入力信号が入力セレクタ回路３８を介して入力されるように入力セレクタ回路３８と接続されている。また、出力セレクタ回路３７とセレクタ制御回路３３とは接続されている。入力セレクタ回路３８にはＤＭＡプロセッサ２とシェーディング回路９からの入力ポートがある。プリント処理の場合には、ＤＭＡプロセッサ２からのデータを受信し、スキャナ処理時にはシェーディング回路９からのデータを受信する。したがって入力セレクタ３８は、スキャナまたはプリンタの各動作モードに応じて、受信したデータを出力する。そのために、ＤＭＡプロセッサ２のａｃｋ＿１（２４）かシェーディング回路９のｖａｌｉｄ＿ｓｈｄ３５のどちらかがアサートされると、アサートされた側の回路からデータを受信する。具体的には、ＤＭＡプロセッサ２のａｃｋ＿１（２４）がアサートされている場合にはｄａｔａ＿１（２５）からデータを受信する。シェーディング回路９のｖａｌｉｄ＿ｓｈｄ３５がアサートされている場合にはｄａｔａ＿３（３４）からデータを受信する。後で説明するが、ＤＭＡプロセッサ２とシェーディング回路９からデータが同時に転送されることはないので、ａｃｋ＿１（２４）とｖａｌｉｄ＿ｓｈｄ３５が同時にアサートされることはない。
【００６６】
入力セレクタ回路３８はデータを受信すると、マスキング処理回路７へｖａｌｉｄ信号と共にデータ転送する。マスキング処理回路７はデータを受け取ると、係数記憶部８に記憶された係数マトリクスを用いて入力されたデータの処理を行う。処理後、ｖａｌｉｄ信号とともに、出力セレクタ回路３７へデータを出力する。
【００６７】
出力セレクタ回路３７はマスキング処理回路７からｖａｌｉｄ信号を受信するとデータを受け取る。出力セレクタ回路３７にはＤＭＡプロセッサ２とγ補正１２への出力ポートがある。出力セレクタ回路３７は、プリント処理時には（すなわち選択信号ｓｅｌｅｃｔがネゲートされている場合）γ補正回路１２へデータを転送する。一方、スキャナ処理時には（すなわち選択信号ｓｅｌｅｃｔがアサートされている場合）ＤＭＡプロセッサ２にデータを転送する。この出力セレクタ回路３７の制御をセレクタ制御回路３３が行う。セレクタ制御回路３３からの選択信号ｓｅｌｅｃｔは、シェーディング回路９のｖａｌｉｄ＿ｓｈｄ信号がアサートされると立ち上がり、所定のクロック数が来ると自動的にネゲートされる。この所定のクロック数は、シェーディング回路９からのデータをマスキング処理回路７へ転送して、マスキング回路７で処理を行ってＤＭＡプロセッサ２へデータを転送するために必要なクロック数である。
【００６８】
たとえば、本実施形態ではレジスタ長は３２ビットである。ＹＭＣ各色成分が８ビットで表されるとすれば、ひとつのレジスタに１画素分のデータが納まる。すなわち、マトリクス処理回路７は、１画素ずつ入力されるデータを処理対象として、図７（Ｂ）のマトリクス処理を１画素ずつ実行し、それを出力する。そこでセレクタ制御回路３３は、ｖａｌｉｄ＿ｓｈｄ信号がアサートされると、選択信号ｓｅｌｅｃｔをアサートする。その後、１画素（すなわちＹＭＣ各色成分）のデータを対象とした図７（Ｂ）の処理に要する時間と、処理済みの１画素のデータを出力するための時間との合計時間（処理遅延時間）が経過してから、選択信号ｓｅｌｅｃｔをネゲートする。選択信号がアサートされている間にｖａｌｉｄ信号がアサートされると、そのタイミングを基準として、処理遅延時間が経過してから選択信号ｓｅｌｅｃｔをネゲートする。すなわち、ｖａｌｉｄ＿ｓｈｄが、処理遅延時間内にアサートされれば、選択信号ｓｅｌｅｃｔがネゲートされるタイミングは延長される。なお、１画素ずつというのは本実施形態の例にすぎない。処理単位のデータ量について、その処理時間と出力時間との合計の処理遅延が、選択信号がネゲートされるまでの遅延時間となる。
【００６９】
さらに、マスキング処理回路７と係数記憶部８は接続されており、マスキング処理回路７は係数記憶部８から係数を受信する。また、マスキング処理回路７の信号ｓｔｏｐ３９は、マスキング処理実行中は、アサートされている。マスキング処理が実行されていない間はネゲートされている。マスキング処理回路７のｓｔｏｐ３９信号がアサートされると、ｓｔｏｐ３９の反転信号を入力とするＡＮＤゲート１５０１の作用で、ゲート１５０１から出力される信号ｒｅｑ＿ｋｅｉ２３はネゲートされる。信号ｓｔｏｐ３９がネゲートされていると、ｒｅｑ＿ｋｅｉ２３からの信号は常にアサートされている。このことにより、係数記憶部８に保存された係数は、マスキング処理回路７が処理している間は、切り替わることはない。すなわち、プリント処理中にスキャナ処理用の係数に切り替わることはない。
【００７０】
最初に、図１８のタイミングチャートで、プリント処理時におけるマスキング処理回路７の動作について説明する。プリント処理時にはシェーディング回路９からの信号ｖａｌｉｄ＿ｓｈｄ３５がアサートされることはない。そのため、常にセレクタ制御回路３３から出力される選択信号ｓｅｌｅｃｔはネゲートされる。この場合には、出力セレクタ３７の出力先はγ補正回路１２となり、マスキング処理回路７のデータは常にγ補正回路１２へ転送される。
【００７１】
次に、図１９のタイミングチャートでスキャナ処理時におけるマスキング処理部１７の動作について説明する。この場合には、シェーディング回路９のｖａｌｉｄ＿ｓｈｄ３５がアサートされることで、セレクタ制御回路３３からの選択信号ｓｅｌｅｃｔも同時にアサートされる。選択信号ｓｅｌｅｃｔがアサートされてから、マスキング処理回路７からデータがＤＭＡプロセッサ２へ転送し終わる時間が経過すると、セレクタ制御回路３３からの選択信号ｓｅｌｅｃｔはネゲートされる。セレクタ制御回路３３からの選択信号ｓｅｌｅｃｔがアサートされている間は、出力セレクタ回路３７は入力されたデータをＤＭＡプロセッサ２へ転送する。選択信号ｓｅｌｅｃｔがネゲートされると、出力セレクタ回路３７は入力されたデータをγ補正回路１２へ転送する。ただし、図１９の例では、ｓｅｌｅｃｔ信号がアサートされている間に、ｖａｌｉｄ＿ｓｈｄ信号がアサートされるため、ｓｅｌｅｃｔ信号はアサートされたままである。
【００７２】
＜係数記憶部の動作＞
次に係数記憶部８の動作について説明する。係数記憶部８は、スキャナ処理時およびプリント処理時とも処理の最初にデータを転送して保持する。係数記憶部８からＤＭＡプロセッサ２へのリクエスト信号ｒｅｑ＿ｋｅｉはマスキング処理回路７からのｓｔｏｐ信号がアサートされている間はネゲートされている。逆に、ｓｔｏｐ信号がネゲートされている間は、ｒｅｑ＿ｋｅｉ２３はアサートされている。このことから係数記憶部８におけるタイミングチャートは図２０のようになる。この為に、マスキング処理回路７が動作中はリクエスト信号ｒｅｑ＿ｋｅｉ２３がアサートされることはなく、係数が切り替わることはない。
【００７３】
ここで、プリント処理の際にマスキング処理回路７へデータを転送した直後に、スキャナ処理からプリンタ処理のサスペンド命令が発行された場合を考える。この場合のタイミングチャートは図２１のようになる。プリント処理のためにマスキング処理されたデータは、セレクタ３３により選択信号ｓｅｌｅｃｔがアサートされているので、γ補正回路へ転送される（信号ｄａｔａ＿ｏｕｔ上のｄａｔａ２）。ところがスキャナスレッドによるサスペンドによりプリンタスレッドが中断すると、プリンタスレッドが復帰するまでｖａｌｉｄ＿ｓｈｄ信号はアサートされない。そのため、処理中のプリントデータのγ補正回路１２への転送が終了したタイミングで、選択信号ｓｅｌｅｃｔはネゲートされる。
【００７４】
一方、マスキング回路７は、処理が終了した時点でｓｔｏｐ信号をネゲートする。係数記憶部８からＤＭＡプロセッサ２へのリクエスト信号ｒｅｑ＿ｋｅｉは常にマスキング処理回路７からのｓｔｏｐ３９からの信号で制御されている。このため、信号ｒｅｑ＿ｋｅｉがアサートされる。これにより、マスキング処理回路７で用いる係数を切り替えるために、係数記憶部８へスキャナ処理用の係数が転送される。こうして、マスキング処理回路７でプリント処理用のマトリクス処理が終了してから、係数記憶部８にデータ（あらたな係数マトリクス）が転送される。
【００７５】
このようにして、プリント処理中に、シェーディング回路９からマスキング処理回路７へデータ転送した直後にサスペンドが起きても、プリンタ処理とスキャナ処理とを明確に切り分けつつ、スキャナ処理へ動的に切り替えることができる。
【００７６】
次に、スキャナ処理が終了後にプリント処理を再開する場合を説明する。この場合には、図２２のタイミングチャートのようになる。スキャナ処理の最後の段階は、ＤＭＡプロセッサ２がマスキング処理を終えたデータを受信し、メインメモリ５へデータを転送することである。図２２では、マスキング処理部７による処理は完了している。そのため、信号ｒｅｑ＿ｋｅｉはアサートされたままの状態にある。すなわち、係数データの書き換えの準備がＤＭＡプロセッサ２において完了すれば、係数記憶部８の更新はいつでもできる状態にある。そこで、プリンタスレッドに割り込んだスキャナスレッドは、その処理の最後に、プリント処理の係数を係数記憶部８へ転送し（信号ｄａｔａ＿ｋｅｉ上のｄａｔａ２）、スキャナ処理用の係数からプリント処理用の係数に切り替える。係数を切り替え後に、プリント処理（プリンタスレッド）を再開する。
【００７７】
スキャナスレッドに割り込まれたプリンタスレッドの処理は、γ補正回路１２へのデータ転送の完了までで中断されている。そこで、まず、再開されたプリンタスレッドでは、γ補正回路１２のレジスタに残っているデータをＤＭＡプロセッサ２は受信する。それから、残りのプリント処理を実行していく。たとえばスレッドの中断時に、そのときのスレッドのコンテクストを退避し、再開時にまずコンテクストを復帰させることで、中断時の処理から再開することができる。
【００７８】
このように、プロセッサ１はＤＭＡプロセッサインターフェース６を操作することで、プリンタ処理を処理している途中に、ＤＭＡプロセッサ２へトリガ信号を送ることができる。このことにより、ＤＭＡプロセッサ２はプリント処理を実行している途中に、優先的に処理を行いたいスキャナ処理のプログラムに切り替えることができる。また、マトリクス演算回路内に、データ転送の完了までデータの転送パスを確保するセレクタ回路を具備した。これによって、データをマトリクス演算回路内に残すことなくプリント処理から、スキャナ処理に切り替えることができる。また、マトリクス処理の係数マトリクスは、マトリクス演算処理回路が動作中には更新できない。このため、処理のためにマトリクス処理回路に転送されたデータ全体について、その処理が完了するまで係数マトリクスは変更できない。
【００７９】
以上の様な構成及び動作によって、本実施形態の画像処理装置は、プリント処理、スキャナ処理を動的に切り替えても、処理の切り替えに同期して係数の切り替えも行うことができる。また、中断される処理のために共有されている回路において実行中の処理が完了するまでは、処理の切り替えは行われない。すなわち、中断される処理のために行われている共有回路の処理が完了した時点で、処理の切り替えが行われる。
【００８０】
換言すれば、共有される回路（本例ではマトリクス演算回路）について、割り込まれる側のスレッド持つ使用権は、現在進行中の処理が完了するまでは、割り込む側のスレッドに渡されることはない。また、係数マトリクスも現在進行中の処理が完了するまでは変更できない。
【００８１】
なお、本実施形態では、マスキング処理の共有について説明したが、マスキング処理に限らずマトリクス演算を用いたその他の処理でも実施することができる。
【００８２】
なお本発明は、複数の機器（例えばホストコンピュータ、インターフェース機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置など）に適用してもよい。また本発明の目的は、前述の実施形態の機能を実現するプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータが記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体およびプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００８３】
また、本発明には、プログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた場合についても、本発明は適用される。その場合、書き込まれたプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される。
【００８４】
以上に述べたように本発明によれば、ＤＭＡプロセッサ２が二つのスレッドを動的に切り替える。また、共有回路のデータ出力先を切り替えるセレクタ回路とセレクタ回路を制御するセレクタ制御回路を用意した。これにより、実行している処理を中断して、優先度の高い他の処理へ動的に切り替えることができる。
【００８５】
また、本実施形態では、スキャナ処理によるプリンタ処理への割り込みについて説明したが、逆であっても実現できる。また、他の処理についても同様に適用することが出来る。
【図面の簡単な説明】
【００８６】
【図１】実施形態の画像処理装置の制御部の構成図である。
【図２】ＤＭＡプロセッサの複数スレッドの一例を示す図である。
【図３】スレッドの停止と再開の一例を示す図である。
【図４】ＤＭＡプロセッサの出力ポート、入力ポートの一例を示す図である。
【図５】メモリマップの一例を示す図である。
【図６】ＤＭＡプロセッサインターフェースのレジスタマップの図である。
【図７】スキャナ処理用およびプリント処理用マスキング処理の一例を示す図である。
【図８】実施形態の画像入出力装置全体の構成図である。
【図９】プロセッサ１による処理手順の図である。
【図１０】スキャナ処理時のＤＭＡプロセッサの処理順序を示す図である。
【図１１】プリント処理時のＤＭＡプロセッサの処理順序を示す図である。
【図１２】スレッドを使ってｗａｉｔする一例を示す図である。
【図１３】スレッドの停止、再開、ｗａｉｔする一例を示す図である。
【図１４】スキャナ処理によるプリント処理への割り込みの手順を示す図である。
【図１５】マスキング処理回路の構成図である。
【図１６】ＤＭＡプロセッサ２と画像処理回路との接続例を示す図である。
【図１７】外部とのｒｅｑ、ａｃｋのタイミングチャートを示す図である。
【図１８】プリント処理時のタイミングチャートである。
【図１９】スキャナ処理時のタイミングチャートである。
【図２０】係数記憶部のタイミングチャートである。
【図２１】プリント処理からスキャナ処理への切り替え処理のタイミングチャートである。
【図２２】スキャナ処理からプリント処理への切り替え処理のタイミングチャートである。
【図２３】ＤＭＡプロセッサ２に与えるプログラムの一例の図である。
【図２４】ＤＭＡプロセッサ２に与えるプログラムの一例の図である。
【図２５】実施形態の画像入出力装置による画像処理手順の一例を示す図である。
【図１】
2007018450.tif 000003
【図２】
2007018450.tif 000004
【図３】
2007018450.tif 000005
【図４】
2007018450.tif 000006
【図５】
2007018450.tif 000007
【図６】
2007018450.tif 000008
【図７】
2007018450.tif 000009
【図８】
2007018450.tif 000010
【図９】
2007018450.tif 000011
【図１０】
2007018450.tif 000012
【図１１】
2007018450.tif 000013
【図１２】
2007018450.tif 000014
【図１３】
2007018450.tif 000015
【図１４】
2007018450.tif 000016
【図１５】
2007018450.tif 000017
【図１６】
2007018450.tif 000018
【図１７】
2007018450.tif 000019
【図１８】
2007018450.tif 000020
【図１９】
2007018450.tif 000021
【図２０】
2007018450.tif 000022
【図２１】
2007018450.tif 000023
【図２２】
2007018450.tif 000024
【図２３】
2007018450.tif 000025
【図２４】
2007018450.tif 000026
【図２５】
2007018450.tif 000027