完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,我在学习i2c编写程序的时候发现一个问题,下进去没有反应,一开始我怀疑是printf的事但是测试后printf是好使的,然后我就怀疑是nand flash的事,结果网上都说是它 的事,但是我用网上的那些和自己看手册的改的程序都不好使,我改过lds文件,head文件还有nand文件里的发送周期,但是都不好使,有没有大神是好使的分享一下啊我现在是一点办法都没有了,我的nand flash的型号是k9f2g08u0c
|
|
相关推荐
4个回答
|
|
@******************************************************************************
这是我的head.S文件 @ File: head.S @ 功能: 设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行 @****************************************************************************** .extern main .text .global _start _start: @****************************************************************************** @ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用 @****************************************************************************** b Reset @ 0x04: 未定义指令中止模式的向量地址 HandleUndef: b HandleUndef @ 0x08: 管理模式的向量地址,通过SWI指令进入此模式 HandleSWI: b HandleSWI @ 0x0c: 指令预取终止导致的异常的向量地址 HandlePrefetchAbort: b HandlePrefetchAbort @ 0x10: 数据访问终止导致的异常的向量地址 HandleDataAbort: b HandleDataAbort @ 0x14: 保留 HandleNotUsed: b HandleNotUsed @ 0x18: 中断模式的向量地址 b HandleIRQ @ 0x1c: 快中断模式的向量地址 HandleFIQ: b HandleFIQ Reset: ldr sp, =4096 @ 设置栈指针,以下都是C函数,调用前需要设好栈 bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启 bl clock_init @ 设置MPLL,改变FCLK、HCLK、PCLK bl memsetup @ 设置存储控制器以使用SDRAM bl nand_init @ 初始化NAND Flash @ 复制代码到SDRAM中 ldr r0, =0x30000000 @ 1. 目标地址 = 0x30000000,这是SDRAM的起始地址 mov r1, #4096 @ 2. 源地址 = 0 mov r2, #16*1024 bl CopyCode2SDRAM @ 调用C函数CopyCode2SDRAM bl clean_bss @ 清除bss段,未初始化或初值为0的全局/静态变量保存在bss段 msr cpsr_c, #0xd2 @ 进入中断模式 ldr sp, =0x3100000 @ 设置中断模式栈指针 msr cpsr_c, #0xdf @ 进入系统模式 ldr sp, =0x34000000 @ 设置系统模式栈指针, ldr lr, =ret_initirq @ 设置返回地址 ldr pc, =init_irq @ 调用中断初始化函数 ret_initirq: msr cpsr_c, #0x5f @ 设置I-bit=0,开IRQ中断 ldr lr, =halt_loop @ 设置返回地址 ldr pc, =main @ 调用main函数 halt_loop: b halt_loop HandleIRQ: sub lr, lr, #4 @ 计算返回地址 stmdb sp!, { r0-r12,lr } @ 保存使用到的寄存器 @ 注意,此时的sp是中断模式的sp @ 初始值是上面设置的4096 ldr lr, =int_return @ 设置调用IRQ_Handle函数后的返回地址 ldr pc, =IRQ_Handle @ 调用中断分发函数,在interrupt.c中 int_return: ldmia sp!, { r0-r12,pc }^ @ 中断返回, ^表示将spsr的值复制到cpsr |
|
|
|
lds文件
SECTIONS { . = 0x30000000; .text : { head.o(.text) init.o(.text) nand.o(.text) *(.text) } .rodata ALIGN(4) : {*(.rodata*)} .data ALIGN(4) : { *(.data) } __bss_start = .; .bss ALIGN(4) : { *(.bss) *(COMMON) } __bss_end = .; } |
|
|
|
nand.c中改动的函数
#define LARGER_NAND_PAGE 1 static void s3c2440_write_addr_lp(unsigned int addr) { int i; S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000; S3C2440_NAND * s3c2440nand = (S3C2440_NAND *)0x4e000000; volatile unsigned char *p = (volatile unsigned char *)&s3c2440nand->NFADDR; int col, page; col = addr & NAND_BLOCK_MASK_LP; page = addr / NAND_SECTOR_SIZE_LP; *p = col & 0xff; /* Column Address A0~A7 */ for(i=0; i<10; i++); *p = (col >> 8) & 0x0f; /* Column Address A8~A11 */ for(i=0; i<10; i++); *p = page & 0xff; /* Row Address A12~A19 */ for(i=0; i<10; i++); *p = (page >> 8) & 0xff; /* Row Address A20~A27 */ for(i=0; i<10; i++); *p = (page >> 16) & 0x01; /* Row Address A28~A29 */ for(i=0; i<10; i++); } void nand_init(void) { S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000; S3C2440_NAND * s3c2440nand = (S3C2440_NAND *)0x4e000000; #define TACLS 1 #define TWRPH0 0 #define TWRPH1 0 /* 判断是S3C2410还是S3C2440 */ if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002)) { /* 使能NAND Flash控制器, 初始化ECC, 禁止片选, 设置时序 */ s3c2410nand->NFCONF = (1<<15)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0); /* 复位NAND Flash */ s3c2410_nand_reset(); } else { /* 设置时序 */ s3c2440nand->NFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4); /* 使能NAND Flash控制器, 初始化ECC, 禁止片选 */ s3c2440nand->NFCONT = (1<<4)|(1<<1)|(1<<0); /* 复位NAND Flash */ s3c2440_nand_reset(); } } |
|
|
|
小弟用的jlink下载,下载到地址0和0x30000000中都试过了都是没用的
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2160 浏览 6 评论
1968 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4523 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 20:55 , Processed in 0.915605 second(s), Total 84, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号