Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31844
  • 博文数量: 7
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-23 10:43
文章分类
文章存档

2011年(1)

2008年(6)

我的朋友
最近访客

分类: LINUX

2008-09-29 14:42:06

原创:cursor

bloghttp://blog.chinaunix.net/u2/77051

平台:QQ2440v3

参考:    thisway.diy的《S3C2410完全开发》

 

       在跟着《S3C2410完全开发》学习熟悉arm结构,但是平台还是有些差异,对于一个尚且还不是很深入的菜鸟来说还是会碰到很多问题。前面五个实验应该基本上通过修改一下gpio管脚就可以在板子上看到led了,但是到了第六个实验的时候“nand  flash control”的时候相信也会有很多朋友像我一样会被卡住并且后面的实验无法继续。下面我来分析一下它们的区别(声明:本人是菜鸟级别,欢迎砸砖):

这里分析是在init.s这个文件中:

1,  scs2410 所需要寄存器是NFCONFNFCMDNFADDRNFDATANFSTATNFECC,文档中实际上是使用了前五个,而s3c2440中我们除了五个以外还用到了NFCONT,在这里先注意s3c2440这些寄存器的地址跟s3c2410是不一样了的,当然本人没有看过s3c2410的文档,但是要把他们改过来就好了。

2,  void init_nand()中,原文件通过配置NFCONF和重设使能完成初始化,在2440中需要用到NFCONFNFCONT设置,使能寄存器也是通过NFCONTS设置;

3,  在传送过程中要用到NFSTATbit[2],即使NFCONT bit[8]中没有使用中断模式,这个位是在使能读COMMAND=0之前通过写入1来清除这个值,在写入地址完成后要写入0才能顺利完成传送;

总结,在做实验中要注意的是求同存异,通过分析不同点我们才能使我们更深入了解之中内部实现的原来,并不仅仅只是“拿来主义”。

阅读(2315) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

cursor032008-10-17 15:55:00

再认真分析一下: nand: file format binary Disassembly of section .data: 00000000 <.data>: 0: e3a0da01 mov sp, #4096 ; 0x1000 4: eb00000b bl 0x38 8: eb000011 bl 0x54 c: eb000042 bl 0x11c 10: e3a00203 mov r0, #805306368 ; 0x30000000 14: e3a01a01 mov r1, #4096 ; 0x1000 18: e3a02b01 mov r2, #1024 ; 0x400 1c: eb00005c bl 0x194 ... 194: e1a0c00d mov ip, sp; //4096 198: e92dd800 stmdb sp!, {fp, ip, lr, pc}//压榨保存fp ip lr pc

cursor032008-10-17 15:11:31

网络掉线了几天,今天电脑蓝屏换了个硬盘接口就好了,网也能上了。对于原来工作修过主板的我也不是很清楚怎么回事,不过还是挺好的----毕竟能上网了,呵呵。 你问的问题我在那时候也很模糊,今天查了一下资料还是无法回答的你的问题,但是有点相关: 《嵌入式系统原理及接口技术》符意德 陆阳编著 在3.3汇编程序设计-》 3.3.1汇编编程规则-》(3)预定义变量有一段话: 在第一章中介绍的ads1.2工具软件,该工具软件中包含了arm汇编器对arm9核内部寄存器进行了预定义,因此,程序指令中可以直接使用寄存器名。.... ... a1~a4 这几个变量用作参数,结果或临时值的存储,与R0~R3寄存器对应。 。。。 因为《2410完全开发手册》不是用ads的汇编器,但是我想应该大概原理是一样吧,不过反汇编代码中我还是看得不是很明白。呵呵,菜鸟嘛。应该大致理解就是汇编器编译的时候会把这几个变量参数对应上。

chinaunix网友2008-10-14 12:25:10

你好。我在做这个实验时也遇到了这个问题,看了你的博客之后问题解决了。但是,在汇编中调用c函数时,参数怎样传递?比如在head.s中: ldr r0, =0x30000000 @1. 目标地址=0x30000000,这是SDRAM的起始地址 mov r1, #4096 @2. 源地址 = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处 mov r2, #1024 @3. 复制长度= 1024(bytes),对于本实验的main.c,这是足够了 bl nand_read_ll @调用C函数nand_read_ll 这个汇编文件中的三个参数是怎样传给nand_read_ll()的?向你请教。

chinaunix网友2008-10-14 12:13:26

你好。我在做这个实验时也遇到了这个问题,看了你的博客之后问题解决了。但是,在汇编中调用c函数时,参数怎样传递?比如在head.s中: ldr r0, =0x30000000 @1. 目标地址=0x30000000,这是SDRAM的起始地址 mov r1, #4096 @2. 源地址 = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处 mov r2, #1024 @3. 复制长度= 1024(bytes),对于本实验的main.c,这是足够了 bl nand_read_ll @调用C函数nand_read_ll 这个汇编文件中的三个参数是怎样传给nand_read_ll()的?向你请教。