📄 lcdlibc.txt
字号:
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "2410addr.h"
#include "def.h"
#include "lcdlib.h"
//TFT 320240
U32 (*frameBuffer24BitTft320240)[SCR_XSIZE_TFT_320240];
U32 LCDBASEU;
void Lcd_Port_Init(void)
{
rGPCUP=0xffffffff; // Disable Pull-up register
rGPCCON=0xaaaaaaaa; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND
rGPDUP=0xffffffff; // Disable Pull-up register
rGPDCON=0xaaaaaaaa; //Initialize VD[23:8]
Uart_Printf("Initializing GPIO ports..........\n");
}
void Lcd_Init()
{
#define USB_TEST (*(volatile unsigned *)0x49000000)
unsigned long test;
frameBuffer24BitTft320240=(U32 (*)[SCR_XSIZE_TFT_320240])LCDFRAMEBUFFER;
rLCDCON1=(CLKVAL_TFT_800480<<8)|(MVAL_USED<<7)|(3<<5)|(13<<1)|0;
rLCDCON2=(VBPD_320240<<24)|(239<<14)|(VFPD_320240<<6)|(VSPW_320240);
rLCDCON3=(HBPD_320240<<19)|(HOZVAL_TFT_320240<<8)|(HFPD_320240);
rLCDCON4=(MVAL<<8)|(HSPW_320240);
rLCDCON5=(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<1); //FRM5:6:5,HSYNC and VSYNC are inverted (and pwren signal enable)
rLCDSADDR1=(((U32)frameBuffer24BitTft320240>>22)<<21)|M5D((U32)frameBuffer24BitTft320240>>1);
test = (((U32)frameBuffer24BitTft320240>>22)<<21)|M5D((U32)frameBuffer24BitTft320240>>1);
rLCDSADDR2=M5D((U32)frameBuffer24BitTft320240>>1)+(PAGEWIDTH+OFFSIZE)*(LINEVAL_TFT_320240+1);
rLCDSADDR3=PAGEWIDTH<<11|OFFSIZE;
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rLPCSEL&=(~7); // Disable LPC3600
rTPAL=0; // Disable Temp Palette
}
void Lcd_EnvidOnOff(int onoff)
{
if(onoff==1)
rLCDCON1|=1; // ENVID=ON
else
rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off
}
void Lcd_Lpc3600Enable(void)
{
rLPCSEL&=~(7);
rLPCSEL|=7; // 320240,Enable LPC3600
}
void Lcd_Lpc3600Disable(void)
{
rLPCSEL&=~(7); // 320240,Disable LPC3600
}
void Lcd_PowerEnable(int invpwren,int pwren)
{
//GPG4 is setted as LCD_PWREN
rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable
rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //GPG4=LCD_PWREN
//Enable LCD POWER ENABLE Function
rLCDCON5=rLCDCON5&(~(1<<3)|(pwren<<3)); // PWREN
rLCDCON5=rLCDCON5&(~(1<<5))|(invpwren<<5); // INVPWREN
}
void MoveViewPort()
{
int vx=0,vy=0,vd;
vd=(MODE_TFT_16BIT_320240)*1;
while(1)
{
switch(Uart_Getch())
{
case 'i':
if(vy>=vd)vy-=vd;
break;
case 'j':
if(vx>=vd)vx-=vd;
break;
case 'k':
if(vx<=(SCR_XSIZE_TFT_320240-LCD_XSIZE_TFT_320240-vd))vx+=vd;
break;
case 'm':
if(vy<=(SCR_YSIZE_TFT_320240-LCD_YSIZE_TFT_320240-vd))vy+=vd;
break;
case '\r':
return;
default:
break;
}
Uart_Printf("vx=%3d,vy=%3d\n",vx,vy);
Lcd_MoveViewPort(vx,vy);
}
}
void Lcd_MoveViewPort(int vx,int vy)
{
U32 addr;
//SET_IF();
#if (LCD_XSIZE_TFT_320240<32)
while((rLCDCON1>>18)<=1); // if x<32
#else
while((rLCDCON1>>18)==0); // if x>32
#endif
addr=(U32)frameBuffer24BitTft320240+(vx*2)+vy*(SCR_XSIZE_TFT_320240*2);
rLCDSADDR1= ( (addr>>22)<<21 ) | M5D(addr>>1);
rLCDSADDR2= M5D(((addr+(SCR_XSIZE_TFT_320240*LCD_YSIZE_TFT_320240*2))>>1));
//CLR_IF();
}
void Uart_Send( char *c)
{
for(;*c!='\0';c++)
{
/* wait for room in the tx FIFO on SERIAL1 */
while(!(rUTRSTAT0 & 0x02));
rUTXH0 = *c;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -