図1は、本発明の実施の形態のデジタルカメラの構成を示す図である。
1はシステムバスで、アドレスバス、データバス、制御信号から成る。2はCPUで、カメラのシーケンスをコントロールする。14はROMで、カメラが動作するためのプログラムが書き込まれている。CPU2はシステムバス1及びROMコントローラ13を通してROM14をリードすることが可能であり、これによりCPU2はROM14に記録された命令を実行することが可能である。
15はメモリコントローラ、16はDRAMで、メモリコントローラはシステムバスからのDRAMアクセス要求を受け、DRAM16へのアクセス信号を生成し、さらにDRAM16へのデータの書き込みやDRAM16からのデータの読み出しを実行する回路である。DRAM16はCPU2がプログラムを実行する際のワークデータを保持し、またカメラの撮影動作によって生成される画像データやディスプレイに再生するための画像データを保持する。また、CPU2はDRAM16に記録された命令を実行することも可能である。
17は被写体像を結像させるためのレンズで18は撮像センサである。20は撮像回路で撮像センサ18より得たデジタル画像信号を処理することによりデジタル画像データを生成する回路である。撮像回路20は所定周期で行われる撮像処理に同期した信号を割り込みコントローラ3に対して出力する。
23は表示回路でDRAM16上のデジタル画像データより画像信号を生成し、ディスプレイ21に対して出力する。ディスプレイ21はカラー液晶表示パネルなどによって構成されるディスプレイで、画像を表示する。
4はメモリカードで、主に撮影によって得られた画像ファイルを保存する。メモリカードは例えばPCMCIA I/Oカードやコンパクトフラッシュ(登録商標)等の記録再生可能なカードであり、例えばATAコマンドといったコマンドによりデータライト、データリードを制御し、さらにデータ転送は例えば1セクタ、512バイトといった所定の数を単位として行われる。
5はメモリカードのソケットであり、メモリカード4の着脱を可能とするための装置である。例えばコンパクトフラッシュ(登録商標)のデータバスは16ビットのデータ線およびアドレス線や制御信号線から構成されている。
6はメモリカードコントローラで、メモリカードのデータ線、アドレス線、制御信号を制御する回路で、メモリカード4に対するコマンドの発行、メモリカードの各レジスタに対するライト及びリードアクセス、メモリカード4に対するデータライト、データリードが可能である。また、メモリカードコントローラ6はバスインターフェース11によりシステムバス1に接続され、CPU2によってメモリカードコントローラ6の制御及びメモリカードに対するライトアクセス、リードアクセスが可能である。
更に、メモリカードコントローラ6にはDMA(Direct Memory Access)回路12が接続されている。DMA12は予めCPU2によってセットされた転送開始アドレスと転送データ長を用いて所定のアドレスから所定の数のデータを転送する回路である。DMA12はバスマスタとしてシステムバス1に対して制御信号とアドレスを生成することが可能であり、さらにメモリカードコントローラ6に対してもライトアクセス要求、リードアクセス要求を発行することが可能である。
これにより例えばDRAM16のように所定のアドレスにマッピングされたデバイスとメモリカードコントローラ6の間において、CPU2がデータ転送アクセスを実行することなく、メモリカードコントローラ6のデータアクセスに同期してデータを転送することが可能となる。
メモリカードコントローラ6にはカウンタ10が接続されている。メモリカードコントローラ6はメモリカード4に対するデータリードまたはデータライト処理が発生したとき、カウンタ10に対してカウントアップ信号を出力する。カウンタ10はメモリカードコントローラ6が行ったデータリードまたはデータライトの回数をカウントし、1セクタ相当のアクセス回数がカウントされたとき、ステート制御回路9に対して信号を出力する。
また、メモリカードの種類によっては一度のステータスチェックにより複数セクタ相当の数のデータを転送することを許容するものもある。
この場合、カウンタ10が、一度のステータスチェックにより転送を許可されている最大のデータ数をカウントした際に信号を発生するよう設定することも可能である。
メモリカードコントローラ6には比較回路8、及び比較回路24が接続されている。メモリカードコントローラ6はメモリカード4より読み取ったメモリカードのステータスレジスタの値を比較回路8と比較回路24に出力する。
設定レジスタブロック7はメモリカード4の制御動作に関する設定値を記憶するレジスタブロックであり、CPU2からシステムバス1及びバスインターフェース11を経由してライトアクセス、リードアクセスすることが可能である。
設定レジスタブロック7はその中の一つのレジスタにカードステータスの期待値1を記憶し、これを比較回路8に出力し、また他の一つのレジスタにカードステータスの期待値2を記憶し、これを比較回路24に出力している。
比較回路8とメモリカードコントローラ6の間にはマスク回路25が、また比較回路24とメモリカードコントローラ6の間にはマスク回路26がある。マスク回路25及び26は、入力データ中の特定のビットのみを通過させる論理回路であり、マスク回路25に通過させるビットは選択可能であり、その設定値は設定レジスタブロック7が保持する。同様にマスク回路26に通過させるビットは選択可能であり、その設定値は設定レジスタブロック7が保持する。これらによりCPU2はマスク回路25及び26に通過させるビットをそれぞれ独立に設定することが可能である。
比較回路8はメモリカード4より読み取ったメモリカード4のステータスレジスタの値と期待値1とを比較し、比較結果をステート制御回路9に出力する。同様に比較回路24はメモリカードより読み取ったメモリカード4のステータスレジスタの値と期待値2を比較し、比較結果をステート制御回路9に出力する。
ステート制御回路9はメモリアクセスのシーケンスを制御するステートマシンであり、その動作の詳細については後で述べる。
次に、図1、図2、図3、図4を用いてメモリカード4に対してデータライトを行う時の動作を説明する。図2はステート制御回路9の動作を示し、図3はCPU2の動作を示す図である。
図3の1000において、CPU2はデータライト処理を開始する。
CPU2はまずS1001にてメモリカードに対してこれから行うデータ転送に関する、論理ブロックアドレスの設定、更にS1002にて転送セクタ数、S1003にて転送するデータが記録される先頭セクタ番号の設定を行う。これらはCPU2による設定値のライト指示がシステムバス1とバスインターフェース11を経由してメモリカードコントローラ6に伝達され、メモリカードコントローラがメモリカード4を制御することによって行われる。
次にCPU2はS1004において、メモリカードコントローラ6に対してDMA転送先アドレスを指定する。このDMA転送先アドレスとは、メモリカード4上でマッピングされたアドレスを指し、ここではデータレジスタを示すアドレスを指定する。このアドレス値は設定レジスタブロック7に記憶される。
S1005においてCPU2は、Skip IREQ Waitingレジスタに1を、転送終了割り込みイネーブルレジスタに1をセットする。Skip IREQ Waitingレジスタは設定レジスタブロック7に存在する一つのレジスタであり、この値が0であるか1であるかによってステート制御回路9の動作を決定する。転送終了割り込みイネーブルレジスタは、メモリカードコントローラ6が全てのデータをメモリカード4に転送し終わった時に割り込み要求をアサートする機能の動作を決定するための値を保持し、この値が1であるとき、メモリカードコントローラ6は全ての転送の終了を、DMAENがネゲートされたこと、1セクタ単位の転送が終了していること、メモリカードがIREQをアサートしたことにより判断したとき、割り込み要求信号をアサートする。
S1006においてCPU2は、メモリカードコントローラ6に対して1セクタのデータ数すなわち1セクタの転送に必要なデータライトの回数を設定する。
一般的なファイルシステムの元でメモリカードを使用する場合、1セクタは512バイトであり、メモリカードのデータバスが16bitである場合、データライトの回数は256回である。この値は設定レジスタブロック7に記憶される。
S1007及びS1008においてCPU2は、メモリカード4のステータスレジスタのアドレスとこれの期待値を設定する。メモリカード4のステータスレジスタとはメモリカード4の状態を示すレジスタで、これをリードすることによりレディ状態であるか、データリクエスト状態であるか、エラーステータスであるか、等を知ることができる。
データライトやデータリードを行う場合はこのレジスタの値が所定の値、例えばレディ状態かつデータリクエスト状態であり、かつエラー状態ではないこと、である必要があり、期待値としてこのような値を設定レジスタブロックの期待値1にセットし、メモリカード4から読み出したステータスレジスタの値と期待値を比較することによりこれらをチェックする。また、エラーの検出のため、エラービットを設定レジスタブロックの期待値2としてセットし、さらにエラービット以外はマスクされるようマスク回路26を設定する。
更にCPU2は比較回路が比較一致を示した場合のステートマシンの振る舞いを設定することが可能であり、これを設定するレジスタとしてSuspendEnableレジスタが存在する。SuspendEnableレジスタの設定値としてはDMA続行とDMAサスペンドの二種類から選択が可能である。ここでは比較回路8が一致を示したときはDMA続行を選択し、比較回路24が一致を示したときはDMAサスペンドを選択し、これをSuspendEnableレジスタに設定する。
S1009においてCPU2は、メモリカード4に対してライトセクタコマンドを発行する。これによりメモリカード4は後にライト可能な状態となるが、それについては後で説明する。
S1010にてCPU2は、DMA12に対してDMAの転送対象となるデータが存在する、先頭アドレスを設定する。ここではメモリカード4に対して転送するデータはDRAM16に存在する。従って、ここでDMA12にセットされるDMA転送開始アドレスとは、DRAM16上に存在する転送対象データの先頭アドレスである。更にCPU2はDMA12に対してDMA転送対象となるデータのサイズを設定する。
S1011にてCPU2はDMA12に対してDMAによるデータ転送の方向をDRAM16からメモリカード4の方向にセットする。
ここで、CPU2は図3のS1012、図4のAにおいて、DMA12に対してDMA転送開始を指示する。これにより、DMA12はDMAEN信号を1にアサートする。
更にCPU2はS1013にて割り込みコントローラ3に対して、メモリカードコントローラ6が発生する転送終了割り込みをCPU2に対する割り込み要求として設定する。これによってCPU2はメモリカードコントローラがデータ転送終了を示すまでの間、メモリカード4とDRAM16間のデータ転送に関する処理を行う必要は無くなる。
更にマルチタスクOSによりシステムのタスクを制御することにより、割り込み発生までの間、CPU2は他のタスクを処理することが可能となる。
このとき、割り込み要因としてDMA12ではなくメモリカードコントローラ6を選択するのは、メモリカードコントローラ6はメモリカード4を制御するので全てのデータがメモリカード4に転送されたことを検出することが可能であるためである。
図2において、ステート制御回路9は、デジタルカメラが起動してからここまでの間、すなわち初期状態では101のアイドルステートをとる。そしてCPU2がS1012にてDMA12に対してDMA転送開始を指示したことにより、DMA12はDMAEN信号をアサートし、これはメモリカードコントローラ6を経由してステート制御回路9に伝達される。ステート制御回路9はDMAEN信号がアサートされかつ事前にSkip IREQ Waitingレジスタの値が1にセットされていることにより、状態を103のステータスチェックステートに遷移する。
本形態ではデータライトまたはリード時の最初のセクタに関して、Skip IREQ Waitingレジスタによって、IREQがアサートされることを待つ機能を動作させるか否かを選択可能である。これは、コンパクトフラッシュ(登録商標)やPCMCIA I/OカードといったATA規格を用いるメモリカードが、データリードとデータライトにおいて異なるIREQの振る舞いをとるためである。
これらのメモリカードはデータリード時にはリードコマンド発行後最初のセクタに関してもIREQをアサートするが、一方データライト時ライトコマンド発行後、最初のセクタに関してはIREQをアサートしない。
ステート制御回路9のステートが103である場合、メモリカードコントローラ6はメモリカード4のステータスレジスタを繰り返しリードする。リードした値は比較回路8において事前にセットされた期待値と比較される。比較結果が不一致である場合、ステート制御回路は状態103をとり、メモリカードコントローラ6は比較結果が一致するまで繰り返しステータスレジスタをリードする。
この様に図4のAからBまでの間において、メモリカード4のステータスレジスタを繰り返しリードする。そしてメモリカード4がステータスの値を所望の値に変化させたことにより、Bにて比較回路8の比較結果が期待値1との一致を示した場合、ステート制御回路9は図4のBにて状態を図2のステート104のDMAに遷移させる。
ステート制御回路9の状態が104であるとき、メモリカードコントローラ6はDMA12がアサートするDMAリクエスト信号に同期してDMA12よりデータを受け取り、これをメモリカード4のデータレジスタに対してライトアクセスする。ここでメモリカードコントローラ6がデータレジスタに対してデータをライトするのは、事前にS1004にてデータ転送先がデータレジスタを示すアドレスに設定されているためである。
ステート制御回路9の状態が104である間、メモリカードコントローラ6は繰り返しデータライトを行う。これと同時にカウンタ10はデータライトの回数をカウントする。
カウンタ10はデータライトの回数が1セクタ分となった場合、これを示す信号をステート制御回路9に対してアサートする。
図4のCにおいてカウンタ10が1セクタのデータライトが完了したことを示し、さらに最後の転送が完了していたとする。ここで、ステート制御回路9はDMAENの値を評価する。DMAENは転送開始によって1にアサートされ、予めセットされたデータサイズ全ての転送が終了したときに0にネゲートされる信号である。
従って、1セクタの転送完了後にDMAENがアサート状態である場合、まだ転送すべきデータが残っていることを示す。
ステート制御回路9はこれにより図4のCにおいて状態を図2のステート102に遷移させる。ステート制御回路9の状態が102のWait IREQである場合、メモリカードコントローラ6はメモリカード4がIREQ信号をアサートすることを待つ。
メモリカード4はデータ転送可能な状態となったとき、IREQ信号をアサートする。IREQ信号は0でアサート状態すなわち割り込み要求状態であり、1でネゲート状態である。図4のDにおいてメモリカード4がIREQ信号をアサートしたとする。これによりステート制御回路9は状態を103に遷移させる。メモリカードコントローラ6はメモリカード4のステータスレジスタをリードし、比較回路8はメモリカード4のステータスと期待値を再び比較する。そして図4のEにおいて再びステートを104に遷移させ、1セクタ分のデータライトをDMAに同期して行う。
以上の処理を繰り返し行い、図4のFにて予定していた全てのデータがDRAM16からメモリカードコントローラ6に転送されたとする。ここでは1セクタ分の転送が完了していると同時にDMAENは0にネゲートされているので、ステート制御回路9は状態を101のアイドル状態に遷移させる。
更にこの後、メモリカードコントローラ6は図4のGにおいて、DMAENがネゲートされたこと、1セクタ単位の転送が終了していること、メモリカード4がIREQをアサートしたことを判断すると、割り込み要求信号を割り込みコントローラ3に対して出力し、さらに割り込みコントローラ3はこれをCPU2に対してアサートする。
これにより、CPU2はメモリカード4に対するデータライトが確実に完了したことを知ることが可能となり、メモリカードに対する次のコマンドを誤ってデータ転送完了前に発行するなどの事故を防止することが可能となる。また、通常デジタルカメラでは、メモリカードへのデータ書き込み動作中は、ユーザーによるメモリカードの抜き取りを防止するために警告を表示する。本形態ではデータの書き込みが完全に終了したときにCPUに割り込み要求を出力するため、このような警告表示の終了を確実に行うことが可能である。
データ書き込み終了割り込みによりCPU2は他のタスクの実行を停止し、実行処理を図3のセクタライト処理のS1014に戻す。これによりCPU2はメモリカードに対するデータライトの処理をS1015にて終了する。
以上の様に、メモリカード4に対するデータライトは完了する。
このとき、メモリカード4に対するデータ転送を開始した直後であるS1013からデータ転送が完了するS1014間での間、CPU2はメモリカード4に関する処理は一切必要ない。そのため、CPU2はこの間別のタスクを実行することが可能である。
また、メモリカード4に対するデータ転送において、CPU2はステータスの確認を行う必要は無く、IREQ信号によって割り込み処理を起動する必要も無いのでステータスが期待値と一致したことは瞬時に判断され、DMA12はメモリカード4のステータスがレディとなった直後にデータ転送を開始することが可能となる。
ここで、データ転送中においてメモリカード4がステータス値としてエラー状態を示した場合について説明する。
予め期待値2にはエラービットの値が設定され、マスク回路26はエラービット以外をマスクするよう設定されている。
図2の103においてメモリカード4のステータスレジスタがリードされ、この値のエラービットが真である場合、比較回路24はその結果をステート制御回路9に伝達する。ステート制御回路9は状態を図2の105に遷移させる。そして、DMAは起動され、かつデータ転送をリクエストした状態であるが、メモリカードコントローラ6はメモリカード4へのアクセスを行わず、DMA処理を一時停止させた状態をとる。
もしエラーを回避することが可能なのであればCPU2はメモリカードコントローラ6にレジューム指令を行い、データ転送を再開することも可能である。また、エラーに対してこれを回避することが不可能である場合は、DMA処理を停止する。その結果DMAEN信号が0になり、ステート制御回路9は101の初期状態に遷移するため、データ転送は中止され、例えばカードを初期化するといったことが可能である。
もしカードに書き込むべきデータがDRAM16上に存在するのであれば、論理アドレスを変更した上で再びデータのライトを試みればよい。
次に、図1、図2、図5、図6を用いてメモリカードに対するデータリード時の動作を説明する。
図3の1100において、CPU2はデータリード処理を開始する。
CPU2はまずS1101にてメモリカード4に対してこれから行うデータ転送に関する、論理ブロックアドレスの設定、さらにS1102にて転送セクタ数、S1103にて転送するデータが記録される先頭セクタ番号の設定を行う。
更にCPU2はS1104において、メモリカードコントローラ6に対してDMA転送元アドレスとしてメモリカード4のデータレジスタを示すアドレスを指定する。
S1105においてCPU2は、Skip IREQ Waitingレジスタに0をセットする。これはメモリカード4がリードセクタ時においては最初のセクタに関してもIREQをアサートするためである。また、このときCPU2は、転送終了割り込みイネーブルレジスタに0をセットする。
S1106においてCPU2は、メモリカードコントローラ6に対して1セクタのデータ数として512バイトを設定する。また、S1107及びS1108においてCPU2は、メモリカード4のステータスレジスタのアドレスとこれの期待値を設定する。S1109においてCPU2は、メモリカード4に対してリードコマンドを発行する。
S1110にてCPU2は、DMA12に対してデータを記録するアドレスとしてDRAM16上に存在するデータ保存領域の先頭アドレスを指定する。さらにCPU2はDMA12に対してDMA転送対象となるデータのサイズを設定する。
S1111にてCPU2はDMA12に対してDMAによるデータ転送の方向をメモリカード4からDRAM16の方向にセットする。
ここで、CPU2は図5のS1112、図6のHにおいて、DMA12に対してDMA転送開始を指示する。これにより、DMA12はDMAEN信号を1にアサートする。
更にCPU2はS1113にて割り込みコントローラ3に対して、DMA12が発生する転送終了割り込みをCPU2に対する割り込み要求として設定する。これによってCPU2はDMA12がデータ転送終了を示すまでの間、メモリカード4とDRAM16間のデータ転送に関する処理を行う必要は無くなる。
更にマルチタスクOSによりシステムのタスクを制御することにより、割り込み発生までの間、CPU2は他のタスクを処理することが可能となる。
このとき、割り込み要因としてDMAを選択するのは、メモリに対してトランザクションを発生するDMA12は全てのデータがDRAM16に転送されたことを検出することが可能であるためである。
図2において、ステート制御回路9は、デジタルカメラが起動してからここまでの間は101のアイドルステートをとる。そしてCPU2がS1112にてDMA12に対してDMA転送開始を指示したことにより、DMA12はDMAEN信号をアサートし、これはメモリカードコントローラ6を経由してステート制御回路9に伝達される。
ステート制御回路9はDMAEN信号がアサートされかつ事前にSkip IREQ Waitingレジスタの値が0にセットされていることにより、状態を102のWait IREQ状態に遷移させる。これによりメモリカードコントローラはカードがIREQ信号をアサートすることを待つ。IREQ信号がアサートされた場合、図6のIにおいて状態を103のステータスチェックステートに遷移する。
ステート制御回路9のステートが103である場合、メモリカード4のステータスレジスタを繰り返しリードする。ここで、メモリカード4がステータスの値を所望の値に変化させたことにより、Jにて比較回路の比較結果が期待値との一致を示し、ステート制御回路9は図6のJにて状態を図2のステート104のDMAに遷移させる。
ステート制御回路9の状態が104であるとき、メモリカードコントローラ6はDMA12がアサートするDMAリクエスト信号に同期してメモリカードのデータレジスタよりデータを受け取り、これをDRAM16に対して転送する。ステート制御回路9の状態が104である間、メモリカードコントローラ6は繰り返しデータリードを行う。これと同時にカウンタ10はデータリードの回数をカウントする。
カウンタ10はカウント値が1セクタ分のデータライトの回数と一致した場合、これを示す信号をステート制御回路9に対してアサートする。
図6のKにおいてカウンタ10が1セクタのデータリードが完了したことを示し、さらに最後の転送が完了していたとする。ここで、ステート制御回路9はDMAENの値を評価する。1セクタの転送完了後にDMAENがアサート状態である場合、まだ転送すべきデータが残っていることを示す。
ステート制御回路9はこれにより図6のKにおいて状態を図2のステート102に遷移させる。ステート制御回路9の状態が102のWait IREQである場合、メモリカードコントローラ6はメモリカード4がIREQ信号をアサートすることを待つ。
メモリカード4はデータ転送可能な状態となったとき、IREQ信号をアサートする。図4のLにおいてメモリカード4がIREQ信号をアサートした場合、ステート制御回路9は状態を103に遷移させる。メモリカードコントローラ6はメモリカード4のステータスレジスタをリードし、比較回路8はメモリカード4のステータスと期待値を再び比較する。そして図6のMにおいて再びステートを104に遷移させ、1セクタ分のデータリードをDMAに同期して行う。
これらの動作を繰り返し行い、図6のNにて予定していた全てのデータがメモリカードコントローラ6からDRAM16に転送されたとする。ここでは1セクタ分の転送が完了していると同時にDMAENは0にネゲートされている。これによりステート制御回路は状態を101のアイドル状態に遷移させる。
ここではメモリカードコントローラ6は、転送終了割り込みをアサートしない。一方DMA12は全データがDRAM16に転送されたとき、転送終了割り込みをアサートする。CPU2は全データの転送終了をDMA12の転送終了割り込みがアサートされたことによって検出する。
これによりCPU2は図3のS1114において割り込みを検出し、メモリカード4からのデータリードの処理をS1115にて終了する。
以上によってメモリカード4からのデータリードは完了する。
このとき、メモリカード4からのデータ読み出しを開始した直後であるS1113からデータ転送が完了するS1114間での間、CPU2はメモリカード4に関する処理は一切行うことなしに複数セクタのデータリードを完了することが可能である。そのため、CPU2はこの間別のタスクを実行することが可能である。
また、メモリカード4からのデータ転送において、CPU2はステータスの確認を行う必要は無く、IREQ信号によって割り込み処理を起動する必要も無いのでステータスが期待値と一致したことは瞬時に判断され、DMAは直後にデータ転送を開始することが可能となる。
以上のように、本形態では、IREQ信号の検出、ステータスレジスタ値のチェック、DMAの起動の間に、CPUが行う割り込み処理が介在しないため、これらの処理を瞬時に完了することが可能となり、メモリカードと装置の間のデータ転送を短時間に完了することが可能となり、これにより撮影間隔時間が短く使い勝手のよいデジタルカメラを実現することが可能となる。
更に、メモリカードとの間でデータ転送している間、CPUは他のタスクを実行することが可能であり、かつこのタスクはデータ転送のセクタ単位によって中断されることも無い。これによりCPUの処理能力が向上し、例えばユーザーからの操作に対してレスポンスよく動作する使い勝手のよいデジタルカメラを実現することが可能となる。
なお、本形態では、所定の期間、メモリカードとDRAMの間のデータ転送を一時的に中止し、その期間の終了によりデータ転送を再開することも可能である。
本形態では、比較回路が比較一致を示した場合のステートマシンの振る舞いを設定するSuspendEnableレジスタが存在し、振る舞いはDMA続行とDMAサスペンドの二種類から選択が可能である。
図7はデータ転送実行中の動作を示す図である。
データ転送実行中であるPにおいて、CPU2は比較回路8の比較結果に関するSuspendEnableレジスタの値をDMA続行からサスペンドに変更する。ステート制御回路9はQにおいてステートを103に遷移しステータスレジスタをリードする。さらに比較回路8はこれらのデータの一致を示す。
Rにおいてステート制御回路9はこのような設定が行われたことにより状態を105のサスペンドステートに遷移する。これによってメモリカード4とDRAM16間のDMA転送は一時停止状態となる。
次にCPU2はSにおいてSuspendEnableレジスタの値をDMA続行に戻し、さらにメモリカードコントローラ6に対してレジュームを指令する。これによってステート制御回路9はデータ転送を再開する。
デジタルカメラにおいては、撮像動作の動作に同期して、CPUのプログラム実行を優先させたい場面がある。
例えば撮像時、撮像画像の露出やホワイトバランスを調整する必要がある。撮像処理は水平同期信号や垂直同期信号に同期して行われ、一画面と一画面の間の時間をVブランキング期間と呼んでいる。露出やホワイトバランスの処理は、撮像素子より得られた一画面分の画像データを用いて演算を行い、この露出やホワイトバランス制御のための制御値を次の一画面の撮像が開始されるより前に撮像回路に対して設定する必要がある。したがって演算からパラメータセットまでの処理をVブランキング期間中に完了することが必要となる。
そのためVブランキングの期間中は露出やホワイトバランス制御のためにシステムバスやROM、DRAMを優先的に使用することが好ましく、メモリカードに対するデータ転送のために使用することは好ましくない。
そのため、Vブランキング期間が開始されるより前にSuspendEnableレジスタをDMAサスペンドに変更し、Vブランキング期間終了とともにSuspendEnableレジスタの値をDMA続行に戻し、さらにメモリカードコントローラ6に対してレジュームを指令すればよい。
撮像回路20はVブランキング期間の開始よりちょうどメモリカードアクセス1セクタ分の時間前に、割り込み要求を、またVブランキング終了時も割り込み要求を割り込みコントローラ3に出力する。CPU2はVブランキング期間開始前であることを割り込みによって検出した場合、SuspendEnableレジスタをDMAサスペンドに変更する。また、CPU2はVブランキング期間終了を割り込みによって検出した場合、SuspendEnableレジスタをDMA続行に戻し、さらにメモリカードコントローラ6に対してレジュームを指令する。
これにより、メモリカード4に対するデータ転送はVブランキング期間には行われず、Vブランキング期間、CPUは撮像に関する処理を最大限に処理することが可能となる。しかもVブランキング以外の時間はメモリカード4に対するデータ転送を短時間で行うことが可能である。
この様に、本形態では、撮像時において撮像に必要な処理をメモリカードに対するデータ転送より優先して行うことが可能であり、撮像処理を確実に行うことにより高画質なデジタルカメラを実現することも可能である。