新闻中心

EEPW首页>嵌入式系统>设计应用> ATMEL9263 800*600屏驱动问题

ATMEL9263 800*600屏驱动问题

作者: 时间:2016-11-22 来源:网络 收藏
前段时间跟某院有个合作,应用我们公司的ATMELat91SAM9263,评估板套件应用我们的800*480屏幕没有问题,但是稍微一改大屏幕的配置,就驱动不起来了。

后来查了一下代码,问题找到了,原因是改成大屏幕以后,LCD的象素时钟变大,应用官方提供的代码就出现问题了。

本文引用地址://m.amcfsurvey.com/article/201611/320035.htm

//------------------------------------------------------------------------------
/// Configures the internal clock of the LCD controller given the master clock of
/// the system and the desired pixel clock in MHz.
/// param masterClock Master clock frequency.
/// param pixelClock Pixel clock frequency.
//------------------------------------------------------------------------------
void LCD_SetPixelClock(unsigned int masterClock, unsigned int pixelClock)
{
AT91C_BASE_LCDC->LCDC_LCDCON1 = ((masterClock / (2 * pixelClock)) - 1) << 12;
}

当应用大屏幕的时候,后面的表达式算出来是一个负数,所以时钟送不出来,LCD也就驱动不起来了

修改以后:

void LCD_SetPixelClock(unsigned int masterClock, unsigned int pixelClock)
{
unsigned int value;
value = masterClock / pixelClock;

if (masterClock % pixelClock)
{
value++;
}

value = value/2;

if (!value)
AT91C_BASE_LCDC->LCDC_LCDCON1 = AT91C_LCDC_BYPASS;
else
{
value -= 1;
AT91C_BASE_LCDC->LCDC_LCDCON1 = (value << 12);
}

}
参考数据手册LCD寄存器描述,可以清楚的明白

BYPASS描述:

0 LCD象素时钟 是由LCD控制器时钟 根据CLKVAL分频得到

1 LCD象素时钟 就是LCD控制器时钟



关键词:ATMELat91SAM926

评论


技术专区

关闭