mini2440p25 单元板 裸板板

micro2440 裸板程序调试记录一
硬件:micro2440,SDRAM: k4s561632N-LC75,编译器:CodeSourcery
arm--arm-none-eabi.exe
初次调试裸板程序,没有调试器,只能用led点亮的方法来判读程序是否跑飞,过程很痛苦,写个笔记记录下:
程序功能:将arm片内4k sram中的部分内容搬到sdram中运行,主要训练链接脚本的使用,熟悉系统的启动过程,sdram的初始化配置等目的。
crt0.s: 负责设置系统时钟,拷贝点灯应用程序到SDRAM中,然后跳到SDRAM继续执行。
led.c: 点灯应用程序
sdram.c:sdram 寄存器初始化
led.lds: 链接脚本
下面逐一说明:
三种时钟s3c2440A spec上的说明
s3c2440A有两个PLL,一个MPLL用于FCLK,HCLK,PCLK,另一个UPLL,用于usb模块.Mpll时钟由外接的12MHZ晶振通过调节pll倍频参数P,M,S到达400MHZ(最大可为533MHZ),经过FCLK:HCLK:PCLK=1:4:8分频,HCLK为100MHZ,此频率给SDRAM提供时钟,这是程序中需要用到的时钟知识。
crt0.s代码如下:
@******************************************************************************
@ File:head.s
@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行
@******************************************************************************
.equ MEM_CTL_BASE, 0x
.equ SDRAM_BASE, 0x
.equ MPLLCON, 0x4c000004
.equ CLKDIVN, 0x4c000014
.equ GPBCON , 0x
.equ GPBDAT , 0x
.equ WTCON, 0x
.global _start
ldr r0, =WTCONmov r1, #0x0str r1, [r0]
@ ldr r0, =GPBCON
@ ldr r0, =GPBDAT
@ ldr r1, =0xffff
@set FCLK:HCLK:PCLK=1:4:8ldr r0,=CLKDIVNmov r1,#0x05str r1,[r0]
@unneed delay
ldr r0, =0x10000
sub r0, r0, #1
@ change fast bus mode to asyn mode because HDIVN is not 0mrc p15,0,r0,c1,c0,0orr r0,r0,#0xc0000000mcr p15,0,r0,c1,c0,0
@unneed delay
ldr r0, =0x10000
sub r0, r0, #1
@ set Mpll clock to 400MHZ ldr
r0,=MPLLCONldr
r1,=((92&&12)|(1&&4)| 1);str
@ set sp before jump to c code ldr sp, =4096bl memsetup
@ ldr r0, =GPBDAT
@ mov r1, #0x07f
[r0] bl copy_steppingstone_to_sdram
@ ldr r0, =GPBDAT
@ mov r1, #0x0
@jump to SDRAM to continueldr sp,=0x
@设置堆栈ldr pc,=main
halt_loop:b halt_loop
copy_steppingstone_to_sdram:@copy the 2k code from steppingstone(address begins at 2048) to sdram(address begins at 0x)mov r1,#2048ldr r2,=SDRAM_BASEmov r3,#4096
1: ldr r4,[r1],#4str r4,[r2],#4cmp r1,r3bne 1bmov pc,lr
================================================================================================
分段存放代码 first section :0x0-0x800 存放crt0.o sdram.o ,second section: 0x800-0x1000 存放led.o, 第一部分在SRAM中运行,第二部分在SDRAM中运行。布局如下:
{first 0x0:{crt0.o sdram.o}second 0x:AT(2048) {led.o}
怎么传代码。。。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!各位高手们,板子是mini2440 的,我这个简单的裸板点灯,看上去非常简单,可惜就是跑不起来,谁能解决下?
[问题点数:40分]
本版专家分:0
CSDN今日推荐
本版专家分:0
本版专家分:10999
2014年3月 C/C++大版内专家分月排行榜第二
本版专家分:10999
2014年3月 C/C++大版内专家分月排行榜第二
本版专家分:350
本版专家分:45930
2014年11月论坛优秀版主
2013年1月 硬件/嵌入开发大版内专家分月排行榜第一2012年10月 硬件/嵌入开发大版内专家分月排行榜第一2012年9月 硬件/嵌入开发大版内专家分月排行榜第一2012年8月 硬件/嵌入开发大版内专家分月排行榜第一2012年7月 硬件/嵌入开发大版内专家分月排行榜第一2012年6月 硬件/嵌入开发大版内专家分月排行榜第一2012年5月 硬件/嵌入开发大版内专家分月排行榜第一2012年4月 硬件/嵌入开发大版内专家分月排行榜第一2012年3月 硬件/嵌入开发大版内专家分月排行榜第一2012年2月 硬件/嵌入开发大版内专家分月排行榜第一2012年1月 硬件/嵌入开发大版内专家分月排行榜第一2011年11月 硬件/嵌入开发大版内专家分月排行榜第一2011年10月 硬件/嵌入开发大版内专家分月排行榜第一2011年9月 硬件/嵌入开发大版内专家分月排行榜第一
2014年10月 硬件/嵌入开发大版内专家分月排行榜第二2014年2月 硬件/嵌入开发大版内专家分月排行榜第二2013年10月 硬件/嵌入开发大版内专家分月排行榜第二2013年8月 硬件/嵌入开发大版内专家分月排行榜第二2013年3月 硬件/嵌入开发大版内专家分月排行榜第二2012年12月 硬件/嵌入开发大版内专家分月排行榜第二2012年11月 硬件/嵌入开发大版内专家分月排行榜第二2011年12月 硬件/嵌入开发大版内专家分月排行榜第二
2014年4月 硬件/嵌入开发大版内专家分月排行榜第三2014年1月 硬件/嵌入开发大版内专家分月排行榜第三2013年12月 硬件/嵌入开发大版内专家分月排行榜第三2013年11月 硬件/嵌入开发大版内专家分月排行榜第三2013年4月 硬件/嵌入开发大版内专家分月排行榜第三
本版专家分:30
结帖率 75%
本版专家分:10
结帖率 97.33%
本版专家分:538
本版专家分:6
本版专家分:43
本版专家分:662
2012年12月 硬件/嵌入开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
CSDN今日推荐Life is brief, and then you die, you know?
2440裸板程序之内存初始化及重定位
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-6G的SDRAM,每个4M word x 16-bit x 4-bank,共512Mbit,也就是64M。两个16bit的组成一个32位bit的内存,共同使用nGCS6。
连接方式如下:
@memory controller
.equ BWSCON
.equ BANKCON0 ,0x
.equ BANKCON1 ,0x
.equ BANKCON2 ,0x4800000C
.equ BANKCON3 ,0x
.equ BANKCON4 ,0x
.equ BANKCON5 ,0x
.equ BANKCON6 ,0x4800001C
.equ BANKCON7 ,0x
.equ REFRESH
.equ BANKSIZE ,0x
.equ MRSRB6
,0x4800002C
.equ MRSRB7
.global _start
@Close WATCHDOG
r0,=BWSCON
@Init sdram
r0,= BANKCON6
r0,=REFRESH
r1,=0x008c07a3
r0,=BANKSIZE
r0,=MRSRB6
r4,[r1],#4
r4,[r2],#4
sp, =1024*4
#define GPFCON
(*(volatile unsigned long *)0x)
#define GPFDAT
(*(volatile unsigned long *)0x)
#define GPF4_out
(1&&(4*2))
#define GPF5_out
(1&&(5*2))
#define GPF6_out
(1&&(6*2))
#define GPF7_out
(1&&(7*2))
wait(volatile unsigned long dly)
for(; dly & 0; dly--);
int main(void)
unsigned long i = 0;
GPFCON = GPF4_out|GPF5_out|GPF6_
wait(30000);
GPFDAT = (~(i&&4));
if(++i == 8)
SECTIONS {
0x : { head.o }
second 0x : AT(0x400){ main.o }
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
rm -f *.bin $(objs) *.elf *.dis
arm-linux-gcc -march=armv4 -c -o $@ $&
arm-linux-gcc -march=armv4 -c -o $@ $&
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!在slackware 13 x86下进行mini0)开发裸板程序 | 格物往事&nbsp
本站运行在Vultr VPS东京机房!一起学mini2440裸机开发(一)--第一个led灯点亮
> 一起学mini2440裸机开发(一)--第一个led灯点亮
一起学mini2440裸机开发(一)--第一个led灯点亮
开发板:mini2440, NandFlash:K9F2G08U0B 256M大小,CPU:S3C2440A 。开发环境:MDK4.11本文引用地址:仿真器:Jlink v8这是我用csdn发表的第一个文章,之前使用过arm-linux-gcc裸机开发mini2440,但是很多函数什么的不能直接调用(我的技术问题),准备重新整理一下ARM裸机,整理好之后准备下一阶段学习。关于软件MDK4.11和它的注册机,我传不上去,说是由于文件太大,又想要的直接留言要就行了。下面开始我们的第一个LED灯的点亮程序吧!1、新建一个项目工程双击MDK图标进入开发环境,如下图,单击Project/New uVision Project,选择你要创建文档的位置,文档名为test,单击保存选择CPU为Samsung/S3C2440A,单击OK单击完OK按钮后,咱们先看一下原来的空test文件夹里多了什么文件,当然你也可以不用看,我是看看MDK到底是默认给咱们提供了什么方便,下图为单击OK后多出的文档很容易看出多出来一个test工程文档。在上一步单击完OK后,会弹出下图,该图是为了让你选择是不是将Samsung S3C2440的启动代码复制添加的你的工程文档。这段启动代码咱们以后分析,在这里先选择&是&选择&是&后,一个工程文档建好了,如下图所示。你看上图,可以看到工程文档自动添加了S3C2440.s,这就是上一步选择&是&后自动添加的启动代码,咱们再看看test文件夹里多了什么文件。很容易可以看出多了三个文件,其中一个就是S3C2440.s,这个代码很重要啊。咱们现在先不管他,接着下一步。2、新建一个文件。选择File/New,新建一个文件。将该文件保存并命名为test1,注意后面要加后缀.c,单击保存将test1.c文件添加到你的工程,对着Source Group1右击,选择&Add Files to Group "Source Group 1"...&选择刚才建立的test1.c,单击Add,该文件就被加到了工程中。这里不需要添加别的文件了,直接点击Close就可以了。下图可以看到test1.c已经被加到工程中了。3、编辑test1.c文件。这里我们再添加别的文件,也不再使用include包含什么东西。test1.c的代码如下,可以直接复制粘贴。里边的内容应该可以显示,这也是我从新浪搬家到这里的原因了,发现新浪的注释代码有时候不能显示。#define rGPBCON (*(volatile unsigned long*)0x)#define rGPBDAT (*(volatile unsigned long*)0x)#define Led1_On ~(1<<5)#define Led1_Off (1<<5)void Led_Port_Init(void);void delay(int i);int main(void){Led_Port_Init();while(1){//Led1亮rGPBDAT&=Led1_On;delay(10000);//Led1灭rGPBDAT|=Led1_Odelay(10000);}}void Led_Port_Init(void){//设置GPB5为输出端口rGPBCON &= ~(3<<10);rGPBCON |= (1<<10);}void delay(int t){int a,b;for(a=0;a<=i;a++)for(b=0;b<=100;b++);}将上面的代码复制粘贴完之后,注意保存。这时候还不能编译,如果编译,会出现如下图的错误。意思是说ROM1没有定义什么的,下面在用之前需要配置4、配置之前的准备工作首先,在你MDK安装目录下,找到文件Ext_RAM的配置文件,如下图是我的Ext_RAM的路径将这个Ext_RAM文件复制到咱们创建的test工程存放的文件夹中,我的是下图修改该文件的一处内容,只修改一处哈,如下图,将LOAD Obj\Blinky.axf INCREMENTAL // Download program修改为LOAD .\test.axf INCREMENTAL // Download program这里的.\表示当前文件夹,test是你的工程文件名,比如说你新建的工程为wangwensong,那么这里就要改为.\wangwensong.axf了。做完准备工作,下面开始进行配置。在Target 1处鼠标右击,选择Options for Target Target 1....弹出下图,配置Target,如下图配置Debug,如下图。因为我使用的是Jlink仿真,所以选择J-LINK/J-TRACE,那个.\Ext_RAM.ini文件就是刚才我们复制修改后的文件,添加进来就行了配置Utilities,如下图至此配置完成,点击OK,就行了。5、编译点击保存按钮,先保存一下,再点击,编译文件。这样咱们就可以仿真了。6、仿真我使用的是Jlink仿真,这里你首先要安装好Jlink的驱动,要不然不能用。我感觉MDK的Jlink仿真就是比ADS的仿真好,用起来方便。首先,将Jlink与你的电脑、mini2440开发板连接好,将mini2440的开关注意拨到nor flash启动,要不然你的jlink不工作的,打开开发板电源。点击仿真按钮,然后MDK会进入仿真环境?,不好意思,出现了错误error,Error:Flash Download failed -ARM920T如下图。对于这个错误,我表示很高兴啊!!在解决它的时候我又明白了一个很重要的知识点!咱们先把他解决了吧,只需要修改一项,那就是咱们在配置Utilities的时候将那个Update Target before Debugging前面的勾去掉,如下图修改完这一项后,你就可以再点击仿真按钮,一会儿你的板子上的灯就会一亮一灭了。7、总结到第六步,这篇文章的目的就达到了,这一步还是针对上一步中出现的错误进一步分析。看一下出现错误的时候,Build Output输出的信息,如下图输出的信息是:No Algorithm found for:H - HErase skipped!那么这是什么意思呢?联系出错提示框中的错误信息&Flash Downloaded flashed&,可以看出这里是MDK要找以0x开头的地址空间的Flash下载算法(algorithm),但是0x开头的空间不是Flash地址空间,而是内存空间(SDRAM的起始地址是0x),记得咱们在配置Target时,设置的地址其实就是基于内存加载的。这样解决方法就有了。既然咱们选择的是基于内存的加载方式,就应该在配置Ultilities时,取消&Update Target before Debugging&,这个选项只能在Flash加载方式中使用。在这里说明一下,RAM(SDRAM也是其中一种)表示的是读写存储器,可其中的任一存储单元进行读或写操作,计算机关闭电源后其内的信息将不在保存,再次开机需要重新装入,通常用来存放操作系统,各种正在运行的软件、输入和输出数据、中间结果及与外存交换信息等,我们常说的内存主要是指RAM。所以咱们的开发板如果断电再重启,程序就没有了,解决这个的办法是将程序从sdram中复制到nand flash中去,以后就会用到。
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一

我要回帖

更多关于 imx6裸板烧写 的文章

 

随机推荐