Eclipse开发调试ARM裸机程序(七)LCD

发布者:SereneDreamer最新更新时间:2016-06-06 来源: eefocus关键字:Eclipse  开发调试  ARM  裸机程序  LCD 手机看文章 扫描二维码
随时随地手机看文章
       原本想这个LCD应该很难做,但是一个小时搞出来了,2个小时整理下,让自己代码好看一点。这个次不能像I2C一样,用最简的代码来实现了,显示一个图片都要很大,4k的sdram根本不够用,就要用到SDRAM了。启动用的nand,sdram,clock,wathc_dog都是以前的模块,基本上拿来就能用,并没有太难。为了让代码同时具有调试和运行的特性。我想起来了u-boot对这个问题的解决方法,并照做了,效果不不错。原理很简单就是在copy_to_ram_from_nand前边进行一下判断。如果_start的运行地址就是链接地址说明是在调试,那么就不进行拷贝了;如果不是则进行拷贝。具体的代码如下:
 
relocate: /* relocate U-Boot to RAM    */
adrr0, _start /* r0 <- current position of code   */
ldrr1, =TEXT_BASE /* test if we run from flash or RAM */
cmpr0, r1 /* don't reloc during debug         */
beq stack_setup
 
ldr sp, =1024*4                  @ 设置堆栈
    bl  copy_to_ram_from_nand      @ 到SDRAM中
 
注释都没有换,不过真心好用。完整的启动代码如下:
@*
@ File:start.S
@ 功能:设置SDRAM,将程序到SDRAM,然后跳到SDRAM继续执行
@*       
 
.equ        MEM_CTL_BASE,       0x48000000
.equ        TEXT_BASE,         0x33F80000
 
.text
.global _start
_start:
 
bl  pre_lowlevel_init               @ 关闭WATCHDOG,屏蔽中断
bl  system_clock_init
bl  mem_ctrl_asm_init               @ 设置存储控制器
bl  nand_asm_init
 
relocate: /* relocate U-Boot to RAM    */
adr r0, _start /* r0 <- current position of code   */
ldr r1, =TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug         */
beq stack_setup
 
ldr sp, =1024*4                  @ 设置堆栈
    bl  copy_to_ram_from_nand      @ 到SDRAM中
 
stack_setup:
ldr sp, =0x33F80000                 @ 设置堆栈
 
ldr pc, _start_armboot              @ 跳到SDRAM中继续执行
 
_start_armboot: .word main
 
@stack_setup:
@    ldr sp, =1024*4                  @ 设置堆栈
@    bl  main
 
halt_loop:
    b   halt_loop
 
/*
 * 板级初始化预处理函数
 * 关看门狗、屏蔽中断
 */
pre_lowlevel_init:
/* turn off the watchdog */
    #define pWTCON 0x53000000
    #define INTMSK 0x4A000008/* Interrupt-Controller base addresses */
    #define INTSUBMSK 0x4A00001C
    #define CLKDIVN 0x4C000014/* clock divisor register */
 
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
 
/*
 * mask all IRQs by setting all bits in the INTMR - default
 */
mov r1, #0xffffffff
ldr r0, =INTMSK
str r1, [r0]
 
ldr r1, =0x7fff
ldr r0, =INTSUBMSK
str r1, [r0]
 
mov pc, lr
/*  end_of pre_lowlevel_init */
 
/*
 * 系统时钟初始化函数
 * S3C2440: FCLK:HCLK:PCLK = 1:4:8(FCLK is 405 MHz)
 */
#define CLKDIVN 0x4C000014
#define CLK_CTL_BASE 0x4C000000
#define MDIV_405 0x7f << 12
#define PSDIV_405 0x21
#define MDIV  MDIV_405
#define PSDIV PSDIV_405
#define CLKDIV 0x5   /* FCLK:HCLK:PCLK = 1:4:8 */
 
system_clock_init:
ldr r0, =CLKDIVN
mov r1, #CLKDIV
str r1, [r0]
/*
     * 设置arm920t为异步时钟模式
     *
     * 复位时,arm920t处于快速总线时钟模式,该模式下
     * core和AMBA都由BCLK控制,设置为异步模式后,core
     * 由FCLK控制
     */
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0
 
mov r1, #CLK_CTL_BASE
mov r2, #MDIV
add r2, r2, #PSDIV
str r2, [r1, #0x04] /* MPLLCON  */
 
mov pc, lr
/* end_of system_clock_init*/
 
/*
 * NAND FLASH初始化函数
 * TACLS:TWRPH0:TWRPH1 = 1:2:1, BUS_WIDTH_8
 */
#define S3C2440_NAND_BASE 0x4E000000
#define NFCONF_OFFSET    0x0
#define NFCONT_OFFSET    0x4
 
nand_asm_init:
ldr r0, =S3C2440_NAND_BASE
     ldr r1, =0x001210
str    r1, [r0, #NFCONF_OFFSET]
 
     mov r1, #0x3
str    r1, [r0, #NFCONT_OFFSET]
 
     mov pc, lr
/*end_of nand_asm_init*/
 
mem_ctrl_asm_init:
    @ 设置存储控制器以便使用SDRAM等外设
 
    mov r1,     #MEM_CTL_BASE       @ 存储控制器的13个寄存器的开始地址
    adrl    r2, mem_cfg_val         @ 这13个值的起始存储地址
    add r3,     r1, #52             @ 13*4 = 54
1:  
    ldr r4,     [r2], #4            @ 读取设置值,并让r2加4
    str r4,     [r1], #4            @ 将此值写入寄存器,并让r1加4
    cmp r1,     r3                  @ 判断是否设置完所有13个寄存器
    bne 1b                          @ 若没有写成,继续
    mov pc,     lr                  @ 返回
 
 
.align 4
mem_cfg_val:
    @ 存储控制器13个寄存器的设置值
    .long   0x22011110      @ BWSCON
    .long   0x00000700      @ BANKCON0
    .long   0x00000700      @ BANKCON1
    .long   0x00000700      @ BANKCON2
    .long   0x00000700      @ BANKCON3  
    .long   0x00000700      @ BANKCON4
    .long   0x00000700      @ BANKCON5
    .long   0x00018005      @ BANKCON6
    .long   0x00018005      @ BANKCON7
    .long   0x008C07A3      @ REFRESH
    .long   0x000000B1      @ BANKSIZE
    .long   0x00000030      @ MRSRB6
    .long   0x00000030      @ MRSRB7
 
启动完就跳到了main那里出了。关于LCD的参数什么的就不多说了,以前RVDS下的整个过来都没有问题。很多博客,教材上讲的很清楚。这里主要写写实现过程。
调试截图:
Eclipse开发调试ARM裸机程序(七)LCD
 
 
 
显示截图:
Eclipse开发调试ARM裸机程序(七)LCD
 
 
代码:http://download.csdn.net/detail/kangear/5268137
关键字:Eclipse  开发调试  ARM  裸机程序  LCD 引用地址:Eclipse开发调试ARM裸机程序(七)LCD

上一篇:Eclipse开发调试ARM裸机程序(七)sd卡读写
下一篇:Eclipse开发调试ARM裸机程序(五)MMU调试

推荐阅读最新更新时间:2024-03-16 14:56

Maxim宣布MAX32600MBED成为ARM mbed最新成员
Maxim Integrated的低功耗MAX32600MBED提供集安全性与高精度模拟性能于一体的IoT方案。 Maxim Integrated Products, Inc. (NASDAQ: MXIM)宣布MAX32600MBED成为ARM mbed 物联网设备平台项目的最新成员,该平台能够帮助mbed工程师和IoT开发人员快速开发基于MAX32600微控制器(MCU)嵌入式系统。 ARM mbed操作系统是一种专为物联网 (IoT) 中的 物体 设计的开源嵌入式操作系统。该操作系统包含您基于ARM Cortex-M微控制器开发连接产品所必需的全部功能,非常适合涉及智能城市、智能家庭和穿戴式设备等领域的
[物联网]
Maxim宣布MAX32600MBED成为<font color='red'>ARM</font> mbed最新成员
ARM处理器工作模式介绍
从今天开始学习ARM异常中断处理相关的知识点;首先学习ARM的工作模式。 ARM处理器共有7种运行模式,如下表所示。 ARM处理器的7种运行模式 除了用户模式之外的其它6种处理器模式称为特权模式。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中,除系统模式外,其他5种特权模式又称为异常模式。 处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下。这时,应用程序不能够访问一些受操作系统保护的系统资源。应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式的切换
[单片机]
<font color='red'>ARM</font>处理器工作模式介绍
下代或搭载三星四核ARM处理器
    北京时间7月6日消息,据国外媒体报道,苹果下一代iPhone将搭载一款基于三星Exynos4架构的四核ARM处理器。 这一消息来自远东地区的业内人士,知情人士没有提供有关新处理器的其他详细信息如时钟频率或图形处理能力等。 苹果去年发布的iPhone 4S配置了一款常规双核处理器,时钟频率为800MHz,苹果将那款处理器称作A5。那款芯片的发布时间比iPad2的发布时间早几个月。 苹果在今年发布第三代iPad的时候没有发布真正意义上的下一代芯片,而是选择了一款被称作A5X的芯片。那款处理器建立在三星45纳米低功耗架构基础之上。 与A5芯片相比,A5X的主要变化是升级了集成图形处理器。虽然处理器仍然是双核芯片,但图形处理单元已经
[手机便携]
ARM-Linux汇编到ADS汇编转换需要注意的问题
最近那些课比较麻今天拿出一段nand准备在ADS下搭建调试环境,发现两家的汇编代码有但不兼容,需要修改一下.现在罗列一下我主要修改的地方,其他很多可能没遇到,大家还是自己查一查文档吧。 1、修改头 如arm-linux汇编头: .text .global_start _start: 修改为ads版本: AREA nand1, CODE,READONLY ENTRY 注意AREA和ENTRY前面都有tab空格,否则编译出错。 2、修改段标志 去掉arm-linux汇编中的:号即可在ads中使用。 3、ads需要加上ENTRY和END指令表示程序入口和结束标志 4、ADS中的C语言混编 与arm-l
[单片机]
<font color='red'>ARM</font>-Linux汇编到ADS汇编转换需要注意的问题
ubuntu下安装eclipse插件:zylincdt,GnuARM,ARM编译工具链
1.在线安装插件zylincdt。输入 http://opensource.zylin.com/zylincdt 2.在线安装插件gnuarm ; 输入http://gnuarmeclipse.sourceforge.net/updates/ 3.下载并安装工具ARM GNU/LINUX编译链接工具--- Sourcery G++ Lite https://sourcery.mentor.com/GNUToolchain/release2187 3.1在网站上下载.bin文件。放在/home/user/目录下。 运行/bin/sh ./xxx.bin命令。提示如图: 看来是系统不支持dash shel
[单片机]
ubuntu下安装<font color='red'>eclipse</font>插件:zylincdt,GnuARM,<font color='red'>ARM</font>编译工具链
NXP推出集成LED驱动用于LCD背光显示
   Netherlands – NXP半导体(www.nxp.com) 推出3-channel LED驱动,UBA3077, 用于背光液晶显示器(LCD)。基于NXP GreenChipTM科技, UBA3077是多channel应用的完全集成的交换模式解决方案,多channel应用支持LED作为电视和电脑显示器背光源和通用照明应用的普及。      对于LCD背光, UBA3077能以精确的恒定电流驱动LED组,并提高了图片质量,包括深色图片更深,降低亮度需要很低的电流强度。用94%的效能,UBA3077 允许设计者设计更低能耗和热耗散的更薄LCD面板,提供对比度更高和更鲜艳的显示。UBA3077可以随时供货。      "设计
[电源管理]
e络盟为基于ARM的单板机推出用于人机交互界面的触摸屏模块
e络盟日前宣布为基于ARM的单板机(SBC)推出一款全集成嵌入式显示模块(EDM)— EDM6070AR-01,即一款可装配的7寸LCD触摸屏。该多功能嵌入式EDM基于Atmel ARM9 AT91SAM9X35工业级处理器。 EDM6070AR-01采用一体化设计,完美适用于各种嵌入式控制系统的人机界面(HMI)应用,包括工业控制终端、智能仪表、医疗产品、网络终端以及数据采集与分析等。其面板集显示器及连接器于一体,同时为基于ARM微控制器的Mini6935模块预留了安装位。 该模块还提供配套的Smart-Home演示应用程序,涵盖可直观并独立调整各房间照明亮度的智能LED控制器、用于调控整个房间温度及湿度的智能环
[单片机]
基于ARM开发的JTAG仿真器的调试设计
基于JTAG仿真器的调试是目前ARM开发中采用最多的一种方式。大多数ARM设计采用了片上JTAG接口,并将其作为测试、调试方法的重要组成。 JTAG仿真器通过ARM芯片的JTAG边界扫描口与ARM CPU核通信,实现了完全非插入式调试,不使用片上资源,不需要目标存储器,不占用目标系统的任何端口。由于JTAG调试的目标程序是在目标板上执行,使得仿真更加接近于目标硬件 。 目前针对嵌入式系统开发的调试工具品种繁多,如ARM公司的AXD debugger软件与Mutil-ICE仿真器等。但是大部分嵌入式调试工具价格过高,因此设计实现一种速度快、性能稳定、价格低廉、易于实现的ARM调试工具是十分必要的。 1 ARM
[单片机]
基于<font color='red'>ARM</font><font color='red'>开发</font>的JTAG仿真器的<font color='red'>调试</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved