关于MDK配置,请看前面的文章
mini2440裸机程序 如何点亮led灯 基于MDK4.11版
http://hi.baidu.com/如来大悲/blog/item/c6150233be4692a45edf0e02.html
/**************************************************************
The initial and control for 640×480 16Bpp TFT LCD----VGA
**************************************************************/
#define rGPCCON (*(volatile unsigned *)0x56000020) //Port C control
#define rGPCDAT (*(volatile unsigned *)0x56000024) //Port C data
#define rGPCUP (*(volatile unsigned *)0x56000028) //Pull-up control C
#define rGPDCON (*(volatile unsigned *)0x56000030) //Port D control
#define rGPDDAT (*(volatile unsigned *)0x56000034) //Port D data
#define rGPDUP (*(volatile unsigned *)0x56000038) //Pull-up control D
#define rGPGCON (*(volatile unsigned *)0x56000060) //Port G control
#define rGPGDAT (*(volatile unsigned *)0x56000064) //Port G data
#define rGPGUP (*(volatile unsigned *)0x56000068) //Pull-up control G
// LCD CONTROLLER
#define rLCDCON1 (*(volatile unsigned *)0x4d000000) //LCD control 1
#define rLCDCON2 (*(volatile unsigned *)0x4d000004) //LCD control 2
#define rLCDCON3 (*(volatile unsigned *)0x4d000008) //LCD control 3
#define rLCDCON4 (*(volatile unsigned *)0x4d00000c) //LCD control 4
#define rLCDCON5 (*(volatile unsigned *)0x4d000010) //LCD control 5
#define rLCDSADDR1 (*(volatile unsigned *)0x4d000014) //STN/TFT Frame buffer start address 1
#define rLCDSADDR2 (*(volatile unsigned *)0x4d000018) //STN/TFT Frame buffer start address 2
#define rLCDSADDR3 (*(volatile unsigned *)0x4d00001c) //STN/TFT Virtual screen address set
#define rREDLUT (*(volatile unsigned *)0x4d000020) //STN Red lookup table
#define rGREENLUT (*(volatile unsigned *)0x4d000024) //STN Green lookup table
#define rBLUELUT (*(volatile unsigned *)0x4d000028) //STN Blue lookup table
#define rDITHMODE (*(volatile unsigned *)0x4d00004c) //STN Dithering mode
#define rTPAL (*(volatile unsigned *)0x4d000050) //TFT Temporary palette
#define rLCDINTPND (*(volatile unsigned *)0x4d000054) //LCD Interrupt pending
#define rLCDSRCPND (*(volatile unsigned *)0x4d000058) //LCD Interrupt source
#define rLCDINTMSK (*(volatile unsigned *)0x4d00005c) //LCD Interrupt mask
#define rTCONSEL (*(volatile unsigned *)0x4d000060) //LPC3600 Control --- edited by junon
#define PALETTE 0x4d000400 //Palette start address
#define U8 unsigned char
#define U16 unsigned short
#define U32 unsigned int
extern const unsigned char sunflower_240x320[];
#define LCD_WIDTH 240
#define LCD_HEIGHT 320
#define LCD_PIXCLOCK 4
#define LCD_RIGHT_MARGIN 36
#define LCD_LEFT_MARGIN 19
#define LCD_HSYNC_LEN 5
#define LCD_UPPER_MARGIN 1
#define LCD_LOWER_MARGIN 5
#define LCD_VSYNC_LEN 1
#define LCD_XSIZE LCD_WIDTH
#define LCD_YSIZE LCD_HEIGHT
#define SCR_XSIZE LCD_WIDTH
#define SCR_YSIZE LCD_HEIGHT
unsigned short LCD_BUFFER[SCR_YSIZE][SCR_XSIZE];
/**************************************************************
640×480 TFT LCD数据和控制端口初始化
**************************************************************/
static void Lcd_Port_Init( void )
{
rGPCUP=0xffffffff; // Disable Pull-up register
rGPCCON=0xaaaa02a8; //Initialize VD[7:0],VM,VFRAME,VLINE,VCLK
rGPDUP=0xffffffff; // Disable Pull-up register
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
}
/**************************************************************
640×480 TFT LCD功能模块初始化
**************************************************************/
static void LCD_Init(void)
{
#define M5D(n) ((n)&0x1fffff)
#define LCD_ADDR ((U32)LCD_BUFFER)
rLCDCON1 = (LCD_PIXCLOCK << 8) | (3 << 5) | (12 << 1);
rLCDCON2 = (LCD_UPPER_MARGIN << 24) | ((LCD_HEIGHT - 1) << 14) | (LCD_LOWER_MARGIN << 6) | (LCD_VSYNC_LEN << 0);
rLCDCON3 = (LCD_RIGHT_MARGIN << 19) | ((LCD_WIDTH - 1) << 8) | (LCD_LEFT_MARGIN << 0);
rLCDCON4 = (13 << 8) | (LCD_HSYNC_LEN << 0);
#if !defined(LCD_CON5)
# define LCD_CON5 ((1<<11) | (1 << 9) | (1 << 8) | (1 << 3) | (1 << 0))
#endif
rLCDCON5 = LCD_CON5;
rLCDSADDR1 = ((LCD_ADDR >> 22) << 21) | ((M5D(LCD_ADDR >> 1)) << 0);
rLCDSADDR2 = M5D((LCD_ADDR + LCD_WIDTH * LCD_HEIGHT * 2) >> 1);
rLCDSADDR3 = LCD_WIDTH;
rLCDINTMSK |= 3;
rTCONSEL &= (~7);
rTPAL = 0x0;
rTCONSEL &= ~((1<<4) | 1);
}
/**************************************************************
LCD视频和控制信号输出或者停止,1开启视频输出
**************************************************************/
static void Lcd_EnvidOnOff(int onoff)
{
if(onoff==1)
rLCDCON1|=1; // ENVID=ON
else
rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off
}
/**************************************************************
320×240 8Bpp TFT LCD 电源控制引脚使能
**************************************************************/
static void Lcd_PowerEnable(int invpwren,int pwren)
{
//GPG4 is setted as LCD_PWREN
rGPGUP = rGPGUP|(1<<4); // Pull-up disable
rGPGCON = rGPGCON|(3<<8); //GPG4=LCD_PWREN
//Enable LCD POWER ENABLE Function
rLCDCON5 = rLCDCON5&(~(1<<3))|(pwren<<3); // PWREN
rLCDCON5 = rLCDCON5&(~(1<<5))|(invpwren<<5); // INVPWREN
}
/**************************************************************
640×480 TFT LCD单个象素的显示数据输出
**************************************************************/
static void PutPixel(U32 x,U32 y,U16 c)
{
if(x
}
/**************************************************************
640×480 TFT LCD全屏填充特定颜色单元或清屏
**************************************************************/
static void Lcd_ClearScr( U16 c)
{
unsigned int x,y ;
for( y = 0 ; y < SCR_YSIZE ; y++ )
{
for( x = 0 ; x < SCR_XSIZE ; x++ )
{
LCD_BUFFER[y][x] = c ;
}
}
}
/**************************************************************
LCD屏幕显示垂直翻转
// LCD display is flipped vertically
// But, think the algorithm by mathematics point.
// 3I2
// 4 I 1
// --+-- <-8 octants mathematical cordinate
// 5 I 8
// 6I7
**************************************************************/
static void Glib_Line(int x1,int y1,int x2,int y2, U16 color)
{
int dx,dy,e;
dx=x2-x1;
dy=y2-y1;
if(dx>=0)
{
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 1/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 2/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
if(dx>=dy) // 8/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 7/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
else //dx<0
{
dx=-dx; //dx=abs(dx)
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 4/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 3/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)
上一篇:mini2440裸机之LCD
下一篇:S3C2440裸机学习[2] - LCD驱动原理及代码分析[一]
推荐阅读最新更新时间:2024-11-11 11:02
推荐帖子
- MTK7688 openwrt串口程序C编程
- MTK7688openwrt串口程序C编程在上一篇中我主要通过命令测试了下MTK7688的串口1通信功能见(https://bbs.eeworld.com.cn/thread-619370-1-1.html),后面花了一些时间去了解了下linux下的C编程,参加工作后有6年没用过Linux编程了,大学学的东西基本也还给老师了,幸好我这人比较喜欢书,大学的书都拖到北京了,没卖掉,拿上大学的linux设备驱动开发编程
- wateras1 RF/无线
- msp40G2553串口通信问题
- 在调试串口通信的时候,发现,有定时器模拟的可通信,。但是换作使用内置UART通信的时候发现不能通信,用的是TI的官方历程,在调试时,发现无法进入,接收中断,同样用的TI的官方历程,,在检查问题的时候,看过l其他类型的芯片的UART MODE,发现在多设置了ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD传说中的串口模块接收使能寄存器,但是在对照G2553的使用指南时并没有这个寄存器的描述,在相应的头文件中并没有定义。开始时没有
- 曾忆往昔 微控制器 MCU
- 有四种“毛病”空调常犯 教你如何检查它们
- 本帖最后由jameswangsynnex于2015-3-319:59编辑现象一:冷气输出不足 检查: 1、进气孔是否关闭; 2、冷凝器线圈与散热片是否清洁; 3、系统中致冷剂是否充足; 4、鼓风机电机是否工作正常; 5、鼓风机通道是否阻塞; 6、进气滤芯是否阻塞; 7、蒸发器是否阻塞。 判断: 1、如果高压表显示正常压力,而低压表显示高压,说明蒸发器压力调节器、热气旁通阀、进气节流阀故障或调; 2、如果排出空气温度较高,而压
- lorant 移动便携
- 杭州亚运会大家都看了吗?各种高科技呀
- 钢琴机器人、扫地机器人、数字火炬手......智能作为是杭州第19届亚运会的办赛理念之一,被广泛应用在赛场内外。在5G、物联网、大数据、人工智能等技术的支撑下,数智之美的身影无处不在。杭州亚运会大家都看了吗?各种高科技呀不过这届亚运会一些传统优势项目不在优势了,伊朗运动员是真黑马啊,专门阻击冠军的我昨天稀里糊涂看了男篮四分之一决赛,天朝对女佣队。天朝队真的搞笑,最后被反超。多的不说了这种智能只能当新闻看,
- 他们逼我做卧底 RF/无线
- TI c281x系列头文件
- TIc281x系列头文件及例程,V1.2版本。TIc281x系列头文件
- gxg1122 微控制器 MCU
- 伺服定位完成后一个脉冲跳动
- 运动控制器控制伺服电机,采用+/-10V模拟量控制方式,在伺服定位完成后,出现+/-1个脉冲的跳动。比如,定位到100脉冲处,定位完成时编码器反馈到达了100位置,但编码器读数是100,101之间来回跳动,从机械上也出来了异常声音。试着调整速度环增益,位置环PID,当达到定位脉冲误差在+/-1个以内的话,都出现这种现象,不知道该如何调整参数解决这种现象?说明:该轴机械阻尼比较大伺服定位完成后一个脉冲跳动
- eeleader-mcu 工控电子
设计资源 培训 开发板 精华推荐
- 具有双输入的 LTC3126EUFD 3.3V、750kHz 降压转换器的典型应用电路
- 使用 ROHM Semiconductor 的 BM2P013 的参考设计
- Simple-FOC-V1.0
- VNH5180A评估板:适用于直流电动机的驱动,应用于门锁
- 第一次实验
- MC44602 高性能电流模式控制器 150 瓦离线反激式稳压器的典型应用
- DC1010A-A,演示电路采用 LTC2493、2/4 通道、24 位 Delta Sigma 模数转换器
- LTC4162EUFD-FADM 9V 至 35V 2 节 3.2A 充电器的典型应用,具有 PowerPath 和 2A 输入限制
- 用于低压轨的 NCP459 4A 单负载开关的典型应用电路
- 8266射频红外遥控 接入HA