📄 init.c
字号:
// delay about 40ms
//delayLoop(700000);
delayLoop(7000); // DonGo
WriteLDI_LTS222(0x19,0x48); // PARTIAL 2 DISPLAY AREA STARTING REGISTER 2
WriteLDI_LTS222(0x18,0xe5); // PARTIAL 2 DISPLAY AREA STARTING REGISTER 1
// delay about 10ms
//delayLoop(200000);
delayLoop(2000); // DonGo
WriteLDI_LTS222(0x18,0xF7); // PARTIAL 2 DISPLAY AREA STARTING REGISTER 1
// delay about 40ms
//delayLoop(700000);
delayLoop(7000); // DonGo
WriteLDI_LTS222(0x1B,0x07); // org
// WriteLDI_LTS222(0x1B,0x01); // 90 rotate
// WriteLDI_LTS222(0x1B,0x02); // 90 rotate
// WriteLDI_LTS222(0x1B,0x03); // 90 rotate
// delay about 80ms
//delayLoop(1400000);
delayLoop(14000); // DonGo
WriteLDI_LTS222(0x1F,0x6b); // org
// WriteLDI_LTS222(0x1F,0x5E); // 90 rotate
WriteLDI_LTS222(0x20,0x51); // org, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
// WriteLDI_LTS222(0x20,0x5F); // 90 rotate, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
WriteLDI_LTS222(0x1E,0xc1); //
// delay about 10ms
//delayLoop(200000);
delayLoop(20000); // DonGo
WriteLDI_LTS222(0x21,0x00); // PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2
WriteLDI_LTS222(0x3B,0x01); //
// delay about 20ms
//delayLoop(400000);
delayLoop(4000); // DonGo
WriteLDI_LTS222(0x00,0x20); // CONTROL REGISTER 1
WriteLDI_LTS222(0x02,0x01); // RGB INTERFACE REGISTER
// delay about 10ms
//delayLoop(200000);
delayLoop(2000); // DonGo
// Reg16_OPCLK_DIV = 0x0201; // 6.4
}
#endif // #if WIDE_LCD==1
/*
@func void | InitDisplay | Initializes the LCD controller and displays a splashscreen image.
@rdesc N/A.
@comm
@xref
*/
static void InitDisplay(void)
{
volatile S3C2413_IOPORT_REG *s2413IOP = (S3C2413_IOPORT_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_IOPORT, FALSE);
volatile S3C2413_LCD_REG *s2413LCD = (S3C2413_LCD_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_LCD, FALSE);
unsigned int clkval_calc; // 040507
#if WIDE_LCD==1
RETAILMSG(1, (TEXT("WIDE_LCD is defined...\r\n")));
// LCD Reset
s2413IOP->GPEDAT |= (1<<11); // Reset High
s2413IOP->GPECON &= ~(3<<22);
s2413IOP->GPECON |= (1<<22);
delayLoop(500);
s2413IOP->GPEDAT &= ~(1<<11); // Reset Low
delayLoop(1000);
s2413IOP->GPEDAT |= (1<<11); // Reset High
InitLDI_LTV350(); // Initializing LDI
#else
// Set up the LCD controller registers to display a power-on bitmap image.
//
// From firmware code.
InitLDI_LTS222();
#endif
// LCD Port Init.
#ifdef SMDK2413_REV14
s2413IOP->GPCDAT &= ~(1<<4); // inseted by J.I for V1.4
#endif
s2413IOP->GPCDN=0xffff; // Disable Pull-up register
s2413IOP->GPCCON=0xaaaaaaa8; //aa8; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND
s2413IOP->GPDDN=0xffff; // Disable Pull-up register
s2413IOP->GPDCON=0xaaaaaaaa; //Initialize VD[23:8]
s2413IOP->GPBDN |= (0x1<<5);
s2413IOP->GPBCON = (s2413IOP->GPBCON & ~(0x3<<10))|(0x1<<10);
// LCD Power Enable
//Now, BACKLIGHT_PWM is always on. It should be changed to controlling PWM Timer @ September 24, 2005
s2413IOP->GPBDN |= 0x1;
s2413IOP->GPBDAT |= 0x1;
#ifdef SMDK2413_REV14
s2413IOP->GPGDN |= (1<<4);
s2413IOP->GPGDAT |= (1<<4);
#endif
s2413IOP->GPGCON = (s2413IOP->GPGCON & ~(0x3<<8))|(1<<8);
// s2413IOP->GPBCON = (s2413IOP->GPBCON & ~(0x3<<10))|(0x1);
s2413IOP->GPBCON = (s2413IOP->GPBCON & ~(0x3<<2))|(0x1<<2);
clkval_calc = (WORD)((float)(S3C2413_HCLK)/(2.0*5000000)+0.5)-1; // 9 or 12
s2413LCD->LCDCON1 = (clkval_calc << 8) | /* VCLK = HCLK / ((CLKVAL + 1) * 2) -> About 7 Mhz */
(LCD_MVAL_USED << 7) | /* 0 : Each Frame */
(3 << 5) | /* TFT LCD Pannel */
(12 << 1) | /* 16bpp Mode */
(0 << 0) ; /* Disable LCD Output */
s2413LCD->LCDCON2 = (LCD_VBPD << 24) | /* VBPD : 1 */
(LCD_LINEVAL_TFT << 14) | /* Vertical Size : 320 - 1 */
(LCD_VFPD << 6) | /* VFPD : 2 */
(LCD_VSPW << 0) ; /* VSPW : 1 */
s2413LCD->LCDCON3 = (LCD_HBPD << 19) | /* HBPD : 6 */
(LCD_HOZVAL_TFT << 8) | /* HOZVAL_TFT : 240 - 1 */
(LCD_HFPD << 0) ; /* HFPD : 2 */
s2413LCD->LCDCON4 = (LCD_MVAL << 8) | /* MVAL : 13 */
(LCD_HSPW << 0) ; /* HSPW : 4 */
s2413LCD->LCDCON5 = (0 << 12) | /* BPP24BL : LSB valid */
(1 << 11) | /* FRM565 MODE : 5:6:5 Format */
(0 << 10) | /* INVVCLK : VCLK Falling Edge */
(1 << 9) | /* INVVLINE : Inverted Polarity */
(1 << 8) | /* INVVFRAME : Inverted Polarity */
(0 << 7) | /* INVVD : Normal */
(0 << 6) | /* INVVDEN : Normal */
(0 << 5) | /* Reserved : should be '0'. before, INVPWREN : Normal */
(0 << 4) | /* INVENDLINE : Normal */
(0/*1*/ << 3) | /* Reserved : should be '0'. before, PWREN : Disable PWREN */
(0 << 2) | /* ENLEND : Disable LEND signal */
(0 << 1) | /* BSWP : Swap Disable */
(1 << 0) ; /* HWSWP : Swap Enable */
s2413LCD->LCDSADDR1 = ((IMAGE_FRAMEBUFFER_DMA_BASE >> 22) << 21) |
((M5D(IMAGE_FRAMEBUFFER_DMA_BASE >> 1)) << 0);
s2413LCD->LCDSADDR2 = M5D((IMAGE_FRAMEBUFFER_DMA_BASE + (LCD_XSIZE_TFT * LCD_YSIZE_TFT * 2)) >> 1);
s2413LCD->LCDSADDR3 = (((LCD_XSIZE_TFT - LCD_XSIZE_TFT) / 1) << 11) | (LCD_XSIZE_TFT / 1);
#ifdef DVS_EN
#if (DVS_METHOD == 1 || DVS_METHOD == 3)
// Enable LCD Interrupt for DVS + CLOCK Change.
s2413LCD->LCDINTMSK = (1); // UnMASK LCD Frame Sub Interrupt
#endif
#else
s2413LCD->LCDINTMSK|=(3); // MASK LCD Sub Interrupt
#endif
#ifdef SMDK2413_REV14
s2413LCD->TCONSEL = 0;
#else
s2413LCD->TCONSEL&=(~7); // Disable LPC3600
#endif
s2413LCD->TPAL=0; // Disable Temp Palette
// Display a bitmap image on the LCD...
//
memcpy((void *)IMAGE_FRAMEBUFFER_UA_BASE, ScreenBitmap, LCD_ARRAY_SIZE_TFT_16BIT);
s2413LCD->LCDCON1|=1; // ENVID=ON
// while (1) ;//
}
// LCD function end...
//=============================================================
void ConfigureGPIO()
{
volatile S3C2413_IOPORT_REG *s2413IOP = (S3C2413_IOPORT_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_IOPORT, FALSE);
volatile S3C2413_CLKPWR_REG *s2413CLKPWR = (S3C2413_CLKPWR_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_CLOCK_POWER, FALSE);
#if 0
s2413IOP->GPACON = 0x7fffff;
s2413IOP->GPBDAT = 0x62;
s2413IOP->GPBDN = 0x7FF;
s2413IOP->GPBCON = 0x2A96A4;
s2413IOP->GPCDN = 0xFFFF;
s2413IOP->GPCCON = 0xAAAAAAAA;
s2413IOP->GPEDAT = 0x1;
s2413IOP->GPDDN = 0xFFFF;
s2413IOP->GPDCON = 0xAAAAAAA1;
s2413IOP->GPEDAT = 0x0;
s2413IOP->GPEDN = 0xFFFF;
s2413IOP->GPECON = 0xAAAAAAAA;
s2413IOP->GPFDAT = 0xF0;
s2413IOP->GPFDN = 0xFF;
s2413IOP->GPFCON = 0x55aa;
s2413IOP->GPGDAT = 0x1000;
s2413IOP->GPGDN = 0xFEFF;
s2413IOP->GPGCON = 0x0480FFBA;
s2413IOP->GPGDAT |= 0x1<<12;
s2413IOP->GPGDN |= 0x1<<12;
s2413IOP->GPGCON = (s2413IOP->GPGCON & ~(0x3<<24)) | 0x1<<24;
s2413IOP->GPHDAT = 0x0;
s2413IOP->GPHDN = 0x7FF;
s2413IOP->GPHCON = 0x14AAAA;
s2413IOP->GPJDAT = 0x1000;
s2413IOP->GPJDN = 0x1FFF;
s2413IOP->GPJCON = 0x1AAAAA;
s2413IOP->MISCCR &= ~(7<<20);
s2413IOP->MISCCR |= (4<<20);
s2413IOP->MISCCR &= ~(7<<8);
s2413IOP->MISCCR |= (5<<8);
s2413IOP->MISCCR &= ~(7<<4);
s2413IOP->MISCCR |= (5<<4);
s2413IOP->MISCCR |= (3<<0);
#endif
#if 0
// For USBDevice...
s2413IOP->GPFCON &= ~(3<<4);
s2413IOP->GPFCON |= (1<<4); // output
s2413IOP->GPFDN |= (1<<2); // pulldown disable
s2413IOP->GPFDAT |= (1<<2); // output
//USB port 1 setting
s2413IOP->MISCCR=s2413IOP->MISCCR&~(1<<3); // USBD is selected instead of USBH1
s2413IOP->MISCCR=s2413IOP->MISCCR&~(1<<13); // USB port 1 is enabled.
// USB clock setting
#endif
}
#ifdef DVS_EN
void ChangeVoltage(int vtg)
{
volatile S3C2413_IOPORT_REG *s2413IOP = (S3C2413_IOPORT_REG *)OALPAtoVA(S3C2413_BASE_REG_PA_IOPORT, FALSE);
UINT8 temp;
// port setting
// GPF4:D0, GPF5:D1, GPF6:D2, GPF7:D3, GPB7:D4, GPB8:Latch enable
CurrVoltage = vtg;
temp = s2413IOP->GPFDAT;
switch(vtg) {
case V090: // 0.9V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(1<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(1<<5)|(1<<4); //D3~0
break;
case V095: // 0.95V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(1<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(0<<5)|(1<<4); //D3~0
break;
case V0975: // 0.975V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(1<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(0<<6)|(0<<5)|(0<<4); //D3~0
break;
case V100: // 1.0V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(1<<5)|(1<<4); //D3~0
break;
case V105: // 1.05V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(1<<5)|(0<<4); //D3~0
break;
case V110: // 1.1V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(0<<5)|(1<<4); //D3~0
break;
case V115: // 1.15V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(1<<6)|(0<<5)|(0<<4); //D3~0
break;
case V120: // 1.2V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(1<<5)|(1<<4); //D3~0
break;
case V125: // 1.25V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(1<<5)|(0<<4); //D3~0
break;
case V130: // 1.3V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(0<<5)|(1<<4); //D3~0
break;
case V135: // 1.35V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(1<<7)|(0<<6)|(0<<5)|(0<<4); //D3~0
break;
case V140: // 1.4V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(1<<5)|(1<<4); //D3~0
break;
case V145: // 1.45V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(1<<5)|(0<<4); //D3~0
break;
case V150: // 1.5V
s2413IOP->GPBDAT=(s2413IOP->GPBDAT&0x77f)|(0<<7); //D4
s2413IOP->GPFDAT=(s2413IOP->GPFDAT&0x0f)|(0<<7)|(1<<6)|(0<<5)|(1<<4); //D3~0
break;
default:
break;
}
// port setting
// GPF4:D0, GPF5:D1, GPF6:D2, GPF7:D3, GPB7:D4, GPB8:Latch enable, GPB10: OE
s2413IOP->GPBCON=(s2413IOP->GPBCON&0x3f3fff)|(1<<14); // GPB7: Output
// s2413IOP->rGPBUP&=~(1<<7);
s2413IOP->GPFCON=(s2413IOP->GPFCON&0x00ff)|(0x5500); // GPF4~7: Output
// s2413IOP->rGPFUP&=~(0xf<<4);
s2413IOP->GPBDAT&=~(1<<8); //Latch enable
s2413IOP->GPBCON=(s2413IOP->GPBCON&0x3cffff)|(1<<16); // GPB8: Output
s2413IOP->GPBDAT|=(1<<10); //Output enable
s2413IOP->GPBCON=(s2413IOP->GPBCON&0x0fffff)|(1<<20); // GPB10: Output
// s2413IOP->rGPBUP&=~(1<<8);
s2413IOP->GPBDAT|=(1<<8); //Latch disable
s2413IOP->GPFDAT = temp;
}
int GetCurrentVoltage(void)
{
return CurrVoltage;
}
#endif
//=================================================================
// User test code...
volatile S3C2413_IOPORT_REG *g_pIOPRegs;
volatile S3C2413_INTR_REG *g_pINTRegs;
volatile S3C2413_CLKPWR_REG *g_pCLKRegs;
volatile S3C2413_MEMCTRL_REG *g_pMEMRegs;
void user_test(void)
{
g_pINTRegs = (S3C2413_INTR_REG*)OALPAtoVA(S3C2413_BASE_REG_PA_INTR, FALSE);
g_pIOPRegs = (S3C2413_IOPORT_REG*)OALPAtoVA(S3C2413_BASE_REG_PA_IOPORT, FALSE);
g_pCLKRegs = (S3C2413_CLKPWR_REG*)OALPAtoVA(S3C2413_BASE_REG_PA_CLOCK_POWER, FALSE);
g_pMEMRegs = (S3C2413_MEMCTRL_REG*)OALPAtoVA(S3C2413_BASE_REG_PA_MEMCTRL, FALSE);
RETAILMSG(1, (TEXT("\n--------------------------------------\n")));
RETAILMSG(1, (TEXT("User_test() start.\n")));
// Start User test code...
RETAILMSG(1, (TEXT("FCLK out to GPH10....\n")));
g_pIOPRegs->MISCCR &= ~((7<<8) | (7 <<4)); // CLKSEL1. CLKSEL0
g_pIOPRegs->MISCCR |= (2<<8) | (3<<4) ; // Clockout1 = FCLK(2). Clkout0=HCLK(3), FCLK(4)
g_pIOPRegs->GPHCON |= (1<<10); // GPH10 Pull-down disable.
g_pIOPRegs->GPHCON &= ~(3<<20); // Clear GPH10.
g_pIOPRegs->GPHCON |= (2<<20); // GPH10=CLKOUT1.
g_pIOPRegs->GPHCON |= (1<<9);
g_pIOPRegs->GPHCON &= ~(3<<18);
g_pIOPRegs->GPHCON |= (2<<18); // GPH9=CLKOUT0
// s2413IOP->MISCCR = (s2413IOP->MISCCR & ~(0x7 << 8)) | (0x3 << 8); // CLKSEL1, 011 -> HCLK
// s2413IOP->MISCCR = (s2413IOP->MISCCR & ~(0x7 << 4)) | (0x4 << 4); // CLKSEL0, 100 -> PCLK
// s2413IOP->GPHCON = (s2413IOP->GPHCON & ~(0x3 << 18)) | (0x2 << 18); // GPH9 -> CLKOUT0
// s2413IOP->GPHCON = (s2413IOP->GPHCON & ~(0x3 << 20)) | (0x2 << 20); // GPH10 -> CLKOUT1
RETAILMSG(1,(_T(" - BANKCFG:%xh.\n"), g_pMEMRegs->BANKCFG));
RETAILMSG(1,(_T(" - BANKCON1:%xh.\n"), g_pMEMRegs->BANKCON1));
RETAILMSG(1,(_T(" - BANKCON2:%xh.\n"), g_pMEMRegs->BANKCON2));
RETAILMSG(1,(_T(" - BANKCON3:%xh.\n"), g_pMEMRegs->BANKCON3));
RETAILMSG(1,(_T(" - REFRESH:%xh.\n"), g_pMEMRegs->REFRESH));
RETAILMSG(1,(_T(" - TIMEOUT:%xh.\n"), g_pMEMRegs->TIMEOUT));
RETAILMSG(1, (TEXT("MISCCR:%xh\r\n"), g_pIOPRegs->MISCCR));
// End User test code...
RETAILMSG(1, (TEXT("User_test() end.\n")));
RETAILMSG(1, (TEXT("--------------------------------------\n")));
}
//=================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -