2440裸板程序之内存初始化及重定位

发布者:幸福之舞最新更新时间:2019-04-26 来源: eefocus关键字:裸板程序  内存初始化  重定位 手机看文章 扫描二维码
随时随地手机看文章

LED对应的引脚是GPF4、GPF5、GPF6。 

使用的编译器为arm-linux-gcc-4.5.1。 

包括四个文件head.S main.c main.lds Makefile。


实验目的:把点灯的程序搬运到内存中执行。


2440使用nand启动时,会将nand前4k硬件搬运到内部4ksram中。如果需要运行大型程序的话,还要初始化外部内存。


这里写图片描述


与nGCS6或7片选相连的可以是内存,且6或7只能接同一种大小的内存。 

JZ2440v2采用的是两个钰创EM63A165TS-6GSDRAM,每个4M word x 16-bit x 4-bank,共512Mbit,也就是64M。两个16bit的组成一个32位bit的内存,共同使用nGCS6。


连接方式如下:


这里写图片描述

head.S


@memory controller

.equ BWSCON   ,0x48000000

.equ BANKCON0 ,0x48000004

.equ BANKCON1 ,0x48000008

.equ BANKCON2 ,0x4800000C

.equ BANKCON3 ,0x48000010

.equ BANKCON4 ,0x48000014

.equ BANKCON5 ,0x48000018

.equ BANKCON6 ,0x4800001C

.equ BANKCON7 ,0x48000020

.equ REFRESH  ,0x48000024

.equ BANKSIZE ,0x48000028

.equ MRSRB6   ,0x4800002C

.equ MRSRB7   ,0x48000030

.text

.global _start

_start:

            ldr     r0, =0x53000000     @Close WATCHDOG

            mov     r1, #0x0                     

            str     r1, [r0]


            ldr     r0,=BWSCON          @Init sdram

            ldr     r1,=0x22011110

            str     r1,[r0]


            ldr     r0,= BANKCON6

            ldr     r1,=0x00018005

            str     r1,[r0]


            ldr     r0,=REFRESH

            ldr     r1,=0x008c07a3

            str     r1,[r0]


            ldr     r0,=BANKSIZE

            ldr     r1,=0x000000b1

            str     r1,[r0]


            ldr     r0,=MRSRB6

            ldr     r1,=0x00000030

            str     r1,[r0]


            mov     r1,#0x400           @Relacate

            ldr     r2,=0x30000000

            mov     r3,#0x600

1:

            ldr     r4,[r1],#4

            str     r4,[r2],#4

            cmp     r1,r3

            bne     1b


            ldr     sp, =1024*4         @Call C

            ldr     lr,=loop


            @bl      main

            ldr     pc,=0x30000038    @main             @0x800

loop:

            b       loop



main.c


#define GPFCON          (*(volatile unsigned long *)0x56000050)

#define GPFDAT          (*(volatile unsigned long *)0x56000054)


#define GPF4_out        (1<<(4*2))

#define GPF5_out        (1<<(5*2))

#define GPF6_out        (1<<(6*2))

#define GPF7_out        (1<<(7*2))


void  wait(volatile unsigned long dly)

{

        for(; dly > 0; dly--);

}


int main(void)

{

        unsigned long i = 0;


        GPFCON = GPF4_out|GPF5_out|GPF6_out;            //Configure the gpio of led  


        while(1){

                wait(30000);

                GPFDAT = (~(i<<4));                     //Turn 

                if(++i == 8)

                        i = 0;

        }


        return 0;

}



man.lds


SECTIONS {

        . = 0x0;

        first  0x00000000 : { head.o }

        second 0x30000000 : AT(0x400){ main.o }

}


Makefile


objs =  head.o main.o

all: $(objs)

        #arm-linux-ld -T main.lds $^ libgcc.a -o main.elf

        arm-linux-ld -T main.lds $^ -o main.elf

        arm-linux-objcopy -O binary -S main.elf main.bin

        arm-linux-objdump -D main.elf > main.dis

clean:

        rm -f *.bin $(objs) *.elf *.dis

%.o : %.c

        arm-linux-gcc -march=armv4 -c -o $@ $<

%.o : %.S

        arm-linux-gcc -march=armv4 -c -o $@ $<


关键字:裸板程序  内存初始化  重定位 引用地址:2440裸板程序之内存初始化及重定位

上一篇:2440裸板程序之inline关键字
下一篇:2440裸板程序之代码重定位

推荐阅读最新更新时间:2024-11-03 00:55

S3C2440内存控制器详解
S3C2440的内存空间划分为不同的块,当CPU向内存控制器发出地址,内存控制器根据地址范围,发出对应片选信号到片选引脚,实现对不同设备的控制。 BANK0 BUS WIDTH The data bus of BANK0 (nGCS0) should be configured with a width as one of 16-bit and 32-bit ones. Because the BANK0 works as the booting ROM bank (map to 0x0000_0000), the bus width of BANK0 should be determined before the fir
[单片机]
S3C<font color='red'>2440</font><font color='red'>内存</font>控制器详解
在mini2440上面搞定CC2500物理层驱动
写在前面 最近基本搞定了CC2500在linux下面的驱动,在这个过程中遇到了好多问题,特此总结出来和大家分享。但是需要注意的事情是: 第一,本文不负责程序的具体讲解,诸如每一行程序都讲什么:这个在程序的里面有注释。本篇文章更侧重于从整体结构上让大家对于linux下的CC2500DE驱动有一个整体的了解,如果到时候需要深入研究的时候,再来看具体的代码; 第二,很多师弟师妹没有习惯在linux下编程,或曰,在操作系统下面写程序;并且,对于本专业的东西理解并不扎实。但是,文章中不可能就每一个涉及到的概念都大加讲解。因此,这篇文章还是需要有一些基础才能来阅读的,如果遇到什么不明白的地方,请及时来问我,或者跟帖,或者自己查资料。
[单片机]
u-boot-2009.08在mini2440上的移植(十)---增加I2C EEPROM功能
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,参考文章: http://blogimg.chinaunix.net/blog/upfile2/100811115954.pdf 10.1,实现u-boot的I2C EEPROM功能 mini2440开发板上的AT24C08A芯片提供了8kbyte的非易失的EEP
[单片机]
s3c2440的IIC控制
在tq2440和mini2440上都连接着EEPROM 它们作用也不过測试I2C总线能否用。 当中在mini2440上EEPROM型号是 AT24C08,在tq2440上这个型号是 AT24C02A。 它们之间容量不同。地址线也不一样。 S3C2440A RISC 微处理器能够支持一个多主控 IIC 总线串行接口。一条串行数据线(SDA)和一条专用时钟线(SCL) 连接到 IIC 总线的总线主控和外设之间。SDA 和 SCL 线都为双向的。都连接到GPE14(SCL) GPE15(SDA)。 为了控制多主控 IIC 总线操作,必须写入值到下面寄存器中: – 多主控 IIC 总线控制寄存器,IICCON – 多主控
[单片机]
s3c<font color='red'>2440</font>的IIC控制
TQ2440 学习笔记—— 18、存储控制器
一、S3C2440存储控制器提供了访问外部设备的信号。比如像NAND Flash、SRAM、NOR Flash、网卡等。 特性如下: — Little/Big endian (selectable by a software) 支持小字节序、大字节序(通过软件选择) — Address space: 128Mbytes per bank (total 1GB/8 banks) 每个bank地址空间为128,总共八个,即1GB — Programmable access size (8/16/32-bit) for all banks except bank0 (16/32-bit) 编
[单片机]
TQ<font color='red'>2440</font> 学习笔记—— 18、存储控制器
【JZ2440笔记】裸机实验点亮LED
一、前言 最近在学韦东山的JZ2440开发板,于是记录下学习过程中的笔记。一般学程序写的第一个例子是打印“Hello World”,而学单片机的第一个例子一般都是点亮LED,学ARM的话如果从裸机开始学,也跟玩单片机差不多,从点亮LED开始。 二、实验步骤 1、目标 点亮开发板上的3个LED灯。 2、硬件连线 点亮LED需要S3C2440芯片的IO引脚GPF4、GPF5、GPF6输出低电平即可。 3、寄存器配置 和玩单片机一个套路,配置IO模式(GPFCON寄存器)和要输出的电平(GPFDAT)就行了。即GPFCON寄存器给0x00001500把GPF4、5、6配置成输出模式,GPFDAT给0x00
[单片机]
【JZ<font color='red'>2440</font>笔记】裸机实验点亮LED
mini2440重新烧写supervivi方法
使用JLink V8烧写Nor Flash方法: 一. 做好准备工作: 比如安装JLink驱动,USB转串口驱动(如果是笔记本)... 二. 将开发板跳线拨到Nor端,连接好JLink,JLink另外一端连接在笔记本USB端口上,开发板上电。 三. 烧写: (1)打开 开始- SEGGER- J-Link ARM V4.081- J-Flash ARM; (2)File- Open Project,打开s3c2440a_embedclub.jflash(此文件在) (3)Options- Project settings 选择Flash,点击Select flash device,选中开发板对应Nor Flash型号。在这里需要注
[单片机]
mini<font color='red'>2440</font>重新烧写supervivi方法
linux-2.6.30.4移植至2440开发
一、下载linux-2.6.30.4源码,并解压 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.4.tar.gz tar zxvf linux-2.6.30.4.tar.gz 二、在系统中添加对ARM的支持 $vim Makefile 193#ARCH ?= $(SUBARCH) 194#CROSS_COMPILE ?= 195 ARCH=arm 196 CROSS_COMPILE=arm-linux- 三、修改系统时钟 $vim arch/arm/mach-s3c2440/mach-smdk2440.c 系统的外部时钟为12MHz 16
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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