前のページ 次のページ 目次

6. ボードの直接利用

6.1 基礎

本章では、ドライバを介せず直接ボードを利用するのに必要な情報を提供します。画像処理および PCI 規格に関する初歩的な知識を前提としますので、それらに関しては他の資料を参照してください。

本ボードは PCI Local Bus Specification, Revision 2.1 に準拠したアドインボードです。ボード上には主として次の 3 つのチップがのっています。

Philips SAA7110

アナログ信号による入力画像を YUV デジタル信号に変換するチップです。キャプチャそのものは、このチップで行われます。画像入力は AI21, AI22, AI31, AI32, AI41, AI42 の 6 個を持ちます。

Philips SAA7186

SAA7110 が出力した YUV 形式の画像データを加工し、RGB 形式に変換したり、大きさを縮小したりするチップです。

Philips SAA7116

PCI バスとボードのインターフェースをつとめるチップです。キャプチャした画像データの転送はもとより、他の 2 チップのレジスタに対する書き込みも、このチップを介して行われます。PCI デバイス ID は 0x1223、ベンダ ID は 0x8086 です。本チップは PCI バスサイクルにおいてマスタとなりえます。また、本チップはメモリにマップされたレジスタを持ち、4 KB のアドレス空間を要求します。したがって、コンフィギュレーションスペースの「Master」および「Memory」ビットは 1 にセットされていなければなりません。

各チップの詳細に関しては、Philips 社が提供する仕様書をご覧ください。

6.2 チップ上のレジスタ

SAA7110 のレジスタは各 8 bit で、00h から 34h まで 53 個あります。各レジスタの最下位ビットを D0、最上位ビットを D7 として、各ビットに順に名前をつけます。主要なビットの名前、位置および役割は以下の通りです。

AINS2 (20h-D0)

AI21 と AI22 のどちらか一方を選択します。(0 … AI22, 1 … AI21)

AINS3 (20h-D1)

AI31 と AI32 のどちらか一方を選択します。(0 … AI32, 1 … AI31)

AINS4 (20h-D2)

AI41 と AI42 のどちらか一方を選択します。(0 … AI42, 1 … AI41)

AIND2 (20h-D5)

AINS2 で選択した入力を enable または disable します。(0 … enable, 1 … disable)

AIND3 (20h-D6)

AINS3 で選択した入力を enable または disable します。(0 … enable, 1 … disable)

AIND4 (20h-D7)

AINS4 で選択した入力を enable または disable します。(0 … enable, 1 … disable)

MX241, MX240 (21h-D5, 21h-D4)

AINS2 および AINS4 で選択した入力の合成法を決めます。(00 … 両方とも有効, 01 … AINS2 側のみ有効, 10 … AINS4 側のみ有効, 11 … 両方とも無効)

MX341, MX340 (22h-D1, 22h-D0)

AINS3 および AINS4 で選択した入力の合成法を決めます。(00 … 両方とも有効, 01 … AINS3 側のみ有効, 10 … AINS4 側のみ有効, 11 … 両方とも無効)

CHRS (0Eh-D2)

BYPS による選択を有効または無効にします。(0 … 有効, 1 … 無効)

BYPS (06h-D7)

CSEL による選択を有効または無効にします。(0 … 有効, 1 … 無効)

CSEL (22h-D5)

MX24 と MX34 で選択した信号のどちらか一方を、色差信号の入力源として使用します。CHRS と BYPS が両方とも 0 のときのみ、意味を持ちます。(0 … MX34 側, 1 … MX24 側)

YSEL (22h-D4)

MX24 と MX34 で選択した信号のどちらか一方を、輝度信号の入力源として使用します。CHRS と BYPS が両方とも 0 のとき以外、同じ信号が色差信号の入力源としても使用されます。(0 … MX24 側, 1 … MX34 側)

HEUC7 - HUEC0 (07h-D7 - 07h-D0)

キャプチャ時の色合いを指定します。(符号つき 8 bit 整数)

SATN7 - SATN0 (12h-D7 - 12h-D0)

キャプチャ時の彩度を指定します。(符号つき 8 bit 整数)

CONT7 - CONT0 (13h-D7 - 13h-D0)

キャプチャ時のコントラストを指定します。(符号つき 8 bit 整数)

BRIG7 - BRIG0 (19h-D7 - 19h-D0)

キャプチャ時の明るさを指定します。(符号なし 8 bit 整数)

SAA7186 のレジスタは各 8 bit で、00h から 10h まで 17 個あります。各レジスタの最下位ビットを D0、最上位ビットを D7 として、各ビットに順に名前をつけます。主要なビットの名前、位置および役割は以下の通りです。

XS9 - XS0 (04h-D3 - 04h-D2, 02h-D7 - 02h-D0)

入力画像データの幅を指定します。(符号なし 10 ビット整数)

YS9 - YS0 (08h-D3 - 08h-D2, 06h-D7 - 06h-D0)

入力画像データの高さを指定します。(符号なし 10 ビット整数)

XO8 - XO0 (04h-D4, 03h-D7 - 03h-D0)

入力画像データの水平開始位置を指定します。左端は 0x010 です。(符号なし 9 ビット整数)

YO8 - YO0 (08h-D4, 07h-D7 - 07h-D0)

入力画像データの垂直開始位置を指定します。入力にもよりますが、上端は 0x010 前後です。(符号なし 9 ビット整数)

EFE, FS1, FS0 (10h-D0, 00h-D1, 00h-D2)

出力画像データの形式を選択します。(100 … RGB 5-5-5 16 bit / pixel, 110 … RGB 8-8-8 24 bit / pixel, 111 … モノクローム 8 bit / pixel など)

MCT (10h-D4)

出力画像データを反転させます。(カラーのとき 0 … 反転しない, 1 … 反転する、モノクロームのとき 0 … 反転する, 1 …反転しない)

XD9 - XD0 (04h-D1 - 04h-D0, 01h-D7 - 01h-D0)

出力画像データの幅を指定します。(符号なし 10 ビット整数)

YD9 - YD0 (08h-D1 - 08h-D0, 05h-D7 - 05h-D0)

出力画像データの高さを指定します。(符号なし 10 ビット整数)

SAA7116 のメモリマップトレジスタはそれぞれ 32 ビットの値を持ち、メモリベースアドレスにオフセット値を加えて指定します。各レジスタの最下位ビットを D0、最上位ビットを D31 として、各ビットに順に名前をつけます。主要なレジスタまたはビットの名前、位置および役割は以下の通りです。

DMA 1 (Even) (00h)

偶数フィールドの画像データを転送する領域の先頭アドレスを指定します。偶数でなければなりません。(符号なし 32 ビット整数)

DMA 1 (Odd) (0Ch)

奇数フィールドの画像データを転送する領域の先頭アドレスを指定します。偶数でなければなりません。(符号なし 32 ビット整数)

Stride 1 (Even) (18h)

偶数フィールドの画像データを転送するとき、一つのラインが終わるごとにアドレスに加算される数値を指定します。4の倍数でなければなりません。偶数フィールドと奇数フィールドを合成するとき利用できます。(符号なし 32 ビット整数)

Stride 1 (Odd) (24h)

奇数フィールドの画像データを転送するとき、一つのラインが終わるごとにアドレスに加算される数値を指定します。4の倍数でなければなりません。偶数フィールドと奇数フィールドを合成するとき利用できます。(符号なし 32 ビット整数)

DMA End (Even) (8Ch)

偶数フィールドの画像データを転送する領域の末尾アドレスに 1 を加えた値を指定します。(符号なし 32 ビット整数)

DMA End (Odd) (90h)

奇数フィールドの画像データを転送する領域の末尾アドレスに 1 を加えた値を指定します。(符号なし 32 ビット整数)

Route (Even), Mode (Even) (30h)

偶数フィールドの画像形式を指定します。(0x39393900 … RGB 32 bit, 0xeeeeee01 … RGB 16 bit など)

Route (Odd), Mode (Odd) (34h)

奇数フィールドの画像形式を指定します。(0x39393900 … RGB 32 bit, 0xeeeeee01 … RGB 16 bit など)

Single Field Capture (Even) (40h-D2)

1 にすると偶数フィールドのキャプチャが開始されます。キャプチャが終了すると 0 に戻ります。

Single Field Capture (Odd) (40h-D3)

1 にすると奇数フィールドのキャプチャが開始されます。キャプチャが終了すると 0 に戻ります。

Range Enable (40h-D15)

画像データを転送するとき、転送先アドレスの範囲を DMA End (Odd) および DMA End (Even) によりチェックします。(0 … チェックしない, 1 … チェックする)

Address Error (Even) (40h-D10)

偶数フィールドの画像データを転送するとき、転送先アドレスが DMA End (Odd) で指定した値を越えたことを示します。(0 … 越えていない, 1 … 越えた)

Address Error (Odd) (40h-D11)

奇数フィールドの画像データを転送するとき、転送先アドレスが DMA End (Even) で指定した値を越えたことを示します。(0 … 越えていない, 1 … 越えた)

Corrupt Disable (40h-D14)

画像データを転送するとき、FIFO バッファのオーバーフローを検出しません。(0 … 検出する, 1 … 検出しない)

Field Corrupt (Even) (40h-D8)

偶数フィールドの画像データを転送するとき、FIFO バッファがオーバーフローしたことを示します。(0 … オーバーフローしていない, 1 … オーバーフローした)

Field Corrupt (Odd) (40h-D9)

奇数フィールドの画像データを転送するとき、FIFO バッファがオーバーフローしたことを示します。(0 … オーバーフローしていない, 1 … オーバーフローした)

I2C Direct Address (64h-D23 - 64h-D16)

他の 2 チップのレジスタに値を書き込む際、対象チップを指定します。(0x9c … SAA7110, 0xb8 … SAA7186)

I2C Direct Sub-Address (64h-D15 - 64h-D8)

他の 2 チップのレジスタに値を書き込む際、レジスタの番号を指定します。(符号なし 8 ビット整数)

I2C Direct Write Data (64h-D7 - 64h-D0)

他の 2 チップのレジスタに値を書き込む際、データの値を指定します。(8 ビットデータ)

I2C New Cycle (64h-D24)

他の 2 チップのレジスタに値を書き込む際、1 にすると書き込みが開始されます。書き込みが終了すると 0 に戻ります。

I2C Direct Abort (60h-D9)

他の 2 チップのレジスタに値を書き込む際、書き込みが正常に終了したことを示します。(0 … 正常終了, 1 … 中断)

ここに述べたレジスタ以外に関しては、Philips 社が提供する仕様書をご覧ください。

6.3 レジスタの読み書き

SAA7116 のレジスタは、PCI 規格にそってメモリ空間にマップされています。レジスタがマップされている領域のベースアドレスは、コンフィギュレーションスペースの 10h - 13h に書かれており、通常は OS を経由して取得可能です。レジスタへのアクセスは、ベースにオフセットを加えた物理アドレスに対する読み書きによって行います。

SAA7110 および SAA7186 のレジスタは、SAA7116 を経由してアクセスします。これらのレジスタは基本的に書き込みしか行えません。書き込みは以下の手順に従って行います。

  1. SAA7116 の I2C Direct Abort (60h-D9) ビットに 1 を書き込みます。
  2. SAA7116 の I2C Direct Address (64h-D23 - 64h-D16) に対象チップを指定します。
  3. SAA7116 の I2C Direct Sub-Address (64h-D15 - 64h-D8) にレジスタの番号を指定します。
  4. SAA7116 の Direct Write Data (64h-D7 - 64h-D0) にデータの値を指定します。
  5. SAA7116 の I2C New Cycle (64h-D24) ビットに 1 を書き込みます。
  6. SAA7116 の I2C New Cycle (64h-D24) ビットが 0 になるまで待機します。
  7. SAA7116 の I2C Direct Abort (60h-D9) ビットが 0 であることを確認します。1 であったときは最初から書き込みをやり直します。

6.4 チップの初期化

各チップを初期化する方法は、Philips 社が提供する仕様書をご覧になるか、Linux 用ドライバのソース Linux-2.0.x/acvc.c に含まれている関数 init7116(), init7186(), init7110() をお読みください。

6.5 キャプチャの実行

実際にキャプチャを実行するためには、すべてのレジスタに適切な値を設定した上で、以下の操作を行います。偶数フィールドのみをキャプチャする場合は、次の通りです。

  1. SAA7116 の Address Error (Even) (40h-D10) ビットに 1 を書き込みます。
  2. SAA7116 の Field Corrupt (Even) (40h-D8) ビットに 1 を書き込みます。
  3. SAA7116 の Single Field Capture (Even) (40h-D2) ビットに 1 を書き込みます。
  4. SAA7116 の Single Field Capture (Even) (40h-D2) ビットが 0 になるまで待機します。
  5. SAA7116 の Address Error (Even) (40h-D10) ビットが 0 であることを確認します。1 であったときは転送先や画像の設定が誤っています。
  6. SAA7116 の Field Corrupt (Even) (40h-D8) ビットが 0 であることを確認します。1 であったときは最初からキャプチャをやり直します。

奇数フィールドのみをキャプチャする場合は次の通りです。

  1. SAA7116 の Address Error (Odd) (40h-D11) ビットに 1 を書き込みます。
  2. SAA7116 の Field Corrupt (Odd) (40h-D9) ビットに 1 を書き込みます。
  3. SAA7116 の Single Field Capture (Odd) (40h-D3) ビットに 1 を書き込みます。
  4. SAA7116 の Single Field Capture (Odd) (40h-D3) ビットが 0 になるまで待機します。
  5. SAA7116 の Address Error (Odd) (40h-D11) ビットが 0 であることを確認します。1 であったときは転送先や画像の設定が誤っています。
  6. SAA7116 の Field Corrupt (Odd) (40h-D9) ビットが 0 であることを確認します。1 であったときは最初からキャプチャをやり直します。

偶数フィールドと奇数フィールドを同時にキャプチャする場合は次の通りです。

  1. SAA7116 の Address Error (Even) (40h-D10) および Address Error (Odd) (40h-D11) ビットに 1 を書き込みます。
  2. SAA7116 の Field Corrupt (Even) (40h-D8) および Field Corrupt (Odd) (40h-D9) ビットに 1 を書き込みます。
  3. SAA7116 の Single Field Capture (Even) (40h-D2) および Single Field Capture (Odd) (40h-D3) ビットに 1 を書き込みます。
  4. SAA7116 の Single Field Capture (Even) (40h-D2) および Single Field Capture (Odd) (40h-D3) ビットの両方が 0 になるまで待機します。
  5. SAA7116 の Address Error (Even) (40h-D10) および Address Error (Odd) (40h-D11) ビットが 0 であることを確認します。どちらか一方でも 1 であったときは転送先や画像の設定が誤っています。
  6. SAA7116 の Field Corrupt (Even) (40h-D8) および Field Corrupt (Odd) (40h-D9) ビットが 0 であることを確認します。どちらか一方でも 1 であったときは最初からキャプチャをやり直します。


前のページ 次のページ 目次