分类: LINUX
2008-09-29 14:42:06
原创:cursor
blog:http://blog.chinaunix.net/u2/77051
平台:QQ2440v3
参考: thisway.diy的《S
在跟着《S
这里分析是在init.s这个文件中:
1, scs2410 所需要寄存器是NFCONF、NFCMD、NFADDR、NFDATA、NFSTAT和NFECC,文档中实际上是使用了前五个,而s
2, 在void init_nand()中,原文件通过配置NFCONF和重设使能完成初始化,在2440中需要用到NFCONF和NFCONT设置,使能寄存器也是通过NFCONTS设置;
3, 在传送过程中要用到NFSTAT的bit[2],即使NFCONT bit[8]中没有使用中断模式,这个位是在使能读COMMAND=0之前通过写入1来清除这个值,在写入地址完成后要写入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()的?向你请教。