| 場所 | × | ○ |
|---|---|---|
| p.8 1.4 | APIインターフェース | API |
| p.11 2.3 | 動画画像 | 動画 |
| pp.21-22 表 | Not Apply | Not Applicable |
| pp.22-23 | Sample program of C Language | A sample code in C |
| p.32 | 用件 | 要件 |
SM501のレジスタへのアクセスはioctlシステムコールを, VRAMへのアクセスはLinuxのフレームバッファアーキテクチャの一部を用います。
Linuxフレームバッファアーキテクチャは, Geert Uytterhoeven <geert@linux-m68k.org> によって維持されているアーキテクチャで,最新バージョンは2001年5月10日です。 詳細については,「Appendix-A: Frame Buffer Devices」を参照願います。 (正確を期すため,原文のまま掲示しています。)
SM501レジスタへのアクセスにはioctlを用います。 ioctlの使用にはターゲットアーキテクチャのヘッダファイルが必要です。
# cp -R linux/include/asm-sh /usr/local/sh4-linux/include/asm
レジスタ値を読み込み,変更し,書き込むサンプルコードを以下に示します。
int reg32;
int value = 0xab;
int mask = 0x0000ff00;
// open device node
int fd = open("/dev/fb0", O_RDWR);
// set MMIO address
ioctl(fd, 0, address);
// read register value
ioctl(fd, 1, ®32);
// change register value
reg32 &= ~mask;
reg32 |= value << 8;
// write register value
ioctl(fd, 2, reg32);
レジスタ値変更の際,予約されているビットを変更しないように注意してください。
画面解像度,ビデオタイミング信号,ドットクロック等は SM501レジスタによって完全に制御されます。 レジスタ値を変更することによって画面解像度を動的に変更することが可能です。 画面解像度設定の際には以下の点に留意願います。
SM501は7つのビデオプレーンを持っています。 本製品で使用するのは,以下の4つのプレーンです。
詳細は添付のデータシートの1-12,1-23章を参照して下さい。
各プレーンにはフレームバッファのデバイスノードを通じてアクセスします。 フレームバッファの詳細はAppendix-Aを参照して下さい。 RGB565モードのグラフィックプレーン(fb0)にカラー画像data[3][w][h]を 描画するサンプルコードを以下に示します。
int xres, yres, size, i, j, idx, r, g, b;
unsigned char *ptr;
int fd = open("/dev/fb0", O_RDWR);
size = xres * yres * 2;
ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
for (j = 0; j < yres; ++j)
for (i = 0; i < xres; ++i) {
idx = (x + i) * 2 + (y + j) * xres * 2;
r = data[0][j][i] >> 3;
g = data[1][j][i] >> 2;
b = data[2][j][i] >> 3;
*((unsigned short int *)(ptr + idx)) = (r << 11) | (g << 5) | b;
}
munmap(ptr, size);
本製品の動作を確認するためのサンプルプログラムが /usr/wpar/bin/ に収録されています。 これらのプログラムは評価用ですので,お客様の製品に組み込んで使用することはできません。
# wpa_init 3
# wpa_cls 0
# wpa_mod 0x080000 0x76543210
# wpa_mod2 0x080000
# wpa_view 1 1
# wpa_vctl 100, 100, 1.2
# wpa_actl 100, 100, 199, 199
# wpa_cap 1
# wpa_draw 0 wivicomlogo.ppm
# wpa_vidtune
# image_test
# gpio_test
サンプルプログラムを実行する際にはレジスタ値等を初期状態に戻すために再起動してください。
以下に,メモリマップとレジスタの設定例を挙げます。 詳細についてはデータシートの1-26から1-28章を参照願います。
違うとこだけ
共通
| 80040 | 00016203 | Video Display Control |
| 80080 | 00010001 | Video Alpha Display Control |
| 80100 | 00010001 | Alpha Display Control |
| 80200 | 00010001 | CRT Display Control |
| 90000 | 000022d1 | Capture Control |
| 80000 | 07013101 | Panel Display Control |
VGA
| 80208 | 05000500 | CRT FB Offset/Window Width |
SVGA
| 80208 | 06400640 | CRT FB Offset/Window Width |
XGA
| 80208 | 08000800 | CRT FB Offset/Window Width |