Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15502874
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2007-07-13 10:49:58

arm9处理器at91rm9200调试心得

文章来源:http://gliethttp.cublog.cn

硬件环境:1>自制at91rm9200开发板
        2>Multi ICE仿真器
软件环境:1>集成开发环境ADS1.2
        2>仿真工具AXD

  首先将BMS下拉,让CPU执行flash中的程序;如果BMS上拉执行跳'C'xmodem内部程序,那么程序中在ice仿真时PLL设置第一次将无效,重装axd之后才能正常
不过如果flash中的程序不能让cpu正常工作,那么BMS下拉情况下的仿真axd始终提示[gliethttp]:
1."Target processor would not enter debug state when requested.Do you want to try asserting System Reset with a breakpoint on address 0?This will affect the other processor in a multi-processer system."
2."Fatal AXD Error::RDI Severe Error 00259:Unable to stop target processeor.Check the server configureation matches the target system,the target is powered up,not inreset and can operate at the TCK setting used."
在flash中有错误的程序或者flash空无程序的时候,AXD调试最好使用[BMS上拉执行跳'C'xmodem内部程序]方式,但是该方式下at91rm9200的PLL时钟始终为48054857Hz,如果startup启动程序试图改变PLL,那么at91rm9200内部整个PLL系统都会出现混乱,DBGU因为PLL时钟不准而不能正常输出数据,所以使用[BMS上拉执行跳'C'xmodem内部程序]方式时,不需要axd调试程序初始化PLL,PLL默认就已经被跳C内部代码初始化为48054857Hz了,这种内部跳C初始化的PLL并不会因为jtag复位或硬复位之类的复位而改变,就像9527是你的终身代号一样,48054857Hz就是跳C情况下调试程序PLL的终身代号.

正常的axd调试现象:
将能够正常运行的程序烧写到flash中[不要让cpu出现异常的程序],之后BMS下拉,这样正确的硬件仿真环境已经搭建完毕.
1.不论startup配置为什么PLL,即使和烧写到flash中的程序一样,当运行到while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) && (tmp++ < DELAY_MAIN_FREQ) );
  这句时axd就会停止,当axd停止后,将axd关闭,重新再启动一次axd,或者"Reload current Image"
  [在没有Command Line for non-ARM debugger jtag控cpu文件时{gliethttp}]那句就可以顺利通过,调试就ok了,这个现象对于at91rm9200来说是正常现象.
2.只有上面的这个现象才是正常的调试现象,否则可能是硬件存在问题.
3.如果运行axd全速运行之后,不能停下来,那么可能因为PC6脚作为IO口使用了,不知什么原因只要PC6和一个固定电平连接之后,程序读取flash时
  就会永远退不出来,从文档上来看PC6的ASR外设为NWAIT总线等待信号,linux下s1d13xxxfb.c驱动中使用该nwait信号与外部控制芯片的总线进行
  信号同步,但是有明确的ASR外设功能指配语句,nnd老子没有把PC6指定为ASR外设,也没有在其他地方找到对PC6赋值成ASR外设的语句,并且再n多
  地方将PC6显式的指定为input-io类型,它就仍然死活不能操作flash,也不是完全不能操作flash,对于4字节数据的flash读取还是可以通过的
  就是1字节flash数据读取操作,只要ldrb r2,[r0],#1读取外部flash语句一执行,cpu就永远回不来了,down掉了.用PC15代替PC6,把PC6悬空,flash操作ok.

小结:[gliethttp2007-07-12不过可能是因为我的板子jtag复位脚和cpu的nrst连接到了一起导致的上边的现象]一般在调试期间jtag的复位引脚应该和cpu的硬复位引脚
     独立分开,当调试阶段结束出厂生产时,再将jtag复位脚和cpu的复位脚连接在一起.

阅读(3161) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

gliethttp2009-08-20 11:49:44

AT91F_LowLevelInit==>AT91F_InitClocks如果已经初始化1次系统时钟,那么在axd调试时再次初始化系统时钟将导致系统时钟紊乱,整个at91rm9200处理器运行极其缓慢,所以如果想用axd仿真9200,如果flash中已经有代码,那么只能先将flash中的代码擦除,不让任何代码初始化系统时钟,如果已经运行了1次axd,那么需要关闭axd,重新给开发板上电,才能进行下一次axd仿真,是个比较繁琐的咚咚.

gliethttp2009-08-19 09:09:29

当105腿JTAGSEL为低时选择内置ICE模式,为高时选择JTAG模式,从h-jtag检测到正常工作at91rm9200开发板来看,AT91RM9200 ID代码寄存器内容为0x05b0203f,结合pdf手册上的 AT91RM9200 ID 代码值为0x15b0203f (JTAGSEL 为高) // 实测未能通过,h-jtag检测不到cpu AT91RM9200 ID 代码值为0x05b0203f (JTAGSEL 为低) // 实测通过,h-jtag可以正常检测到cpu 可以看出即便105腿JTAGSEL置低,选择了内置ICE模式,h-jtag软件一样能够正常检测和进行软件仿真.