共2条
1/1 1 跳转至页
arm9,2410 诚恳请教arm9高手:关于2410启动的一个奇怪问题
问
买的是远峰的2140,发现一个怪问题:
按键、触摸屏都使用外部中断。
1)当我设置robase:0x30000000,rwbase不设置时,使用ARM ICE调试是没有问题的,按键触摸屏反应正常。
2)当我设置robase:0x30008000,rwbase不设置,然后按照远峰的bootloader,通过网口把bin文件烧写到flash以后,却发现问题如下:
一按按键,程序就跑飞,类似死机。而摸触摸屏,也没有响应中断。
奇怪,是不是哪里设置不对呢?
问远峰的人,他们也不是很清楚。
现在我想不用远峰的bootloader,什么bootloader都不用,直接把测试程序bin文件烧写到flash里面去。
请问,这时robase和rwbase怎么设置,robase是设置为0x00000000还是0x30000000,rwbase又怎么设置
谢谢 答 1: 设置一下中断的入口地址就行RT 答 2: 谢谢
谢谢chete
不过可否详细解释一下
我在测试程序里有设置键盘、触摸屏对应中断向量。
而且仿真调试运行是正常的
请问还需要在哪加中断入口地址
3x 答 3: 虫虫也是高手了啊. 答 4: to wangkjto wangkj :
过奖了。ARM7感觉入了门,ARM9还真不了解。
感觉2410和44bx差别不是太大,主要是启动那块还不太理解。
等有时间好好看看bootloader代码。 答 5: re 珊瑚虫:2)当我设置robase:0x30008000,rwbase不设置,然后按照远峰的bootloader,通过网口把bin文件烧写到flash以后,却发现问题如下:
一按按键,程序就跑飞,类似死机。而摸触摸屏,也没有响应中断。
答:你的bin文件就是bootloader吗?当你产生中断后就出现死机现象,应该就是你在0x0开始的中断向量表坏了,所以程序会飞!
在2410的应用中通常都会有一个小于4KByte的bootloader,RO base为0x0放在Nand flash的第0块,原峰的板子应该也是这样的,因为2410支持Nand flash的启动。复位后将该4KByte的内容映射到0x0的内部SRAM,在该bootloader里将你的应用程序从Nand flash的其它块里读出再复制到你的SDRAM中,如果你的应用程序的RO Base为0x30008000,那就复制到0x30008000开始的地址处,然后再跳转到该地址片运行就可以了。当你产生中断后还会用到0x0地址的内部SRAM中的中断向量表,所以在你的应用程序中不能破坏该地址片的中断向量表(特别是指针操作),否则产生中断后程序就找不到中断服务程序而跑飞了。
如果你不想用bootloader就必须用NOR Flash启动,这时和ARM7一样使用。 答 6: 非常感谢阿南
非常感谢阿南兄的耐心指点。
现在比较明白了。
不过还有几个疑点:
1、板子上没有NorFlash,所以应该不支持从NorFalsh起动,我看启动模式从硬件上就决定必须用NandFlash。这样RoBase是不是不能设置为0x00000000,而必须设置为sdram空间
2、robase可不可以设置为0x30000000,我以前看书,好像8000是用于linux页式管理的,我这个程序没有跑os,是不是不用留8000空间
3、在nandflash启动模式下,2410inti.s文件中,0x0地址是不是实际上是在内部4KB的sram里面?上电后2410内部会自动把nandflash前4kb复制到内部sram?
我会仔细检查一下程序。
谢先 答 7: 还有一个不解的地方为什么设置robase:0x30000000,rwbase不设置时,使用ARM ICE调试是没有问题的,按键触摸屏反应正常。
调试时,全速运行为什么就正常呢?两者有什么区别?
答 8: re:不用谢,应该的1。要牢牢记住一点:RO Base设置成哪个地址,编译后的程序必须放在哪个地址才能正常运行,具体原因可以分析编译后的代码,如Image$$RO$$Base,Image$$RW$$Base的定位等。所以你的BootLoader要把RO Base设置成0x0,应用程序如果要放在0x30000000开始运行就把RO Base设置成0x30000000。还有,如果原峰的板子是兼容公板的,就会有nor flash,会用跳线或其它方式进行选择,可以参考datasheet的memory controller一节。
2。可以的,如果你不用OS,你就不用管那么多了,多多分析bootloader(如公板的2410bs和u241mon)代码,就会清楚2410的流程。其实也很简单,基本上就是上面所说的
3。也可以这样理解
4。不正常应该是和0x0地址的中断向量表有关。你有ICE为什么不跟踪进行看一下,为什么不正常,程序是在哪里飞掉的,你可心在0x18设一个断点,然后触发中断就可以一步步的执行。对两种情况进行比较,也可以自己分析它的Bootloader
答 9: 我看看bootloader先
谢谢阿南兄
我看看bootloader先
然后再单步跟踪看看
找到问题我再跟大家谈谈,呵呵 答 10: 我也碰到了这样的问题,但是还是不知道咋回事!我现在也碰到这个问题,我用的也是远峰公司的。我的程序没有os,我就是做个简单的实验,但是下到板子上过后 ,跑的不对 ,该亮的灯没亮,就不知道那两个地址要怎么设定。
买的是远峰的2140,发现一个怪问题:
按键、触摸屏都使用外部中断。
1)当我设置robase:0x30000000,rwbase不设置时,使用ARM ICE调试是没有问题的,按键触摸屏反应正常。
2)当我设置robase:0x30008000,rwbase不设置,然后按照远峰的bootloader,通过网口把bin文件烧写到flash以后,却发现问题如下:
一按按键,程序就跑飞,类似死机。而摸触摸屏,也没有响应中断。
奇怪,是不是哪里设置不对呢?
问远峰的人,他们也不是很清楚。
现在我想不用远峰的bootloader,什么bootloader都不用,直接把测试程序bin文件烧写到flash里面去。
请问,这时robase和rwbase怎么设置,robase是设置为0x00000000还是0x30000000,rwbase又怎么设置
谢谢 答 1: 设置一下中断的入口地址就行RT 答 2: 谢谢
谢谢chete
不过可否详细解释一下
我在测试程序里有设置键盘、触摸屏对应中断向量。
而且仿真调试运行是正常的
请问还需要在哪加中断入口地址
3x 答 3: 虫虫也是高手了啊. 答 4: to wangkjto wangkj :
过奖了。ARM7感觉入了门,ARM9还真不了解。
感觉2410和44bx差别不是太大,主要是启动那块还不太理解。
等有时间好好看看bootloader代码。 答 5: re 珊瑚虫:2)当我设置robase:0x30008000,rwbase不设置,然后按照远峰的bootloader,通过网口把bin文件烧写到flash以后,却发现问题如下:
一按按键,程序就跑飞,类似死机。而摸触摸屏,也没有响应中断。
答:你的bin文件就是bootloader吗?当你产生中断后就出现死机现象,应该就是你在0x0开始的中断向量表坏了,所以程序会飞!
在2410的应用中通常都会有一个小于4KByte的bootloader,RO base为0x0放在Nand flash的第0块,原峰的板子应该也是这样的,因为2410支持Nand flash的启动。复位后将该4KByte的内容映射到0x0的内部SRAM,在该bootloader里将你的应用程序从Nand flash的其它块里读出再复制到你的SDRAM中,如果你的应用程序的RO Base为0x30008000,那就复制到0x30008000开始的地址处,然后再跳转到该地址片运行就可以了。当你产生中断后还会用到0x0地址的内部SRAM中的中断向量表,所以在你的应用程序中不能破坏该地址片的中断向量表(特别是指针操作),否则产生中断后程序就找不到中断服务程序而跑飞了。
如果你不想用bootloader就必须用NOR Flash启动,这时和ARM7一样使用。 答 6: 非常感谢阿南
非常感谢阿南兄的耐心指点。
现在比较明白了。
不过还有几个疑点:
1、板子上没有NorFlash,所以应该不支持从NorFalsh起动,我看启动模式从硬件上就决定必须用NandFlash。这样RoBase是不是不能设置为0x00000000,而必须设置为sdram空间
2、robase可不可以设置为0x30000000,我以前看书,好像8000是用于linux页式管理的,我这个程序没有跑os,是不是不用留8000空间
3、在nandflash启动模式下,2410inti.s文件中,0x0地址是不是实际上是在内部4KB的sram里面?上电后2410内部会自动把nandflash前4kb复制到内部sram?
我会仔细检查一下程序。
谢先 答 7: 还有一个不解的地方为什么设置robase:0x30000000,rwbase不设置时,使用ARM ICE调试是没有问题的,按键触摸屏反应正常。
调试时,全速运行为什么就正常呢?两者有什么区别?
答 8: re:不用谢,应该的1。要牢牢记住一点:RO Base设置成哪个地址,编译后的程序必须放在哪个地址才能正常运行,具体原因可以分析编译后的代码,如Image$$RO$$Base,Image$$RW$$Base的定位等。所以你的BootLoader要把RO Base设置成0x0,应用程序如果要放在0x30000000开始运行就把RO Base设置成0x30000000。还有,如果原峰的板子是兼容公板的,就会有nor flash,会用跳线或其它方式进行选择,可以参考datasheet的memory controller一节。
2。可以的,如果你不用OS,你就不用管那么多了,多多分析bootloader(如公板的2410bs和u241mon)代码,就会清楚2410的流程。其实也很简单,基本上就是上面所说的
3。也可以这样理解
4。不正常应该是和0x0地址的中断向量表有关。你有ICE为什么不跟踪进行看一下,为什么不正常,程序是在哪里飞掉的,你可心在0x18设一个断点,然后触发中断就可以一步步的执行。对两种情况进行比较,也可以自己分析它的Bootloader
答 9: 我看看bootloader先
谢谢阿南兄
我看看bootloader先
然后再单步跟踪看看
找到问题我再跟大家谈谈,呵呵 答 10: 我也碰到了这样的问题,但是还是不知道咋回事!我现在也碰到这个问题,我用的也是远峰公司的。我的程序没有os,我就是做个简单的实验,但是下到板子上过后 ,跑的不对 ,该亮的灯没亮,就不知道那两个地址要怎么设定。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |