« 報酬 | トップページ | 速度~「秋月の\300LCD」その3 »

2010年8月12日 (木)

メモ~「秋月の\300LCD」その2.5

MEDIO write:

 

 取り急ぎ、秋月LCDとかSH2Aいじって気がついた点をメモしておく。内容無検証。

 

1.秋月LCD

 ドットクロックはバスクロック(Bφ)基準。48MHzを分周。分周比はPANEL_CLKSELで変更。

 試験した限り24MHzでも問題無く表示。画面は相当明るくて、外付けのVRでも調整出来ない。クロックを落とすと暗くなる。(正確にはコントラストが変わる)

 落としすぎた時と、電源投入直後(冷間時)は、コントラストが極端に大きくなり、一部階調が飛んで見える。これも10分程度でLCD基板が暖まってくると綺麗に見えるようになる。

※カラーバー表示では気がつかなかった...色数が少なく、かつ階調がある「アナログ・イラスト」(正に表示したサンプル絵が...)なんかだと顕著に見える...セル塗り絵は大丈夫?

 

2.HEWのデバッグについて

 USB経由で止まるという話を聞いたけど、うちでは大丈夫だった。が、実行した後に制御が出来ない(STOP出来ない)状態だった。

 表示は「Power on reset is detected.」だけで、良く聞く「Abort」は出ていない。

 

 main()の最後に、while(1);で無限ループを入れてあったんだけど、これで止めてしまうとHEWからはもうSTOP出来ない。

※画像表示試験プログラムとしては処理は終わっているんだから正解なんだけど...こうなったら「プログラムに手を入れて再ビルド~試験」の前に、毎回HEWを強制終了しなくちゃならなかった。とても面倒ですよね。

 

 Interface誌のサンプルの様に、この部分にLEDの点滅等の処理を入れておくとOK。

 

 

 現状、動いている設定を。

// Akizuki's TFT-LCD LTA042B010F
#define LCD_HORIZONTAL_PERIOD         508 /* 水平同期周期 */
#define LCD_HORIZONTAL_DISPLAY_PERIOD 400 /* 水平表示期間 */
#define LCD_HORIZONTAL_BACK_PORCH     107 /* 水平バックポーチ */
#define LCD_HORIZONTAL_PULSE_WIDTH      1 /* 水平同期期間 */
#define LCD_VERTICAL_PERIOD           112 /* 垂直同期周期 */
#define LCD_VERTICAL_DISPLAY_PERIOD    96 /* 垂直表示期間 */
#define LCD_VERTICAL_BACK_PORCH        15 /* 垂直バックポーチ */
#define LCD_VERTICAL_PULSE_WIDTH        1 /* 垂直同期期間 */

// Graphics part 1
#define GRA1_HORIZONTAL_SIZE          400 /* 水平表示サイズ */
#define GRA1_VERTICAL_SIZE             96 /* 垂直表示サイズ */
#define GRA1_HORIZONTAL_POS             0 /* 水平表示位置 */
#define GRA1_VERTICAL_POS               0 /* 垂直表示位置 */
#define GRA1_VRAM_BASE         0x3C078000 /* 大容量内蔵RAM ページ4(240KB) */

//  VDC3 init.
PORT.PGCR7.WORD = 0x5A01;  // LCD_DATA0  *** PGCR7 is can not 8bit access!  and, H-Byte is only 0x5A

PORT.PGCR4.BIT.PG19MD = 1;  // LCD_CLK, LCD_DE, LCD_HSYNC, LCD_VSYNC
PORT.PGCR4.BIT.PG18MD = 1;
PORT.PGCR4.BIT.PG17MD = 1;
PORT.PGCR4.BIT.PG16MD = 1;

PORT.PGCR3.BIT.PG15MD = 1;  // LCD_DATA15-12
PORT.PGCR3.BIT.PG14MD = 1;
PORT.PGCR3.BIT.PG13MD = 1;
PORT.PGCR3.BIT.PG12MD = 1;

PORT.PGCR2.BIT.PG11MD = 1;  // LCD_DATA11-8
PORT.PGCR2.BIT.PG10MD = 1;
PORT.PGCR2.BIT.PG9MD = 1;
PORT.PGCR2.BIT.PG8MD = 1;

PORT.PGCR1.BIT.PG7MD = 1;  // LCD_DATA7-4
PORT.PGCR1.BIT.PG6MD = 1;
PORT.PGCR1.BIT.PG5MD = 1;
PORT.PGCR1.BIT.PG4MD = 1;

PORT.PGCR0.BIT.PG3MD = 1;  // LCD_DATA3-1
PORT.PGCR0.BIT.PG2MD = 1;
PORT.PGCR0.BIT.PG1MD = 1;

//  clock gen. to VDC3
CPG.STBCR7.BIT.MSTP74 = 0;

//  display controler init.
VDC3.SGMODE.BIT.EX_SYNC_MODE = 0;
VDC3.SGMODE.BIT.RGB565 = 1;

VDC3.SYNCNT.BIT.RGB_TIM = 1;
VDC3.SYNCNT.BIT.VSYNC_TIM = 1;
VDC3.SYNCNT.BIT.HSYNC_TIM = 1;
VDC3.SYNCNT.BIT.DE_TIM = 1;
VDC3.SYNCNT.BIT.M_DISP_TIM = 1;
VDC3.SYNCNT.BIT.VSYNC_TYPE = 1;
VDC3.SYNCNT.BIT.HSYNC_TYPE = 1;
VDC3.SYNCNT.BIT.DE_TYPE = 0;
VDC3.SYNCNT.BIT.M_DISP_TYPE = 0;

VDC3.PANEL_CLKSEL.BIT.ICKEN = 0;
VDC3.PANEL_CLKSEL.BIT.ICKSEL = 1;
VDC3.PANEL_CLKSEL.BIT.DCDR = 0x04;    // 48MHz / 6 ... about 8MHz
VDC3.PANEL_CLKSEL.BIT.ICKEN = 1;

VDC3.SYN_SIZE.BIT.SYN_HEIGHT = LCD_VERTICAL_PERIOD;
VDC3.SYN_SIZE.BIT.SYN_WIDTH = LCD_HORIZONTAL_PERIOD;

VDC3.PANEL_VSYNC_TIM.BIT.VSYNC_START = 0;
VDC3.PANEL_VSYNC_TIM.BIT.VSYNC_END = LCD_VERTICAL_PULSE_WIDTH;
VDC3.PANEL_HSYNC_TIM.BIT.HSYNC_START = 0;
VDC3.PANEL_HSYNC_TIM.BIT.HSYNC_END = LCD_HORIZONTAL_PULSE_WIDTH;

VDC3.DE_SIZE.BIT.DE_HEIGHT = LCD_VERTICAL_DISPLAY_PERIOD;
VDC3.DE_SIZE.BIT.DE_WIDTH = LCD_HORIZONTAL_DISPLAY_PERIOD;

VDC3.DE_START.BIT.DE_START_V = LCD_VERTICAL_BACK_PORCH;
VDC3.DE_START.BIT.DE_START_H = LCD_HORIZONTAL_BACK_PORCH + LCD_HORIZONTAL_PULSE_WIDTH;

VDC3.GRA_VSYNC_TIM.BIT.GRA_VSYNC_START = 0;

//  graphics unit1 init.
VDC3.GRCMEN1.BIT.WE = 0;
VDC3.GRCMEN1.BIT.DEN = 1;
VDC3.GRCMEN1.BIT.VEN = 0;

VDC3.GRCBUSCNT1.BIT.BURST_MODE = 0;
VDC3.GRCBUSCNT1.BIT.BUS_FORMAT = 0;
VDC3.GRCBUSCNT1.BIT.ENDIAN = 0;

VDC3.GROPSADR1.BIT.GROPSADR = GRA1_VRAM_BASE;

VDC3.GROPSWH1.BIT.GROPSH = GRA1_VERTICAL_SIZE;
VDC3.GROPSWH1.BIT.GROPSW = GRA1_HORIZONTAL_SIZE;

VDC3.GROPSOFST1.BIT.GROPSOFST = GRA1_HORIZONTAL_SIZE * 2;

VDC3.GROPDPHV1.BIT.GROPDPV = LCD_VERTICAL_BACK_PORCH - 1 + GRA1_VERTICAL_POS;
VDC3.GROPDPHV1.BIT.GROPDPH = LCD_HORIZONTAL_BACK_PORCH - 16 + GRA1_HORIZONTAL_POS;

VDC3.GROPBASERGB1.BIT.BASE_R = 0x1f;
VDC3.GROPBASERGB1.BIT.BASE_G = 0x3f;
VDC3.GROPBASERGB1.BIT.BASE_B = 0x1f;

VDC3.GRCMEN1.BIT.WE = 1;

//  graphics unit2 init.
VDC3.GRCMEN2.BIT.WE = 0;
VDC3.GRCMEN2.BIT.DEN = 0;
VDC3.GRCMEN2.BIT.VEN = 1;
VDC3.GRCMEN2.BIT.WE = 1;

 DEは当初LCDの6pin(かな?と)に繋いで試験したんだけど、全然表示位置等が変わらない。

 あくまで表示の原点はH_Syncからとなっている?DE自体がこのLCDに無い?

|

« 報酬 | トップページ | 速度~「秋月の\300LCD」その3 »

パソコン・インターネット」カテゴリの記事

電子回路」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/437678/36126306

この記事へのトラックバック一覧です: メモ~「秋月の\300LCD」その2.5:

« 報酬 | トップページ | 速度~「秋月の\300LCD」その3 »