mini2440裸机程序 统宝3.5 LCD驱动 TopPoly-TD035STED4

发布者:devilcore最新更新时间:2022-03-21 来源: eefocus关键字:mini2440  裸机程序  LCD驱动 手机看文章 扫描二维码
随时随地手机看文章

关于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   LCD_BUFFER[(y)][(x)] = c;
}

/**************************************************************
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)

[1] [2]
关键字:mini2440  裸机程序  LCD驱动 引用地址:mini2440裸机程序 统宝3.5 LCD驱动 TopPoly-TD035STED4

上一篇:mini2440裸机之LCD
下一篇:S3C2440裸机学习[2] - LCD驱动原理及代码分析[一]

推荐阅读最新更新时间:2024-11-11 11:02

keil mini2440 分散加载文件scatter中(InRoot$$Sections)的理解
查阅一些资料终于认识了 (InRoot Sections)实现对映像的加载,而这一段代码就是∗(InRoot Sections)实现对映像的加载,而这一段代码就是∗(InRoot Sections)它是__main()的一部分。 从启动代码说起 启动代码 1。异常/中断跳转的地址表。 2。堆栈初始化 3。分散加载镜像文件 IMAGE(映像文件) 1个RO, 1个RW, 1个ZI组成。 并且RO的load region和execution region相同,这个里面放置 *(InRoot$$Sections) 主要作用COPY RW区到RAM,然后再RW区后面创建ZI区。 库函数__main函数中有这个段。 注释掉会报出
[单片机]
eCos在mini2440 Qemu的网络功能测试
终于可以方便的用mini2440 qemu的网络功能了, 大家参考一下雪松的这篇帖子《QEMU MINI2440 的 Linux Fedora 8 下网络配置 》http://www.linuxidc.com/Linux/2011-09/42195.htm 既然可以这样用了,我重新整理了mini2440的redboot 1. 根据qemu对dm9000模拟的限制,对dm9000驱动程序做了新的修改 2. ecos的看家绝技,gdb调试应用程序 根据雪松的修改,现在可以用arm-eabi-gdb 的target remote来做ecos 应用程序的单步调试了 3. ecos的httpd 在mini2440 qemu的测试
[单片机]
eCos在<font color='red'>mini2440</font> Qemu的网络功能测试
mini2440硬件篇之Nor Flash
硬件原理 1.1. Nor Flash简介 NOR Flash是Intel在1988年推出的一款商业性闪存芯片,它需要很长的时间进行抹写,大半生它能够提供完整的寻址与数据总线,并允许随机存取存储器上的任何区域,而且它可以忍受一万次到一百万次擦写,是早期的闪存媒体的基础。 1.2. 处理器连接 从处理器的角度来看,每个地址对应的是一个BYTE的数据单元。而Nor Flash的每个地址有可能对应的是一个BYTE的数据单元,也有可能对应的是一个HALF-WORD的数据单元。所以在硬件设计中,连接ARM处理器和Nor Flash时,必须根据实际情况对地址信号做特别的处理。如果ARM处理器外部扩展的是8-BIT的NOR Flash,
[单片机]
<font color='red'>mini2440</font>硬件篇之Nor Flash
Mini2440裸机开发之keil开发环境的搭建
Mini2440裸机开发之keil开发环境的搭建 之前搞过一段时间的STM32,也搞过uboot和Linux驱动,但是感觉这些搞得都不系统,不成体系,感觉学的东西很杂,而且没有纪录,所以决定从今天起把写博客这件事给坚持下去 硬件环境:jlink,mini2440开发板 软件环境下载: 首先需要到keil官网下载MDK(因为对keil的版本认识一直很模糊,有明白的小伙伴还请赐教)。 之前曾经开发过STM32,所以,我的电脑上是有keil的,但是在建工程选择器件的时候却没有s3c2440,如下图1,然后到keil的官网查看,找到MDK-Arm的下载目录,keil是支持cotex内核和arm内核的,继续找发现有支持Arm
[单片机]
<font color='red'>Mini2440</font><font color='red'>裸机</font>开发之keil开发环境的搭建
mini2440 ADC可调电阻驱动程序开发源代码(杂项设备驱动框架)
/*********************************************************/ /****s3c2440 ADC可调电阻驱动程序开发源代码(杂项设备驱动框架)****/ /********************************************************/ #include #include #include #define DEVICE_NAME adc_driver /*设备名称*/ static void __iomem *adc_base; /*定义了一个用来保存经过虚拟映射后的内存地址 */ static struct clk *adc_cl
[单片机]
secureCRT用串口连接mini2440方法
第一步:双击打开secureCRT,弹出如下窗口,单击①new session②选择protocol为serial③单击下一步 第二步:选择相应的串口号,波特率为115200,数据流控制什么都不要选!单击下一步 第三步:给session起名:mini2440,单击完成。 第四步:连接串口到开发板,打开开发板电源,出现下图(本人使用的是friendlyARM开发板,mini2440)。 输入B启动操作系统,如下: 串口登录开发板的linux操作系统
[单片机]
secureCRT用串口连接<font color='red'>mini2440</font>方法
linux2.6.32.2移植到ARM平台(mini2440
1、指定交叉编译变量 即修改顶层Makefile文件,vim打开,修改如下: 原 export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 改为 export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= arm //指定目标平台为ARM CROSS_COMPILE ?= arm-linux- //指定交叉编译器,此处是系统默认的,若指定其他的需要把路径完整列出 修改完毕之后,先编译一下,看是否能通过, # make s3c2410_defconfig # make 2、
[单片机]
U-boot 在 mini2440-S3C2440 上的移植(1)-开发环境搭建-交叉编译工具链的安装
编译U-boot给mini2440时,要编译出能在ARM平台上使用的可执行文件-bin,首先要在ubuntu 中安装交叉编译工具链,因为我使用的是友善之臂的开发板,所以我使用的已经制作好的工具链,当然也可以自己制作工具链:如基于GCC和glibc制作工具链,可以使用cross tools编译; 我使用的工具链的版本是arm-linux-gcc-4.3.3版本,下载地址:下载地址 1.在pc端下载好以后,将压缩包用xftp传输到Ubuntu;当然也可以用其他软件上传;上传后把它放在根目录下的/usr/local文件夹中新建一个arm文件夹,然后把压缩包复制到这个文件夹;注意先建好文件夹再上传,可以减少很多工作量; 一定要上传压缩包,
[单片机]
U-boot 在 mini2440-S3C2440 上的移植(1)-开发环境搭建-交叉编译工具链的安装

推荐帖子

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 工控电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved