学习ARM开发(11)x
学习 ARM 开发(11) 习 学习 ARM 开发 开发(11)
昨天又是星期天,在家里又可以对那块开发板进行软件研究了。
由于前几次,把编译好的 UBOOT 写到 FLASH 老是运行不了。那么怎么办呢?思考了很久,也查看
了源程序,还是没有发现问题。也许那个 UBOOT 的源程序太大,有很多的编译开关,还有很多驱
动程序选择,所以一头雾水,不知怎么办好。到了这个时候,只有从头开始跟踪了。就是尽可
能地跟踪程序运行到那里。
因而依次地进行下面的检查:
1设置的倍频是否对。
2程序写到 FLASH 的数据是否对。
3置 RAM 是否对。
4. 检查设置串口的波特率是否对。
一般进行四部份检查就找出大体的问题。我首先查了一下,我的开发板上的晶振是10MHz 输入,
那么我要倍频到 60MHz,所以就要计算它的倍频系数。当然最快的办法,就是用三星提供的
PLLSET.EXE 工具,五秒钟就搞定了。经过检查,发现我的倍频系数不对,所以重新设置倍频系
数。一般设置过倍频系后,都要调整串口波特率、SDRAM 的刷新频率。设置好倍频系数后,接着
,就要计算串口的波特率,这个三星的 S3C44B0 的手册有计算公式。比如 9600,就是拿 60MHz 进
行分频得到的。
这次设置好后这些东西之后,就把 UBOOT 编译后,再写到 FLASH 运行,还是不行。偶都在痛苦中
,为什么还不行呢。后来我想想,把 UBOOT 的编译地址改到 0x00000000 运行,
就是在 FLASH 运行
,不拷贝到 SDRAM 中运行。结果是可以运行一段,串口有东西输出来,我的设置的 LED 也可以显
示。蜂鸣器也不响。说明这个串口的设置已经对,那么系统的倍频也对了。但UBOOT 的堆栈我没
有改,所以只能跑到没有使用到堆栈的代码。
接着,我还需要改回到 0x0C100000 的基地址运行。经过用 ADS 中的 AXD 调试,单步跟踪。又是一
件痛苦的事情,发现 AXD 只能单步跟踪,设置断点,或者其它调试都不行,如果在后面设置了断
点,选择运行,发现到断点,还停不下来的。
呵呵。。。。。。。调试就是这样的,不是样样都顺手。既然只能单步运行,就老老实实地单
步调试了,经过 30 多分钟的单步运行,F8 都已经按得手软。最后才跟踪到出错的地址,发现内
存设置不对。主要是 SDRAM 的设置不对,查看了加载地址的出错了。发现了这个加载地址出错,
偶也没有更好的办法解决之前,就只好把算好的值,依次地用 ldr 加载到 r1-r13,共 13 个寄存器
里。接着让 AXD 全速运行,程序就可运行了。原来出错就是没有把 SDRAM 的参数加载正确,让我
调试了三天。
通过一个多小时的调试,串口可以显示了,UBOOT 的很多命令也可运行了。但还没有调通 USB 口
,也没有网络接口。后面的工作,就是先调通网络接口。我的开发板用的网络芯片是 RTL8019AS
,这个我也没有怎么看过,得好好找点资料,了解了解这个 IC,然后找一份LINUX 的 RTL8019 的
驱动程序出来看看,再决定怎么样调通 RTL8019,由于 RTL8019 要用到中断,就
要先检查 S3C44B0
设置,否则到最后都没有办法调试。
通过开发板的调试,与 SKYEYE 相比,主要的区别是在 SDRAM 的频率,串口的频率,还有中断的功
能,都有很大的不同。因此,在 SKYEYE 上能运行的,在开发板,就不一定可以运行,就是这个
原因。
[ Last edited by caimouse on 2005-8-16 at 09:52 ]
让我们的产品超越日本产品!
上一篇:《货币金融学》学习总结
下一篇:华南学派史学理论溯源