前段时间跟某院有个协作,使用咱们公司的ATMEL at91SAM9263,评价板套件使用咱们的800*480屏幕没有问题,可是略微一改大屏幕的装备,就驱动不起来了。
后来查了一下代码,问题找到了,原因是改成大屏幕今后,LCD的象素时钟变大,使用官方供给的代码就出现问题了。
//——————————————————————————
/// 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);
}
}
BYPASS描绘:
0 LCD象素时钟 是由LCD控制器时钟 依据CLKVAL分频得到
1 LCD象素时钟 便是LCD控制器时钟