|
我现在在LPC2478开发板下外部FLASH跑LCD程序,仿真放在中断处,发现一个奇怪的问题。
如果进了中断,LCD_INISTAT的bit[1]一直是1;
如果我在内部flash跑,LCD_INTSTAT的bit[1]就不为1,为0。
内部flash全速跑,正常,lcd图片显示。
外部flash全速跑,不正常,lcd图片不显示,如果停止全速debug,则图片显示。
不知道这是什么原因造成的? 哪位大哥给点意见,谢谢了。
另外,LCD启动后,是否会自动启动DMA功能?
因为我实际试验下来,如果我在main中,隐去这两句:
DMA_SRC = 0xA0000000;
LCD_UPBASE = DMA_SRC;
则液晶屏lcd无显示,如果加上了,就有显示,这两句是跟DMA有关的。但是程序中我并没有PCONP中使能DMA的PCGPDMA置位
我的代码是这样的:
/******************************************************************************
** Function name: DMAHandler
**
** Descriptions: DMA interrupt handler
**
** parameters: None
** Returned value: None
**
******************************************************************************/
__irq __arm void DMAHandler (void)
{
DWORD regVal;
//IENABLE; /* handles nested interrupt */
regVal = LCD_INTSTAT;
if ( (regVal&0x00000002) == 0x00000002 ) //FUFMIS
{
LCD_INTCLR |= 0x00000002;
}
//LNBUIC
if ( (regVal&0x00000004) == 0x00000004 )
{
LCD_INTCLR |= 0x00000004;
}
//VCompMIS
if ( (regVal&0x00000008) == 0x00000008 )
{
LCD_INTCLR |= 0x00000008;
}
//BERRAW
if ( (regVal&0x00000010) == 0x00000010 )
{
LCD_INTCLR |= 0x00000010;
}
//IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}
/******************************************************************************
** Function name: DMA_Init
**
** Descriptions:
**
** parameters:
** Returned value:
**
******************************************************************************/
DWORD DMA_Init( void)
{
LCD_INTMSK |= (0x01 << 4)|(0x01 << 3)|(0x01 << 2)|(0x01 << 1);
if ( install_irq( EINT2_INT, (void *)DMAHandler, HIGHEST_PRIORITY ) == FALSE )
{
return ( FALSE );
}
return (TRUE);
}
void lcd_configure_gpio( void)
{
PINSEL0 |= 0x00055500;
//PINSEL1 = 0x00000000;
//PINSEL2 = 0x00000000;
PINSEL3 |= 0x05555500;
PINSEL4 |= 0x054FFFFF;
//PINSEL5 = 0x00000000;
//PINSEL6 = 0x00000000;
//PINSEL7 = 0x00000000;
//PINSEL8 = 0x00000000;
PINSEL9 |= 0x0A000000;
PINSEL10 &= 0xFFFFFFF7;
PINSEL11 |= 0x0000000F;
////////////////////////////////////////////////////////////////////
/* PINSEL0 |= 0x00055500;
PINSEL3 |= 0x05555500;
PINSEL4 |= 0x054FFFFF;//p2.1,p2.0 is used for PWM2,1
PINSEL9 |= 0x0A000000;
PINSEL10 &= 0xFFFFFFF7;//ETM interface is disabled
// PINSEL11 |= 0x0000000F;//24bit
PINSEL11 |= 0x0000000D;//15bit*/
}
void LCD_Disp_Config( void)
{
int i;
PCONP |= 0x00100000;//使能LCD Controller
//以下寄存器参看LPC24XX用户手册,LCD一章。结合SHARP LQ043液晶参数进行设置
LCD_CTRL = 0x00;
LCD_CFG = 0x08;
LCD_CTRL = (0x01 << 5)|(0x05 << 1);
LCD_TIMH = (0x01 << 24)|(0x01 << 16)|(0x1d << 8 )|(0x13 << 2);
LCD_TIMV = (0x02 << 24)|(0x02 << 16)|(0x02 << 10)|(0x10F);
LCD_POL = (0x01 << 26)|(0x1DF << 16)|(0x00 << 14)|(0x01 << 13)|(0x01 << 12)|(0x01 << 11)|(0x14);
LCD_CTRL |= 0x01;
delayMs(0,50);
LCD_CTRL |= (0x01 << 11);
}
|
|