[H8-ML(5679)] AKI-H8/3048 + QVGA LCD でのパフォーマンス
From: Chihiro TOYAMA <cbn24490@xxxxxxxxxxxxxxx>
Date: 2005年09月02日(金)00時31分41秒

はじめまして。
最近、H8 のメーリングリストに入会しました
とやまと申します。
よろしくお願いします。

AKI-H8/3048 + QVGA LCD
コンパイラ:GCC Developer Lite
(内蔵 FLASH にプログラムを書き込み)

AKI-H8/3048 の CPU 基板とマザーボードを
QVGA LCD (240*320) に接続し、いろいろと試している所です。

ソースファイルは最後に記しますが、
GDL でコンパイルして QVGA LCD への書き込みパルス (WRB) を
オシロで測定すると、周期が 8.12us (123.152 KHz) と
かなり遅く感じます。
もっとパフォーマンスが高いと思っていたのですが、
これぐらいなのでしょうか。
240*400= 96000 → 96KHz
となるので、今の状態ですと 1 秒に 1.3 画面ぐらいしか
書き込みができません。

今は簡単なパターンを LCD に表示していますが、将来的には
FLASH メモリと接続し、VGA (640*480) に 60Hz の動画を
表示したいと考えております。(つまり静止画 60 枚を 1 秒間に
送信する)

また、コンパイラの最適化オプションも試したのですが
・最適化なし (-O0) → デフォルト。WRB は 8.12us。100% boot できる
・レベル1 (-O1) → WRB は 5.24us。
  QVGA LCD が boot できない時が有る
  また boot できても表示がくずれる
・レベル2 (-O2) → WRB は 5.12us。boot できず
・レベル3 (-O3) → WRB は 1.75us。boot できず
と言う具合でした。

○ 質問
・最適化無しで書き込みパルス (WRB) が 8.12us と言うのは
 何かコンパイルの仕方が間違っているなど、原因が有るのでしょうか。
 それともこれぐらいなのでしょうか。
・将来的には VGA (640*480) に 60Hz の動画 を目標としていますが
  a. コンパイラを変える
  b. 言語を変える (C → アセンブラ)
  c. マイコンを変える (SH-2 or SH-3)
 のどれが一番良い選択か、意見をお聞かせ下さい。

a. は gcc ではなく、どこかの Web ページでルネサスの純正コンパイラが
一番パフォーマンスが良い、と書かれているのを見ましたので。
b. は開発期間を考えると難しく
c. が一番現実的かな、と思っています。
http://www.apnet.co.jp/product/superh/lineup.html
を見ると 
AP-SH3-1A (SH7709A) 128MHz 44,000円
AP-SH3-2A (SH7709S) 192MHz 46,000円
などを選択すれば VGA 60Hz が可能なのかな、と思っています。

以上、長文となってしまいましたがアドバイスの方、どうか
よろしくお願いします。

--------------------------------------------

// AKI-H8/3048 + QVGA LCD
#include <3048.h>

void waitus (unsigned int us)
{
	while(us > 0) us = us - 1;
}

void write_ir(int reg) // 16bit (not 18bit) // INDEX REGISTER (RSB=L)
{
	P4.DR.BYTE = 0x00; // RSB=L, WRB=L
	PB.DR.BYTE = reg >> 8; PA.DR.BYTE = reg;
	P4.DR.BYTE = 0x01; // RSB=L, WRB=H
}

void write_cr(int reg) // 16bit // CONTROL REGISTER & GRAM (RSB=H)
{
	P4.DR.BYTE = 0x02; // RSB=H, WRB=L
	PB.DR.BYTE = reg >> 8; PA.DR.BYTE = reg;
	P4.DR.BYTE = 0x03; // RSB=H, WRB=H
}

int main(void)
{
int i, x, y;
	P4.DDR = 0xff; // ポート4 出力
	P5.DDR = 0xff; // ポート5 出力 (LED)
	PA.DDR = 0xff; // ポートA 出力
	PB.DDR = 0xff; // ポートB 出力

P5.DR.BYTE = 0xff;     // 点灯
// P5.DR.BYTE = 0x00;     // 消灯

waitus(65535);
waitus(65535);
waitus(65535);
waitus(65535);

// --- PowerOnSequence1 --- (省略)
// --- PowerOnSequence2 --- (省略)
// --- Display On Sequence --- (省略)
// Address setting
write_ir(0x400);
write_cr(0x0031);
write_ir(0x401);
write_cr(0x0001);
write_ir(0x402);
write_cr(0x0000);
write_ir(0x403);
write_cr(0x018F);

P5.DR.BYTE = 0x00;     // 消灯

write_ir(0x202);
for(i = 0; i < 1000; i++){
	for(y = 0; y < 320; y++)
		for(x = 0; x < 240; x++)
			write_cr(x);
	P5.DR.BYTE = 0x00;     // 消灯
	for(y = 0; y < 320; y++)
		for(x = 0; x < 240; x++)
			write_cr(y);
	P5.DR.BYTE = 0xff;     // 点灯
}

}
スレッド概略
[表示中](起点)


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]