如下是我程序的大体流程:不知这样的双显存切换有没有什么问题呢?我按这个流程写完程序后,来回按按键WAVE_KEY和PARA_KEY切换显示画面,有明显的闪烁感(就是刚切换那会儿)。自已老是找不出原因来。在切换中开关PPI是不是会有影响?但是不开关PPI,只开关DMA,显示会出现偏移。请坛主指点下!万分感谢!
void gui_draw_point(INT16S x, INT16S y, INT32U color)
{
if (0 == tft_ctrl.bits.write)
{
//写入A
tft_bufferA[y][3 * x] = (color >> 16) & 0xFF; /* R */
tft_bufferA[y][3 * x + 1] = (color >> 8) & 0xFF; /* G */
tft_bufferA[y][3 * x + 2] = (color) & 0xFF; /* B */
}
else
{
//写入B
tft_bufferB[y][3 * x] = (color >> 16) & 0xFF; /* R */
tft_bufferB[y][3 * x + 1] = (color >> 8) & 0xFF; /* G */
tft_bufferB[y][3 * x + 2] = (color) & 0xFF; /* B */
}
}
void write_change(void)
{
static INT32S i = 0;
if (1 == tft_ctrl.bits.disp)
{
uart_printf("当前显示A\n");
}
else
{
uart_printf("当前显示B\n");
}
if (i++ % 2)
{
uart_printf("写入A\n");
tft_ctrl.bits.write = 0;
tft_ctrl.bits.disp = 1;
}
else
{
uart_printf("写入B\n");
tft_ctrl.bits.write = 1;
tft_ctrl.bits.disp = 0;
}
}
void disp_change(void)
{
if (1 == tft_ctrl.bits.disp)
{
uart_printf("显示A\n");
*pDMA0_CONFIG &= (INT16U)(~DMAEN); /* 禁止DMA0 */
asm("ssync;");
*pPPI_CONTROL &= (INT16U)(~PORT_EN); /* 禁止PPI */
asm("ssync;");
/* 更改显示缓冲 */
*pDMA0_START_ADDR = tft_bufferA[0];
*pDMA0_CONFIG |= (INT16U)DMAEN; /* 使能DMA0 */
asm("ssync;");
*pPPI_CONTROL |= (INT16U)PORT_EN; /* 使能PPI */
asm("ssync;");
}
else
{
uart_printf("显示B\n");
*pDMA0_CONFIG &= (INT16U)(~DMAEN); /* 禁止DMA0 */
asm("ssync;");
*pPPI_CONTROL &= (INT16U)(~PORT_EN); /* 禁止PPI */
asm("ssync;");
/* 更改显示缓冲 */
*pDMA0_START_ADDR = tft_bufferB[0];
*pDMA0_CONFIG |= (INT16U)DMAEN; /* 使能DMA0 */
asm("ssync;");
*pPPI_CONTROL |= (INT16U)PORT_EN; /* 使能PPI */
asm("ssync;");
}
}
void main(void)
{
char key_val;
tft_ctrl.bits.write = 0;
tft_ctrl.bits.disp = 1;
init();
while(1)
{
key_val = key_parse();
switch ( key_val )
{
case WAVE_KEY:
write_change();
//写显示内容(最终调用gui_draw_point打点函数)
disp_change();
break;
case PARA_KEY:
write_change();
//写显示内容(最终调用gui_draw_point打点函数)
disp_change();
break;
}
}
}
以下是通过串口显示出来的相关信息:
当前显示A(按下按键)
写入B
显示B
当前显示B(按下按键)
写入A
显示A
当前显示A(按下按键)
写入B
显示B
当前显示B(按下按键)
写入A
显示A
当前显示A(按下按键)
写入B
显示B
当前显示B(按下按键)
写入A
显示A
当前显示A(按下按键)
写入B
显示B
「该帖子被 pigy 在 2012-12-20 19:49:01 编辑过」