首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM开发调试笔记心得(转)(8)

ARM开发调试笔记心得(转)(8)

五.出现的问题与解决方法
1> 每次重新装载程序进行调试时,Remap_Flag没有等于0。
原因是进入C代码前,没有初始化存储器的内容。用户可以将起动代码中的“b main”改成“b __main”,即在跳入到main()函数前执行__main初始化库函数,也可自己加入初始化存储器的代码。程序如下:
InitReset
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
;********************************************************
;* Copy and paste RW data/zero initialized data *
;********************************************************
LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; and RAM copy
LDR r3, =|Image$$ZI$$Base|
;Zero init base => top of initialised data
CMP r0, r1 ; Check that they are different
BEQ %F1
0
CMP r1, r3 ; Copy init data
LDRCC r2, [r0], #4 ;--> LDRCC r2, [r0] + ADD r0, r0, #4
STRCC r2, [r1], #4 ;--> STRCC r2, [r1] + ADD r1, r1, #4
BCC %B0
1
LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segment
MOV r2, #0
2
CMP r3, r1 ; Zero init
STRCC r2, [r3], #4
BCC %B2
如果想详细了解该部分的原理,可以参考三星公司为44B0写的起动代码部分资料。
2> 这个实验浪费了很多的时间,原因就是因为我一直用的atm6124.sys和atm6124.inf驱动程序以及BasicUSB_6124.exe来做此实验,当执行BasicUSB_6124.exe后,总是出现“设备不能连接”。为此我专门去书店买了《USB2.0应用与设计》参考,再研究和调试源代码,再加上仔细的阅读“BasicUSB Application.pdf”文件,后来改用atm6124ser.inf驱动程序与超级终端来完成了本次实验。
六.总结
如果一开始就很成功的完成了本次实验,我可能对USB的原理等不会了解到多少,正是因为出现了问题,我才会为了解决问题而去找相关的资料学习,最终到问题的解决。因此出现问题并不是一件什么坏事,相反,问题的出现会引导我们静下心来向更深层次去探究,最终更深刻更全面地掌握知识。

ISP实验
一.背景
        由于前面的实验都是用仿真器将代码下载到AT91SAM7S64的SRAM里调试的,还不能在实际的Flash ROM里跑。所以在这个实验中,我们将通过ATMEL提供的SAM-BA 软件和AT91SAM7S64自带的ROMBoot功能,完成AT91SAM7S64的Flash ROOM的在线烧写。
二.实验目的
        用前面“I/O口输入实验”的源程序生成二进制文件,下载到AT91SAM7S64的Flash ROM中,且能脱机正确运行。
三.操作方法
    1> 安装。双击Install SAM-BA.exe文件运行,按提示一步步安装即可。
    2> 连接好硬件,且使AT91SAM7S64处于RomBoot状态。
    3> 运行。双击SAM-BA图标出现如下图所示的启动窗口:
[attachment=1734]
图4.21 SAM启动窗口
        当正确设置后,按“DBGU connection”按钮将打开SAM-BA编程环境,如下图所示:
[attachment=1735]
图4.22 SAM-BA1.0编程环境
    4> 用ADS1.2生成二进制文件。
    5> 编程。点击“Flash->Download/Upload File->Send File Name”项的“Browse”按钮打开二进制文件后,点击“Send File”按钮开始下载程序。
    6> 复位目标板,开始运行用户程序。
四.出现的问题与解决方法
    1> ADS软件编译后不能产生二进制等目标文件
    第一、 可以用DOS命令手工生成二进制文件。
    第二、 在“DebugRel Settings”中,将“Target->Target Settingsr->Post-linker”项的“None”修改成“ARM fromELF”,再在“DebugRel Settings”中的“Linker->ARM fromELF->Output format”中设置成Plain binary。
2> 不能进入SAM-BA软件,总出现下述提示错误信息,但硬件连接都正确。  
[attachment=1736]
图4.23  错误信息
        原因是将用户程序下载到AT91SAM7Sxx芯片后,同时会擦除掉内部的BootRom程序,此时就不能再实现在线下载的功能!因此起动SAM-BA软件会弹出上述的出错信息,必须重新恢复内部的BootRom引导程序。可将AT91SAM7S64的TST管脚接高电平10S多时间,再重新复位。此时每次复位后都将在DBGU口发送“RoomBoot”的ASCII字符,可用超级终端查看。
        3> 不能进行RomBoot恢复,且不能与仿真器进行连接。
        原因是器件的安全保密位被编程,可以将AT91SAM7S64的ERASE脚接高,将flash内容初始化(或者说是擦除),再进行RomBoot恢复。
五.总结
        到目前为此,基本上完成了AT91SAM7S64的大部分外围实验,并且也能够将程序烧到AT91SAM7S64的内部Flash ROM里,而脱离仿真器进行运行。我个人认为其它没有完成的实验在原理与使用上基本相同,应该没有什么难点。
继承事业,薪火相传
返回列表