carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

ソースコード公開(1画面描画)

/*
**---------------------------------------------------------------------------
**
** Abstract: 480×272の全ピクセル描画(1回描画更新)
**
** Parameters: なし
**
** Returns: なし
**
** Note: 本関数を繰り返し呼び出すことで、画面をリフレッシュ
**
**---------------------------------------------------------------------------
*/
void Lcd_Display(void)
{
int i;

////////////////////////////////////////////////////////////////////////////
// VSYNCをLOWのまま、10ライン分送信する。
// DATAは、無効
////////////////////////////////////////////////////////////////////////////
dLCD_VSYNC_LOW;
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot(); //10

////////////////////////////////////////////////////////////////////////////
// VSYNCをHIにして、2ライン分送信する。
// DATAは、無効です。
////////////////////////////////////////////////////////////////////////////
dLCD_VSYNC_HI;
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot(); //2

////////////////////////////////////////////////////////////////////////////
// 272ライン分送信する。
// DATAが有効です。
////////////////////////////////////////////////////////////////////////////
g_pDataLeft = &uc8Data[0];
g_pDataRight = &uc8Data[0];
for(i = 0 ; i < 272 ; i++){
Lcd_Display_Horizon();
}

////////////////////////////////////////////////////////////////////////////
// 2ライン分送信する。
// DATAは、無効です。
////////////////////////////////////////////////////////////////////////////
Lcd_Display_HorizonNot();
Lcd_Display_HorizonNot(); //2
}

uc8Dataの配列には、240×272のフルカラービットマップのデータを格納しています。つまりデータのサイズは、uc8Data[240*272*3]=192kByteのデータです。本当は、uc8Data[480*272*3]=382kByteのデータを格納したいのですが、V850のフラッシュサイズが256kByteであり、全領域のデータをFlashに格納することができません。

そこで、半分のデータをFlashに収め、画面の左右に同じフルカラーデータを表示します。そのために、272ライン分のデータ送信前に、同一のアドレスを設定しています。
※ちなみにグローバル変数を利用しているのは、少しでも高速化するためです。