关于2440在norflash上跑裸机的问题

anchorite27 2009-07-15 11:13:27
我在mdk环境下用jlink调试2440裸机程序,在SDRAM中运行顺利。现准备把程序烧写到norflash中,Scatter File如下:
;Run in Flash
LR_ROM1 0x00000000 { ; load region
ER_ROM1 0x00000000 0x0200000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 0x30000000 0x4000000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM1 0x40000000 0x00001000 {
.ANY (+RW +ZI)
}
}

Initialization File如下:
FUNC void Init (void) {

_WDWORD(0x4A000008, 0xFFFFFFFF); // Disable All Interrupts

_WDWORD(0x53000000, 0x00000000); // Disable Watchdog Timer

// Clock Setup
// FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz
_WDWORD(0x4C000000, 0x0FFF0FFF); // LOCKTIME
_WDWORD(0x4C000014, 0x0000000F); // CLKDIVN
_WDWORD(0x4C000004, 0x00043011); // MPLLCON
_WDWORD(0x4C000008, 0x00038021); // UPLLCON
_WDWORD(0x4C00000C, 0x001FFFF0); // CLKCON

// Memory Controller Setup for SDRAM
_WDWORD(0x48000000, 0x22000000); // BWSCON bank6,7=32bit
_WDWORD(0x4800001C, 0x00018005); // BANKCON6
_WDWORD(0x48000020, 0x00018005); // BANKCON7
_WDWORD(0x48000024, 0x008404F3); // REFRESH
_WDWORD(0x48000028, 0x00000032); // BANKSIZE
_WDWORD(0x4800002C, 0x00000020); // MRSRB6
_WDWORD(0x48000030, 0x00000020); // MRSRB7

_WDWORD(0x56000000, 0x000003FF); // GPACON: Enable Address lines for SDRAM
}


// Reset chip with watchdog, because nRST line is routed on hardware in a way
// that it can not be pulled low with ULINK

_WDWORD(0x40000000, 0xEAFFFFFE); // Load RAM addr 0 with branch to itself
CPSR = 0x000000D3; // Disable interrupts
PC = 0x40000000; // Position PC to start of RAM
_WDWORD(0x53000000, 0x00000021); // Enable Watchdog
g, 0 // Wait for Watchdog to reset chip

Init(); // Initialize memory
LOAD my_led.axf INCREMENTAL // Download program
PC = 0x00000000; // Setup for Running

g, main // Goto Main

启动代码用的是mdk自带的S3C2440A.S
运行后不成功,个人感觉是自写的Initialization File有问题(只初始化了SDRAM),除去Initialization File也不成功。请问各位大侠,正确的Initialization File该如何编写?或者启动代码需要哪里改动?那位手头上恰好有2440mdk跑flash的例子,能否发我一份,先谢过:)
邮箱:ysy27@sina.com
...全文
472 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
anchorite27 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 schlafenhamster 的回复:]
code定位在0,data定位在0x300000000就可以了。
[/Quote]
你这样分配不也是不连续的段吗?
schlafenhamster 2009-07-23
  • 打赏
  • 举报
回复
南韩那个sjf烧nand要15分钟(120K)。烧nor要45分钟。
现在用HJTAG烧nand不要1分钟!
schlafenhamster 2009-07-23
  • 打赏
  • 举报
回复
现在用HJTAG比南韩那个sjf快多了。
anchorite27 2009-07-23
  • 打赏
  • 举报
回复
你用的是jlink吗?jlink能否直接烧写程序?
schlafenhamster 2009-07-23
  • 打赏
  • 举报
回复
即R0=0;Rw=0x300000000.这个是正常的不叫不连续,不连续是R0或Rw中又分段的。
anchorite27 2009-07-22
  • 打赏
  • 举报
回复
Scatter File中我已经定义了,怎么不行呢?
schlafenhamster 2009-07-22
  • 打赏
  • 举报
回复
只有不连续的段才用Scatter File。我搞的程序没用过。
schlafenhamster 2009-07-21
  • 打赏
  • 举报
回复
code定位在0,data定位在0x300000000就可以了。
anchorite27 2009-07-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 schlafenhamster 的回复:]
应用程序是裸机程序没OS。整个程序就一个约120K。
[/Quote]
有定位在0的程序示例吗?
LanceJin 2009-07-19
  • 打赏
  • 举报
回复
NOR无需初始化就可以跑的,问题应该出在S3C2440A.S上,你的地址配置正确吗?
schlafenhamster 2009-07-19
  • 打赏
  • 举报
回复
应用程序是裸机程序没OS。整个程序就一个约120K。
anchorite27 2009-07-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 schlafenhamster 的回复:]
nor和nand我都用过,当时用nand是要写2个程序(一个是4K中的程序),写nor时就一个定位在0的程序,不要那个4K的boot。不需要写什么Scatter File的。只是运行时发现速度慢多了,后来打开了codecache就和SRAM中的差不多了。
[/Quote]
你说的程序是写在应用程序一起编译吗?还是写初始化程序呢?能否提供一下?谢谢
schlafenhamster 2009-07-19
  • 打赏
  • 举报
回复
nor和nand我都用过,当时用nand是要写2个程序(一个是4K中的程序),写nor时就一个定位在0的程序,不要那个4K的boot。不需要写什么Scatter File的。只是运行时发现速度慢多了,后来打开了codecache就和SRAM中的差不多了。
anchorite27 2009-07-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jlctt 的回复:]
NOR无需初始化就可以跑的,问题应该出在S3C2440A.S上,你的地址配置正确吗?
[/Quote]
我用mdk自添加的S3C2440A.S,不知哪里需要修改?
anchorite27 2009-07-16
  • 打赏
  • 举报
回复
没有高手会吗?期待中……

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧