共2条
1/1 1 跳转至页
OS,2440,ram 不用OS调试2440,请教代码帮运到ram和一些怪问题

问
买了个s3c2440开发板,没有用linux。我们打算把他当超级单片机用。移植了我们公司以前买的商业tcp、ip协议。
现在有几个问题,一个就是把代码加载到sdram中去运行的问题。还有一个就是读写nor flash的问题,这两天搞的头晕:
1。代码加载问题的疑惑:39vf160:0x0000_0000。 SDRAM:0X3000_0000. 我的想法是和bootLoader一样,把2M byte的falsh内容统统给mov到sdram,然后把sdrem remap到0x0000_0000的地址。这样中断服务程序也在sdram。速度应该很快,同时也可以读写39vf160,这样可以实现对自己程序flash 的程序升级,通过tcp/ip。我看了twentyone大侠的那个4510的文章,由于twentyone大侠4510地址分配是0~2M,2M~18M连续地址。我可以理解remap后程序可以继续在sdram立顺序运行,可是我这个应用flash地址和sdram地址差几百M,用这个方法可以吗? 比方我把ro设定为0x00000000,
rw设定为0x3000_0000+2M的地址。这样sdram中的前面2M是程序,后面是变量(ZI+RW),但是remap后,sdram地址变成0x0000_0000开始了,长度是32M ,变量(ZI+RW)可以自然的从0x3000_0000+2M变成0x0000_0000+2M的地址吗?
我想不明白,请高手指点。
2。我测试了一个读写flash的程序,在关闭mmu的情况下,可以正常的erase和写,但是erase_block后,居然我原来设定的2个定时器不能正常工作了,我查来查去。在erase_block的程序中有个
CMD_ADDR0 = 0xaaaa;
CMD_ADDR1 = 0x5555;
CMD_ADDR0 = 0x8080;
CMD_ADDR0 = 0xaaaa;
CMD_ADDR1 = 0x5555;
*(volatile U16 *)sector = 0x3030;
DelayMs(25);
这个几句,把 *(volatile U16 *)sector = 0x3030;这个语句屏蔽居然就不会影响到我的定时器,尔一开上就不行。真是奇怪。
小弟是ARM菜鸟,问题就比较菜,希望大侠不用见怪。
答 1: 这里ARM论坛太冷了啊,没有人回答问题 答 2: 楼主买的什么tcp?多少米?功能如何? 答 3: 万把块钱吧,速度 不错 答 4: 方法可以不设rw地址,在程序reset处开始未进入c代码时就复制及remap,那样ro、rw就一块都过去了,然后初始化zi。 答 5: 2440没有remap的功能,不用想了 答 6: remap 是 philps的ARM7上的功能三星的好象没有吧
不用remap 就把中断向量设置好就可以,或用mmu应该也可以。 答 7: 其实很简单,和44b0的方法差不多。现在搞定了
现在有几个问题,一个就是把代码加载到sdram中去运行的问题。还有一个就是读写nor flash的问题,这两天搞的头晕:
1。代码加载问题的疑惑:39vf160:0x0000_0000。 SDRAM:0X3000_0000. 我的想法是和bootLoader一样,把2M byte的falsh内容统统给mov到sdram,然后把sdrem remap到0x0000_0000的地址。这样中断服务程序也在sdram。速度应该很快,同时也可以读写39vf160,这样可以实现对自己程序flash 的程序升级,通过tcp/ip。我看了twentyone大侠的那个4510的文章,由于twentyone大侠4510地址分配是0~2M,2M~18M连续地址。我可以理解remap后程序可以继续在sdram立顺序运行,可是我这个应用flash地址和sdram地址差几百M,用这个方法可以吗? 比方我把ro设定为0x00000000,
rw设定为0x3000_0000+2M的地址。这样sdram中的前面2M是程序,后面是变量(ZI+RW),但是remap后,sdram地址变成0x0000_0000开始了,长度是32M ,变量(ZI+RW)可以自然的从0x3000_0000+2M变成0x0000_0000+2M的地址吗?
我想不明白,请高手指点。
2。我测试了一个读写flash的程序,在关闭mmu的情况下,可以正常的erase和写,但是erase_block后,居然我原来设定的2个定时器不能正常工作了,我查来查去。在erase_block的程序中有个
CMD_ADDR0 = 0xaaaa;
CMD_ADDR1 = 0x5555;
CMD_ADDR0 = 0x8080;
CMD_ADDR0 = 0xaaaa;
CMD_ADDR1 = 0x5555;
*(volatile U16 *)sector = 0x3030;
DelayMs(25);
这个几句,把 *(volatile U16 *)sector = 0x3030;这个语句屏蔽居然就不会影响到我的定时器,尔一开上就不行。真是奇怪。
小弟是ARM菜鸟,问题就比较菜,希望大侠不用见怪。
答 1: 这里ARM论坛太冷了啊,没有人回答问题 答 2: 楼主买的什么tcp?多少米?功能如何? 答 3: 万把块钱吧,速度 不错 答 4: 方法可以不设rw地址,在程序reset处开始未进入c代码时就复制及remap,那样ro、rw就一块都过去了,然后初始化zi。 答 5: 2440没有remap的功能,不用想了 答 6: remap 是 philps的ARM7上的功能三星的好象没有吧
不用remap 就把中断向量设置好就可以,或用mmu应该也可以。 答 7: 其实很简单,和44b0的方法差不多。现在搞定了
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 |