PSP液晶への表示について初期化サンプル公開
ご要望にお答えして、SH-2AでPSP-1000の液晶を表示させる場合の初期化処理を公開します。
全部を貼り付けたら、5000文字を超える制限で貼り付けできなかったので、wait処理を省いています。
本当は、HEWのプロジェクトを公開したかったのですが、整理できてないので初期化だけです。
ご注意いただきたいのは、回路として、PE0に、DISP端子, PE1は、バックライト電源のOn/Off制御ができるようになっています。DISP端子は、マニュアルで禁止区間の説明があるので、それ以外で制御するようにしています。 (そこを載せたほうがいいのかも・・・)とりあえず今日は以上です。
見難かったらごめんなさい。
全部を貼り付けたら、5000文字を超える制限で貼り付けできなかったので、wait処理を省いています。
本当は、HEWのプロジェクトを公開したかったのですが、整理できてないので初期化だけです。
ご注意いただきたいのは、回路として、PE0に、DISP端子, PE1は、バックライト電源のOn/Off制御ができるようになっています。DISP端子は、マニュアルで禁止区間の説明があるので、それ以外で制御するようにしています。 (そこを載せたほうがいいのかも・・・)とりあえず今日は以上です。
見難かったらごめんなさい。
完全ソースは、ここからダウンロードできます。
#define __SH7262BOARD_LCD_C__
//---------------------------------------------------------------------------
// FILE :sh7262board_lcd.c
// DATE :2010/5/1
// DESCRIPTION :TFT-LCD LQ043T3DX02 液晶制御
// CPU TYPE :SH72620
//---------------------------------------------------------------------------
#include "define.h"
#include "iodefine.h"
#include <machine.h>
//---------------------------------------------------------------------------
// FILE :sh7262board_lcd.c
// DATE :2010/5/1
// DESCRIPTION :TFT-LCD LQ043T3DX02 液晶制御
// CPU TYPE :SH72620
//---------------------------------------------------------------------------
#include "define.h"
#include "iodefine.h"
#include <machine.h>
//---------------------------------------------------------------------------
//
// Abstract: 液晶初期化
//
// Parameters: なし
//
// Returns: なし
//
// Note: 液晶(TFT-LCD LQ043T3DX02)をビデオディスプレイコントローラで
// 利用するための初期設定を実施する。
//
//---------------------------------------------------------------------------
void lcd_init(void)
{
//
// Abstract: 液晶初期化
//
// Parameters: なし
//
// Returns: なし
//
// Note: 液晶(TFT-LCD LQ043T3DX02)をビデオディスプレイコントローラで
// 利用するための初期設定を実施する。
//
//---------------------------------------------------------------------------
void lcd_init(void)
{
////////////////////////////////////////////////////////////////////////////
// ポート機能の選択
////////////////////////////////////////////////////////////////////////////
PORT.PGCR7.WORD = 0x5A01; // LCD_DATA0 利用(Reserve領域の0x5Aはおまじない)
PORT.PGCR4.WORD = 0x1111; // LCD_CLK, LCD_DE, LCD_HSYNC, LCD_VSYNC 利用
PORT.PGCR3.WORD = 0x1111; // LCD_DATA15, LCD_DATA14, LCD_DATA13, LCD_DATA12 利用
PORT.PGCR2.WORD = 0x1111; // LCD_DATA11, LCD_DATA10, LCD_DATA9, LCD_DATA8 利用
PORT.PGCR1.WORD = 0x1111; // LCD_DATA7, LCD_DATA6, LCD_DATA5, LCD_DATA4 利用
PORT.PGCR0.WORD = 0x1110; // LCD_DATA3, LCD_DATA2, LCD_DATA1 利用
// PE0, PE1 を出力端子設定
PORT.PEIOR0.BIT.PE0IOR = 1; // DISP端子
PORT.PEIOR0.BIT.PE1IOR = 1; // バックライト
PORT.PEDR0.BIT.PE0DR = 0; // DISP端子OFF
PORT.PEDR0.BIT.PE1DR = 1; // バックライトOFF
// 低消費電力モードへ移行してもVDC3へのクロック供給を継続する。
CPG.STBCR7.BIT.MSTP74 = 0;
////////////////////////////////////////////////////////////////////////////
// ビデオディスプレイコントローラの初期化
////////////////////////////////////////////////////////////////////////////
// ■SGモード設定レジスタ
VDC3.SGMODE.BIT.EX_SYNC_MODE = 0; // 0:自走モード
VDC3.SYNCNT.BIT.RGB_TIM = 0; // 0:パネルクロックの立ち上がり同期で出力
VDC3.PANEL_CLKSEL.BIT.ICKEN = 0; // 動作禁止
VDC3.PANEL_CLKSEL.BIT.ICKSEL = 1; // 0:外部クロックを選択(LCD_EXTCLK)
// ■同期信号サイズレジスタ
VDC3.SYN_SIZE.BIT.SYN_HEIGHT= LCD_VERTICAL_PERIOD;
// ■垂直同期信号タイミング制御レジスタ
VDC3.PANEL_VSYNC_TIM.BIT.VSYNC_START = LCD_VERTICAL_START;
// 0 HSYNC_START[10:0]
// 41 HSYNC_END[10:0]
VDC3.PANEL_HSYNC_TIM.BIT.HSYNC_START = LCD_HORIZON_START;
// LCDの表示待ち
////////////////////////////////////////////////////////////////////////////
lcd_disp_wait();
// ↓以降は、LCDのバックライトがON状態で表示される。
// ■VSYNC周期出力制御レジスタ
// 285ライン目のステータス変化とすることで、表示範囲外の最大14ライン分の時間を
// 有効に利用できるようになる。
VDC3.SGINTCNT.BIT.INT_LINE_NUM = 285;
}// ポート機能の選択
////////////////////////////////////////////////////////////////////////////
PORT.PGCR7.WORD = 0x5A01; // LCD_DATA0 利用(Reserve領域の0x5Aはおまじない)
PORT.PGCR4.WORD = 0x1111; // LCD_CLK, LCD_DE, LCD_HSYNC, LCD_VSYNC 利用
PORT.PGCR3.WORD = 0x1111; // LCD_DATA15, LCD_DATA14, LCD_DATA13, LCD_DATA12 利用
PORT.PGCR2.WORD = 0x1111; // LCD_DATA11, LCD_DATA10, LCD_DATA9, LCD_DATA8 利用
PORT.PGCR1.WORD = 0x1111; // LCD_DATA7, LCD_DATA6, LCD_DATA5, LCD_DATA4 利用
PORT.PGCR0.WORD = 0x1110; // LCD_DATA3, LCD_DATA2, LCD_DATA1 利用
// PE0, PE1 を出力端子設定
PORT.PEIOR0.BIT.PE0IOR = 1; // DISP端子
PORT.PEIOR0.BIT.PE1IOR = 1; // バックライト
PORT.PEDR0.BIT.PE0DR = 0; // DISP端子OFF
PORT.PEDR0.BIT.PE1DR = 1; // バックライトOFF
// 低消費電力モードへ移行してもVDC3へのクロック供給を継続する。
CPG.STBCR7.BIT.MSTP74 = 0;
////////////////////////////////////////////////////////////////////////////
// ビデオディスプレイコントローラの初期化
////////////////////////////////////////////////////////////////////////////
// ■SGモード設定レジスタ
VDC3.SGMODE.BIT.EX_SYNC_MODE = 0; // 0:自走モード
// 1:映像入力のVsync に同期
VDC3.SGMODE.BIT.RGB565 = 0; // 0:「27.6.1(4)RGB888→RGB565 変換」に示す演算による変換
// 1:下位ビット切り捨て
// ■同期信号制御レジスタVDC3.SYNCNT.BIT.RGB_TIM = 0; // 0:パネルクロックの立ち上がり同期で出力
// 1:パネルクロックの立ち下がり同期で出力
VDC3.SYNCNT.BIT.VSYNC_TIM = 0; // 0:パネルクロックの立ち上がり同期で出力
// 1:パネルクロックの立ち下がり同期で出力
VDC3.SYNCNT.BIT.HSYNC_TIM = 0; // 0:パネルクロックの立ち上がり同期で出力
// 1:パネルクロックの立ち下がり同期で出力
//VDC3.SYNCNT.BIT.DE_TIM = 0; // 0:パネルクロックの立ち上がり同期で出力(未使用)
// 1:パネルクロックの立ち下がり同期で出力
//VDC3.SYNCNT.BIT.M_DISP_TIM = 0; // 0:パネルクロックの立ち上がり同期で出力(未使用)
// 1:パネルクロックの立ち下がり同期で出力
VDC3.SYNCNT.BIT.VSYNC_TYPE = 1; // 0:反転なし
// 1:反転出力
VDC3.SYNCNT.BIT.HSYNC_TYPE = 1; // 0:反転なし
// 1:反転出力
//VDC3.SYNCNT.BIT.DE_TYPE = 0; // 0:反転なし(未使用)
// 1:反転出力
//VDC3.SYNCNT.BIT.DE_TYPE = 0; // 0:反転なし(未使用)
// 1:反転出力
//VDC3.SYNCNT.BIT.M_DISP_TYPE = 0; // 0:反転なし(未使用)
// 1:反転出力
// ■パネルクロックセレクトレジスタVDC3.PANEL_CLKSEL.BIT.ICKEN = 0; // 動作禁止
VDC3.PANEL_CLKSEL.BIT.ICKSEL = 1; // 0:外部クロックを選択(LCD_EXTCLK)
// 1:バスクロックを選択(Bφ)
VDC3.PANEL_CLKSEL.BIT.DCDR = 6; // 1/4 = 12MHz(LCDの範囲外だが動作する。)
// 1/6 = 8MHz(LCDの範囲内)
VDC3.PANEL_CLKSEL.BIT.ICKEN = 1; // 動作許可// ■同期信号サイズレジスタ
VDC3.SYN_SIZE.BIT.SYN_HEIGHT= LCD_VERTICAL_PERIOD;
// 帰線期間を含めた垂直方向ライン数
VDC3.SYN_SIZE.BIT.SYN_WIDTH = LCD_HORIZON_PERIOD;// ■垂直同期信号タイミング制御レジスタ
VDC3.PANEL_VSYNC_TIM.BIT.VSYNC_START = LCD_VERTICAL_START;
// 基準から、パネル出力用の垂直同期信号(VSYNC)の"1"セット位置
VDC3.PANEL_VSYNC_TIM.BIT.VSYNC_END = LCD_VERTICAL_END;
// 基準から、パネル出力用の垂直同期信号(VSYNC)の"0"クリア位置
// ■ 水平同期信号タイミング制御レジスタ// 0 HSYNC_START[10:0]
// 41 HSYNC_END[10:0]
VDC3.PANEL_HSYNC_TIM.BIT.HSYNC_START = LCD_HORIZON_START;
// 基準から、パネル出力用の水平同期信号(HSYNC)の"1"セット位置(0固定)
VDC3.PANEL_HSYNC_TIM.BIT.HSYNC_END = LCD_HORIZON_END;
// 基準から、パネル出力用の水平同期信号(HSYNC)の"0"クリア位置
////////////////////////////////////////////////////////////////////////////// LCDの表示待ち
////////////////////////////////////////////////////////////////////////////
lcd_disp_wait();
// ↓以降は、LCDのバックライトがON状態で表示される。
// ■VSYNC周期出力制御レジスタ
// 285ライン目のステータス変化とすることで、表示範囲外の最大14ライン分の時間を
// 有効に利用できるようになる。
VDC3.SGINTCNT.BIT.INT_LINE_NUM = 285;