本章では、ドライバを介せず直接ボードを利用するのに必要な情報を提供します。画像処理および PCI 規格に関する初歩的な知識を前提としますので、それらに関しては他の資料を参照してください。
本ボードは PCI Local Bus Specification, Revision 2.1 に準拠したアドインボードです。ボード上には主として次の 3 つのチップがのっています。
アナログ信号による入力画像を YUV デジタル信号に変換するチップです。キャプチャそのものは、このチップで行われます。画像入力は AI21, AI22, AI31, AI32, AI41, AI42 の 6 個を持ちます。
SAA7110 が出力した YUV 形式の画像データを加工し、RGB 形式に変換したり、大きさを縮小したりするチップです。
PCI バスとボードのインターフェースをつとめるチップです。キャプチャした画像データの転送はもとより、他の 2 チップのレジスタに対する書き込みも、このチップを介して行われます。PCI デバイス ID は 0x1223、ベンダ ID は 0x8086 です。本チップは PCI バスサイクルにおいてマスタとなりえます。また、本チップはメモリにマップされたレジスタを持ち、4 KB のアドレス空間を要求します。したがって、コンフィギュレーションスペースの「Master」および「Memory」ビットは 1 にセットされていなければなりません。
各チップの詳細に関しては、Philips 社が提供する仕様書をご覧ください。
SAA7110 のレジスタは各 8 bit で、00h から 34h まで 53 個あります。各レジスタの最下位ビットを D0、最上位ビットを D7 として、各ビットに順に名前をつけます。主要なビットの名前、位置および役割は以下の通りです。
AI21 と AI22 のどちらか一方を選択します。(0 … AI22, 1 … AI21)
AI31 と AI32 のどちらか一方を選択します。(0 … AI32, 1 … AI31)
AI41 と AI42 のどちらか一方を選択します。(0 … AI42, 1 … AI41)
AINS2 で選択した入力を enable または disable します。(0 … enable, 1 … disable)
AINS3 で選択した入力を enable または disable します。(0 … enable, 1 … disable)
AINS4 で選択した入力を enable または disable します。(0 … enable, 1 … disable)
AINS2 および AINS4 で選択した入力の合成法を決めます。(00 … 両方とも有効, 01 … AINS2 側のみ有効, 10 … AINS4 側のみ有効, 11 … 両方とも無効)
AINS3 および AINS4 で選択した入力の合成法を決めます。(00 … 両方とも有効, 01 … AINS3 側のみ有効, 10 … AINS4 側のみ有効, 11 … 両方とも無効)
BYPS による選択を有効または無効にします。(0 … 有効, 1 … 無効)
CSEL による選択を有効または無効にします。(0 … 有効, 1 … 無効)
MX24 と MX34 で選択した信号のどちらか一方を、色差信号の入力源として使用します。CHRS と BYPS が両方とも 0 のときのみ、意味を持ちます。(0 … MX34 側, 1 … MX24 側)
MX24 と MX34 で選択した信号のどちらか一方を、輝度信号の入力源として使用します。CHRS と BYPS が両方とも 0 のとき以外、同じ信号が色差信号の入力源としても使用されます。(0 … MX24 側, 1 … MX34 側)
キャプチャ時の色合いを指定します。(符号つき 8 bit 整数)
キャプチャ時の彩度を指定します。(符号つき 8 bit 整数)
キャプチャ時のコントラストを指定します。(符号つき 8 bit 整数)
キャプチャ時の明るさを指定します。(符号なし 8 bit 整数)
SAA7186 のレジスタは各 8 bit で、00h から 10h まで 17 個あります。各レジスタの最下位ビットを D0、最上位ビットを D7 として、各ビットに順に名前をつけます。主要なビットの名前、位置および役割は以下の通りです。
入力画像データの幅を指定します。(符号なし 10 ビット整数)
入力画像データの高さを指定します。(符号なし 10 ビット整数)
入力画像データの水平開始位置を指定します。左端は 0x010 です。(符号なし 9 ビット整数)
入力画像データの垂直開始位置を指定します。入力にもよりますが、上端は 0x010 前後です。(符号なし 9 ビット整数)
出力画像データの形式を選択します。(100 … RGB 5-5-5 16 bit / pixel, 110 … RGB 8-8-8 24 bit / pixel, 111 … モノクローム 8 bit / pixel など)
出力画像データを反転させます。(カラーのとき 0 … 反転しない, 1 … 反転する、モノクロームのとき 0 … 反転する, 1 …反転しない)
出力画像データの幅を指定します。(符号なし 10 ビット整数)
出力画像データの高さを指定します。(符号なし 10 ビット整数)
SAA7116 のメモリマップトレジスタはそれぞれ 32 ビットの値を持ち、メモリベースアドレスにオフセット値を加えて指定します。各レジスタの最下位ビットを D0、最上位ビットを D31 として、各ビットに順に名前をつけます。主要なレジスタまたはビットの名前、位置および役割は以下の通りです。
偶数フィールドの画像データを転送する領域の先頭アドレスを指定します。偶数でなければなりません。(符号なし 32 ビット整数)
奇数フィールドの画像データを転送する領域の先頭アドレスを指定します。偶数でなければなりません。(符号なし 32 ビット整数)
偶数フィールドの画像データを転送するとき、一つのラインが終わるごとにアドレスに加算される数値を指定します。4の倍数でなければなりません。偶数フィールドと奇数フィールドを合成するとき利用できます。(符号なし 32 ビット整数)
奇数フィールドの画像データを転送するとき、一つのラインが終わるごとにアドレスに加算される数値を指定します。4の倍数でなければなりません。偶数フィールドと奇数フィールドを合成するとき利用できます。(符号なし 32 ビット整数)
偶数フィールドの画像データを転送する領域の末尾アドレスに 1 を加えた値を指定します。(符号なし 32 ビット整数)
奇数フィールドの画像データを転送する領域の末尾アドレスに 1 を加えた値を指定します。(符号なし 32 ビット整数)
偶数フィールドの画像形式を指定します。(0x39393900 … RGB 32 bit, 0xeeeeee01 … RGB 16 bit など)
奇数フィールドの画像形式を指定します。(0x39393900 … RGB 32 bit, 0xeeeeee01 … RGB 16 bit など)
1 にすると偶数フィールドのキャプチャが開始されます。キャプチャが終了すると 0 に戻ります。
1 にすると奇数フィールドのキャプチャが開始されます。キャプチャが終了すると 0 に戻ります。
画像データを転送するとき、転送先アドレスの範囲を DMA End (Odd) および DMA End (Even) によりチェックします。(0 … チェックしない, 1 … チェックする)
偶数フィールドの画像データを転送するとき、転送先アドレスが DMA End (Odd) で指定した値を越えたことを示します。(0 … 越えていない, 1 … 越えた)
奇数フィールドの画像データを転送するとき、転送先アドレスが DMA End (Even) で指定した値を越えたことを示します。(0 … 越えていない, 1 … 越えた)
画像データを転送するとき、FIFO バッファのオーバーフローを検出しません。(0 … 検出する, 1 … 検出しない)
偶数フィールドの画像データを転送するとき、FIFO バッファがオーバーフローしたことを示します。(0 … オーバーフローしていない, 1 … オーバーフローした)
奇数フィールドの画像データを転送するとき、FIFO バッファがオーバーフローしたことを示します。(0 … オーバーフローしていない, 1 … オーバーフローした)
他の 2 チップのレジスタに値を書き込む際、対象チップを指定します。(0x9c … SAA7110, 0xb8 … SAA7186)
他の 2 チップのレジスタに値を書き込む際、レジスタの番号を指定します。(符号なし 8 ビット整数)
他の 2 チップのレジスタに値を書き込む際、データの値を指定します。(8 ビットデータ)
他の 2 チップのレジスタに値を書き込む際、1 にすると書き込みが開始されます。書き込みが終了すると 0 に戻ります。
他の 2 チップのレジスタに値を書き込む際、書き込みが正常に終了したことを示します。(0 … 正常終了, 1 … 中断)
ここに述べたレジスタ以外に関しては、Philips 社が提供する仕様書をご覧ください。
SAA7116 のレジスタは、PCI 規格にそってメモリ空間にマップされています。レジスタがマップされている領域のベースアドレスは、コンフィギュレーションスペースの 10h - 13h に書かれており、通常は OS を経由して取得可能です。レジスタへのアクセスは、ベースにオフセットを加えた物理アドレスに対する読み書きによって行います。
SAA7110 および SAA7186 のレジスタは、SAA7116 を経由してアクセスします。これらのレジスタは基本的に書き込みしか行えません。書き込みは以下の手順に従って行います。
各チップを初期化する方法は、Philips 社が提供する仕様書をご覧になるか、Linux 用ドライバのソース Linux-2.0.x/acvc.c に含まれている関数 init7116(), init7186(), init7110() をお読みください。
実際にキャプチャを実行するためには、すべてのレジスタに適切な値を設定した上で、以下の操作を行います。偶数フィールドのみをキャプチャする場合は、次の通りです。
奇数フィールドのみをキャプチャする場合は次の通りです。
偶数フィールドと奇数フィールドを同時にキャプチャする場合は次の通りです。