Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4566222
  • 博文数量: 385
  • 博客积分: 21208
  • 博客等级: 上将
  • 技术积分: 4393
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-30 13:40
文章分类

全部博文(385)

文章存档

2015年(1)

2014年(3)

2012年(16)

2011年(42)

2010年(1)

2009年(2)

2008年(34)

2007年(188)

2006年(110)

分类: LINUX

2006-12-10 15:57:03

致和我一样的初学者--我在入门途中遇到的问题及解决办法   

--------------------------------------------------------------------------------
 
买44B0的开发板已一年多了,但平时也没多少时间,况且中间有近一年没动它。今年才拿出来,因为我之前只会51单片机,这是好事也是坏事,好在有微控基础,坏在在51开发工具上思路的根深蒂固,在ADS等等软件以及存储器结构上走了些弯路,昨晚刚把中断调试成功,作个总结,有和我相同“遭遇”的朋友可以借鉴一下!
第一次是我写了一个最简单的C按键点灯程序,用软件仿真(ARMUL)正常,但烧到板上不能运行,灯闪一下就灭了。这个问题是我当时对存储器及启动代码的执行了解不够,将ADS里的RO和RW都设为0的缘故,应为0和0X0C00_0000(如果SDRAM是接在BANK6的话)。
第二次问题就在几天前做中断试验的时候,用ARMUL仿真正常(但不能仿真中断,这个问题我发了若干帖子都没人回,个人认为ADS开发环境真的还有不少欠缺,有些难懂),但若接上目标板用JTAG代理仿真就不会跳到MAIN处执行,而是跳到初始化端口中的一行,感觉在乱跳。这个问题试了好多天,因为用的是简易JTAG,稳定性上我也不敢百分百的相信,虽然也曾用过Banyan,但我感觉也不稳定,且不能超过2个断点。后来把中断初始化的pISR_EINT4567 = (int)Eint4567Isr;这行给去掉后就正常了。仔细想,这段只是个“地址链接”(不知道专业属语叫什么了)的作用,把中断服务函数的地址放到_ISR_STARTADDRESS+0x74这个地址来(后面说),而我的板是我自己买元件自己焊接的,当时就像配电脑一样,有些贪,板上本来是8MB的SDRAM,而我用的是16MB的SDRAM,这样当然影响_ISR_STARTADDRESS,但我在Option.s及Option.h里都改了呀!又找了两天(在深圳,业余时间少得可怜),实在找不着原因,于是不甘心就看44B0的存储器配置的资料,一个寄存器一个位的看,最后在BANKCON6的SCAN位找到了,00是8位SDRAN列地址,01是9位SDRAN列地址,而我2M*4B*16位的列地址应该是9位才对。改正以后,跳转到MAIN正常了。但用简易JTAG在目标板仿真在我按按键的时候还是不能跳到中断服务函数,软件(ARMUL)又不能模拟中断产生(这是我认为ADS做得不好的原因,也可能是用惯了KEIL吧)经查程序没问题,烧到板上运行一切正常!哎,不然又走弯路了!
第二个问题太啰嗦了,主要是怕和我一样的初学者看不懂,一个名詞就可能绕一个弯。我再说一下我对中断怎样链接到C程序的理解,虽然网上的解释很多,但我也觉得难理解(可能是我自己太笨吧,呵呵),它其实就是在Init.s和C程序跳到同一个地址实现的,如EINT4567就是_ISR_STARTADDRESS+0x74,在两个文件都有相关定义,因为硬件地址是固定不变的。
特此申明:本贴只适合没入门的朋友,已入门的看了我会脸红的!
 
 
 
 
阅读(2371) | 评论(0) | 转发(0) |
0

上一篇:KMP算法

下一篇:MC2410E 使用手记

给主人留下些什么吧!~~