搜索
bottom↓
回复: 14

移植djyos到mini2440的过程分享

[复制链接]

出0入0汤圆

发表于 2009-6-2 16:08:24 | 显示全部楼层 |阅读模式
本来想先把djyos移植到lpc上的,应广大网友的要求,还是先移植到mini2440上,为此,买了一块mini2440板。从2410到2440,本应很简单很快,但由于情敌麻痹,还是费了不少周章,写出来,大家共勉之,技术是实实在在的,再简单的东西,也切不可大意,否则你会受到惩罚的。

    收到板子已经两天了,很小巧的一个板子,但麻雀虽小五脏俱全,还带一个3.5寸的真彩屏,才500多,超值啊。我一直做工业产品,成本控制方面不在行,真佩服友善之臂的成本控制。美中不足的是,该板子太紧凑了,但液晶屏架在元件面的上面,导致按钮、跳线等都无法操作,更甭说用示波器、万用表测量器件上的信号了。嘻嘻,俺做硬件,比较关注这个。想把液晶换到焊接面安装,但元件面紧凑的连拧螺丝的位置都没有。
    因为已经有了2410版,而2410和2440又极为相似,移植还不是小菜一碟,情敌麻痹的思想就这样蔓延开来了。把initcpu.s文件中跟时钟相关的寄存器一改,就想看看能不能转起来,一边哼着小调,一边轻快地连号先,ok,上电,运行JflashARM,打开run_inram.bin,点F7开始烧录,本以为能看到那个熟悉的进度条,但实际得到的是:找不到flash芯片。难道配置错了,仔细检查,再对照友善的原理图,拆下液晶核对芯片型号,修改配置后,还是不对。最后才发现,是选择nandflash启动还是norflash启动的开关被拨到了nand一边,怪不得不能烧写norflash了。把开关拨到norflash一边后,再试,只见进程条欢快地闪了几下,完成了。
    flash烧录成功了,总该可以看到运行结果了吧,事实证明,我这种想法是相当的愚蠢的。连上超级终端后,上电,看,屏幕纹丝不动,我一下子就蔫了。赶紧烧录boot_rom.bin,连接仿真器,加载debug.elf,先run一下,停下来一看,程序没停在djy_service函数:
void __djy_service(struct event_script *my_event)
{
    while(1);
}
的while(1);处,而是在0x00000028处,即发生了取址异常。然后单步调试,发现程序总是很神经,执行结果经常是毫无道理的,也时不时会发生异常,未定义指令、取址、数据异常均可能发生,傻了!
    汇编级单步调试之,发现经常有一些指令的执行结果是不对的,比如一条
    mov  r1,r2指令,执行完后发现r1不变倒是SP变了,这样程序不乱飞才怪呢?
    为什么呢?难道用仿真器看到的内容和CPU执行时取址得到的内容不一致吗?灵感闪现了,思路进行到这里,问题已经解决大半了,仿真器可能是通过jtag口直接访问内存,而cpu可能是通过完整的总线控制器访问内存,读到的内容可能真的不一样。这时才想起,改initcpu.s时,只修改了时钟控制寄存器,没有修改总线控制寄存器,2440的速度比2410高,总线速度可能跟不上。找到问题了就好,赶紧按友善提供的example中的配置,把总线配置改了过来。再试,好了,程序终于停在while(1)上了,小小地开心了一把,但超级终端还是没有输出。这个问题,现在说来像侃故事,其实在程序乱飞毫无头绪的时候,瞧自己抓耳挠腮那个猴样,很痛苦的,也花了很多时间,正印证了一句古话:心急是吃不着热粥的!
    仔细对比2410和2440的uart功能和寄存器配置,发现其除了fifo深度以外,都是相同的,2410的fifo是16字节,而2440则扩充到64字节,体现在寄存器上,就是fifo状态寄存器UFSTAT中控制位的定义不同。按2440的UFSTAT修改代码后,这下总应该可以了吧!遗憾的是,超级终端还是没有响应,还得单步调试,把断点放在直接往fifo写数据的地方,发现程序确实正常发送数据,就是接收不到,先怀疑时钟配合问题,看是不是baud不对,也找不出纰漏。有了前面的经验,这次不慌了,仔细看mini2440板子的说明,终于发现了问题所在:原来mini2440的串口与计算机相连要用直连线!而我由于懒得拔原来的串口线,就用了原来交叉线了。
    把线一换,再run,终于,超级终端有了反应,看到久违的“欢迎使用都江堰操作系统”了。
    接下来的闪灯,nandflash、键盘驱动都比较顺利,按数据手册修改了代码就行,没费太多周折。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2009-6-2 16:29:23 | 显示全部楼层
就为国产,LZ自创,顶一个

出0入0汤圆

发表于 2010-2-9 19:23:11 | 显示全部楼层
看到斑竹调试过程,都是经典操作,学习了,谢谢。

想起当年调液晶显示,真是狠不得连代码都吃进肚子里去

出0入0汤圆

发表于 2010-2-10 20:32:47 | 显示全部楼层
2440的液晶可以点亮吗

出0入0汤圆

 楼主| 发表于 2010-2-10 21:01:05 | 显示全部楼层
没有gui模块,不能点亮

出0入0汤圆

发表于 2010-2-10 21:25:44 | 显示全部楼层
可以建立一个任务把液晶驱动拉进来就可以点亮了,对不

出0入0汤圆

 楼主| 发表于 2010-2-10 21:34:38 | 显示全部楼层
是这样,只是我没搞,打算连gui一起搞。
你可以DIY一下,然后帖出来让大伙分享。

出0入0汤圆

发表于 2010-2-10 23:48:07 | 显示全部楼层
对GUI的建议,现在GUI的趋势越来越花俏,很多公司现在流行用QT来设计界面,你可以研究一下QT的原理,看看有啥借鉴

出0入46汤圆

发表于 2010-2-11 09:14:08 | 显示全部楼层
帮顶一下!

出0入0汤圆

发表于 2010-2-11 10:09:59 | 显示全部楼层
希望楼主多分享这类笔记,比直接放代码价值高了好几倍

谢谢!

出0入0汤圆

 楼主| 发表于 2010-2-11 10:24:02 | 显示全部楼层
这样的笔记有10多篇,都整理成文档,放在本版下载帖中了。

出0入0汤圆

发表于 2010-12-24 19:48:49 | 显示全部楼层
不错,改天也移植一下

出0入0汤圆

发表于 2011-2-16 16:59:10 | 显示全部楼层
好 支持
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 21:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表