|
发表于 2021-10-21 09:46:57
|
显示全部楼层
五年前的
outpw(REG_CLK_HCLKEN, inpw(REG_CLK_HCLKEN) | (1 << 25));
// Configure multi-function pin for LCD interface
//GPG6 (CLK), GPG7 (HSYNC)
outpw(REG_SYS_GPG_MFPL, (inpw(REG_SYS_GPG_MFPL) & (~0xFF000000)) | 0x22000000);
//GPG8 (VSYNC), GPG9 (DEN)
outpw(REG_SYS_GPG_MFPH, (inpw(REG_SYS_GPG_MFPH) & (~0xFF)) | 0x22);
//DATA pin
//GPA0 ~ GPA7 (DATA0 ~ 7)
outpw(REG_SYS_GPA_MFPL, 0x22222222);
//GPA8 ~ GPA15 (DATA8 ~ 15)
outpw(REG_SYS_GPA_MFPH, 0x22222222);
//GPD8~D15 (DATA16 ~ 17)
outpw(REG_SYS_GPD_MFPH, (inpw(REG_SYS_GPD_MFPH) & (~0xFF)) | 0x22);
// LCD clock is selected from UPLL and divide to 20MHz
outpw(REG_CLK_DIVCTL1, (inpw(REG_CLK_DIVCTL1) & (~0xff1f)) |
((300000000l / _aKnownLcdPanels[_sys_setup.sysset.sys.Lcdtype].iclock - 1) << 8) | 0x18);
outpw(REG_CLK_PCLKEN0, inpw(REG_CLK_PCLKEN0)| 0x08); // GPIO clk
GPIO_OpenBit(GPIOD, LCDRL, DIR_OUTPUT, PULL_UP);
GPIO_SetBit (GPIOD, LCDRL);
GPIO_OpenBit(GPIOD, LCDUD, DIR_OUTPUT, PULL_UP);
if (_aKnownLcdPanels[_sys_setup.sysset.sys.Lcdtype].facetype == 1)
GPIO_SetBit (GPIOD, LCDUD);
else
GPIO_ClrBit (GPIOD, LCDUD);
VPOST->DEV_CTRL = 0;
// cmd 16to18 busw databusw
VPOST->DEV_CTRL = VPOSTB_CMDHIGH | VPOSTB_CM16t18LOW | VPOSTB_CMD8 | VPOSTB_DATA16or18 |
// mpu_mode colors dev type
VPOSTB_MPU80 | VPOSTB_COLORTYPE_256K | VPOSTB_DEVICE_SYNC_HIGHCOLOR;
//rt_kprintf("ctrl = %x\n", VPOST->DEV_CTRL);
VPOST->CRTC_SIZE = _aKnownLcdPanels[_sys_setup.sysset.sys.Lcdtype].isize;
VPOST->CRTC_DEND = _aKnownLcdPanels[_sys_setup.sysset.sys.Lcdtype].iWidth | (_aKnownLcdPanels[_sys_setup.sysset.sys.Lcdtype].iHeight << 16);
VPOST->CRTC_HR = _aKnownLcdPanels[_sys_setup.sysset.sys.Lcdtype].ihr;
VPOST->CRTC_HSYNC = _aKnownLcdPanels[_sys_setup.sysset.sys.Lcdtype].ihsync;
VPOST->CRTC_VR = _aKnownLcdPanels[_sys_setup.sysset.sys.Lcdtype].ivr;
rt_hw_interrupt_install(IRQ_LCD, vpostIntHandler, RT_NULL, "LCD");
rt_hw_interrupt_control(IRQ_LCD, 0x41, 0x3F);
rt_hw_interrupt_umask (IRQ_LCD);
VPOST->DCCS |= VPOSTB_DISP_INT_EN;
VPOST->INT_CS |= VPOSTB_UNDERRUN_EN;
VPOST->INT_CS |= VPOSTB_DISP_F_EN;
// Set scale to 1:1
vpostVAScalingCtrl(1, 0, 1, 0, VA_SCALE_INTERPOLATION);
// Set display color depth
vpostSetVASrc(_sys_setup.sysset.sys.Bpp); |
|