所用液晶:240*320 TFT彩屏
处理器: S3C44B0
液晶和处理器传输数据的接口为SPI,液晶初始化和直接写GRAM刷全屏没问题了。但是我想通过开缓冲区的方式写屏却有问题,一直找不到原因,请各位帮忙分析一下。
我的思路是调用一个描点函数DrawPixel和一个刷新函数UpdateDisplay 在屏上画线来验证这两个函数的正确性。
现象:执行了刷白屏后,屏幕右上角局部显示朱红色(与LCD初始化函数memset设置的颜色0xF8一致),然后设备就死机了。
我在刷新函数中添加串口调试信息,串口只输出了一次:LCD Update set! 难道刷新函数运行至“// 在变化区域写入显示数据”之前的位置就卡死了?是不是我刷新函数的代码有问题?
下面是我写的描点函数和刷新函数的代码:
/**********************************************************************
* 函数名称: DrawPixel0
*
* 功能描述: 将液晶上坐标点(iScrX,iScrY)的象素用uiColor填充
*
* 输入参数: iScrX - 横坐标值
* iScrY - 纵坐标值
* uiColor - 要填充的颜色
***********************************************************************/
void DrawPixel(int iScrX, int iScrY, uint uiColor)
{
uchar *pucCurrentDispMem, *pucColorTemp;
uiColor&=0xFFFF;
if (iScrX >= EG_lcd_tViewPort.lLeft && iScrX <= EG_lcd_tViewPort.lRight &&
iScrY >= EG_lcd_tViewPort.lTop && iScrY <= EG_lcd_tViewPort.lBottom)
{
pucColorTemp = (uchar *)&uiColor;
pucCurrentDispMem = &EG_lcd_pucCurrentDispMem[(iScrY * EM_lcd_DotsPerLine + iScrX)*EM_lcd_BytePerPixel];
pucCurrentDispMem[0] = pucColorTemp[0];
pucCurrentDispMem[1] = pucColorTemp[1];
}
}
/*******************************************************************************
* 函数名称: UpdateDisplay
*
* 功能描述: 刷新显示
*
*******************************************************************************/
void UpdateDisplay(void)
{
uchar *pucCurrentDispMem;
ushort datatemp;
uint j;
pucCurrentDispMem = EG_lcd_pucCurrentDispMem;
WriteRS232(hRS232Handle, 16, 1, "LCD Update set!\r\n"); // 串口调试信息输出
SetWindows(0x0000,0x0000,0x00EF,0x013F);
SetCursor(0x0000,0x0000);
// 在变化区域写入显示数据
WRITE_INDEX(0x22);
for (j=0; j <76800; j++)
{
// 写数据
datatemp=((ushort)(*pucCurrentDispMem++)) + (((ushort)(*pucCurrentDispMem++))<<8);
WRITE_DATA(datatemp);
}
}
| |
|