carcon999のブログ

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

ソースコード公開(1ライン転送関数)

/*
**---------------------------------------------------------------------------
**
** Abstract: 描画に関係ない1ライン分のクロックの出力
**
** Parameters: なし
**
** Returns: なし
**
** Note: DATAラインは関係無いので、出力処理を省くことで、少しでも高速化
**
**---------------------------------------------------------------------------
*/
void Lcd_Display_HorizonNot(void)
{
int i;

////////////////////////////////////////////////////////////////////////////
// HSYNCがLOWのまま41回のクロック出力
////////////////////////////////////////////////////////////////////////////
dLCD_HSYNC_LOW;

for(i = 0 ; i < dHSYNC_LOW_TIMING ; i++){
dLCD_CK_HI;
dLCD_CK_LOW;
}

////////////////////////////////////////////////////////////////////////////
// HSYNCをHIにして2回のクロック出力
////////////////////////////////////////////////////////////////////////////
dLCD_HSYNC_HI;

for(i = 0 ; i < (2+480+2) ; i++){
dLCD_CK_HI;
dLCD_CK_LOW;
}
}

/*
**---------------------------------------------------------------------------
**
** Abstract: 描画に関係する1ライン分のクロックとRGBデータの出力
**
** Parameters: なし
**
** Returns: なし
**
** Note: DATAラインは関係無いので、出力処理を省くことで、少しでも高速化
**
**---------------------------------------------------------------------------
*/
void Lcd_Display_Horizon(void)
{
int i;

////////////////////////////////////////////////////////////////////////////
// HSYNCがLOWのまま41回のクロック出力
////////////////////////////////////////////////////////////////////////////
dLCD_HSYNC_LOW;

for(i = 0 ; i < dHSYNC_LOW_TIMING ; i++){
dLCD_CK_HI;
dLCD_CK_LOW;
}

////////////////////////////////////////////////////////////////////////////
// HSYNCをHIにして2回のクロック出力
////////////////////////////////////////////////////////////////////////////
dLCD_HSYNC_HI;

dLCD_CK_HI;
dLCD_CK_LOW;
dLCD_CK_HI;
dLCD_CK_LOW;

////////////////////////////////////////////////////////////////////////////
// 240ピクセルのデータを転送(左)
////////////////////////////////////////////////////////////////////////////
for(i = 0 ; i < 240 ; i++){
dLCD_CK_HI;
dPORTLCD_R0_7 = *g_pDataLeft++; // R
dPORTLCD_G0_7 = *g_pDataLeft++; // G
dPORTLCD_B0_3 = *g_pDataLeft; // Bの下位4bit
dPORTLCD_B4_7 = (*g_pDataLeft >> 1);// Bの上位4bit

dLCD_CK_LOW;
g_pDataLeft++;
}

////////////////////////////////////////////////////////////////////////////
// 240ピクセルのデータを転送(右)
////////////////////////////////////////////////////////////////////////////
for(i = 0 ; i < 240 ; i++){
dLCD_CK_HI;
dPORTLCD_R0_7 = *g_pDataRight++; // R
dPORTLCD_G0_7 = *g_pDataRight++; // G
dPORTLCD_B0_3 = *g_pDataRight; // Bの下位4bit
dPORTLCD_B4_7 = (*g_pDataRight >> 1);// Bの上位4bit

dLCD_CK_LOW;
g_pDataRight++;
}

////////////////////////////////////////////////////////////////////////////
// 余分に2クロック出力
////////////////////////////////////////////////////////////////////////////
dLCD_CK_HI;
dLCD_CK_LOW;
dLCD_CK_HI;
dLCD_CK_LOW;
}

Lcd_Display_HorizonNot関数は、RGBのデータは転送せずに、単にクロックのみを送信します。この関数を別に用意しなくても描画可能ですが、少しでも描画更新の時間を早くするためにこんな関数を用意しました。