📄 mytft.c
字号:
#include "2440addr.h"
#include "2440lib.h"
#include "myTFT.h"
#define M5D(n) ((n) & 0x1fffff) // To get lower 21bits
void myTFT_Init(int vram_addr, int width, int height, int virtual_width, int virtual_height)
{
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]
rLCDCON1=(1<<8)|(0<<7)|(3<<5)|(12<<1)|0;
// 16bpp TFT, ENVID=off
rLCDCON2=((32-1)<<24)|((height-1)<<14)|((11-1)<<6)|((2-1)<<0);
rLCDCON3=((48-1)<<19)|((width-1)<<8)|((16-1)<<0);
rLCDCON4=(13<<8)|((96-1)<<0);
rLCDCON5=(1<<11)|(1<<9)|(1<<8)|(1<<0); // FRM5:6:5,HSYNC and VSYNC are inverted
// BPP24BL:x,FRM565:x,INVVCLK:x,INVVLINE:x,INVVFRAME:x,INVVD:x,
// INVVDEN:x,INVPWREN:x,INVLEND:x,PWREN:x,ENLEND:x,BSWP:x,HWSWP:x
rLCDSADDR1=(((U32)vram_addr>>22)<<21 )|M5D((U32)vram_addr>>1);
rLCDSADDR2=M5D( ((U32)vram_addr+(virtual_width*height*2))>>1 );
rLCDSADDR3=(((virtual_width-width)/1)<<11)|(width/1);
rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
rTCONSEL&=~((1<<4)|1); // Disable LCC3600, LPC3600
rTPAL=0; // Disable Temp Palette
//rLPCSEL&=(~7); // Disable LPC3600
//rLPCSEL|=(7); // 240320,Enable LPC3600
//GPG4 is setted as LCD_PWREN
rGPGUP|=(1<<4); // Pull-up disable
rGPGCON|=(3<<8); // GPG4=LCD_PWREN
//Enable LCD POWER ENABLE Function
rLCDCON5|=(1<<3); // PWREN
rLCDCON5&=~(1<<5); // INVPWREN
rLCDCON1|=1; // ENVID=ON
}
void myTFT_Putpixel(int x, int y, int color)
{
unsigned int addr;
addr=LCDFRAMEBUFFER+(x+y*SCR_XSIZE)*2;
*(volatile short *)(addr)=color;
}
int myTFT_Getpixel(int x, int y)
{
unsigned int addr, tmp;
addr=LCDFRAMEBUFFER+(x+y*SCR_XSIZE)*2;
tmp=*(volatile short *)(addr);
return (tmp);
}
void clear_LCD()
{
int i;
for(i=0;i<640*480*2;i+=4)
*(volatile int *)(LCDFRAMEBUFFER+i)=0xFFFFFFFF;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -