http://www.zlgmcu.com/philips/philips-arm.asp.。注意:各个工程模板中的Startup.s不完全相同,可根据需要分别修改。程序清单1.1Startup.s文件需要更改的代码.....Resetlnit初始化外部总线控制器,根据目标板决定配置LDR R0, =PINSEL2IF:DEF:EN_CRPLDR R1,=0x0f814910;0x0f814910改成需要的数值,注意最低4位必须为0ELSELDRR1,=0x0f814914;0x0f814914改成需要的数值,如果使用ETM,最后的4需要修改为6ENDIFSTRRI, [RO]LDRR0,=BCFG0LDRR1,=0x1000ffef0x1000ffef改成需要的数值STRR1,[RO]LDRR0, =BCFG1LDR R1, =0x1000ffef;0x1000ffef改成需要的数值STRR1, [R0]......(3)生成目标DebuglnExRam。假设用户系统在调试时片外RAM使用banko(即起始地址为0x80000000),这一条不可修改。如果用户系统不是这样,就不能使用DebuglnExRam这个生成目标调试程序。(4)生成目标DebuglnExRam。假设用户系统在调试时片外RAM大小为512K字节,此条仅影响DebuglnExRam这个生成目标。如果不是,则需要修改mem_b.scf这个文件,修改点见程序清单1.2。16
http://www.zlgmcu.com/philips/philips-arm.asp 。 注意:各个工程模板中的Startup.s 不完全相同,可根据需要分别修改。 程序清单1.1 Startup.s 文件需要更改的代码 . ResetInit ;初始化外部总线控制器,根据目标板决定配置 LDR R0, =PINSEL2 IF :DEF: EN_CRP LDR R1, =0x0f814910 ; 0x0f814910 改成需要的数值,注意最低4 位必须为0 ELSE LDR R1, =0x0f814914 ; 0x0f814914 改成需要的数值,如果使用ETM,最后的4 需要修改为6 ENDIF STR R1, [R0] LDR R0, =BCFG0 LDR R1, =0x1000ffef ; 0x1000ffef 改成需要的数值 STR R1, [R0] LDR R0, =BCFG1 LDR R1, =0x1000ffef ; 0x1000ffef 改成需要的数值 STR R1, [R0] . (3) 生成目标DebugInExRam 。假设用户系统在调试时片外RAM 使用bank0 (即起始地址 为0x8000 0000), 这一条不可修改。如果用户系统不是这样,就不能使用DebugInExRam 这 个生成目标调试程序。 (4) 生成目标DebugInExRam 。假设用户系统在调试时片外RAM 大小为512K 字节,此条 仅影响DebugInExRam 这个生成目标。如果不是,则需要修改mem_b.scf 这个文件,修改点见 程序清单1.2。 16
注意:Windows会隐藏这种文件的扩展名,仅显示为mem_b。程序清单1.2mem_b.scf文件需要修改的代码....ERAM0x80040000/*从这个地址开始存储程序的可读写的变量,根据实际情况修改*/t* (+RW,+ZI)..HEAP_BOTTOM0x800800000UNINIT/*这个地址是片外RAM的结束地址根据实际情况修改*1Startup.o (HeapTop))(5)生成目标RelOutChip。假设用户系统在使用外部启动时,片外FLASH起始地址必须为0x80000000(这是LPC2200芯片的要求),片外RAM使用Bank1(即起始地址为0x81000000)。如果没有片外FLASH,则不要使用RelOutChip这个生成目标。如果片外RAM起始地址不为0x81000000,则需要修改mem_a.scf文件,修改点见程序清单1.3。注意:Windows会隐藏这种文件的扩展名,仅显示为mem_a。程序清单1.3mem_a.scf文件需要修改的代码一片外RAM....ERAM0x81000000/*从这个地址开始存储程序的可读写的变量,改成实际的片外RAM起始地址*t* (+RW,+ZI)1......UNINITHEAPBOTTOM0x81080000/*这个地址是片外RAM的结束地址,根据实际情况修改*/1Startup.o (HeapTop))(6)生成目标DebuglnChipFlash和RellnChip。假设用户系统片外RAM使用Banko(即起始地址为0x80000000)。如果片外RAM起始地址不为0x80000000,则需要修改memc.scf文件,修改点见程序清单1.4。17
注意:Windows 会隐藏这种文件的扩展名,仅显示为mem_b。 程序清单1.2 mem_b.scf 文件需要修改的代码 . ERAM 0x80040000 /*从这个地址开始存储程序的可读写的变量,根据实际情况修 改*/ { * (+RW,+ZI) } . HEAP_BOTTOM 0x80080000 UNINIT /*这个地址是片外RAM 的结束地址, 根据实际情况修改*/ { Startup.o (HeapTop) } (5) 生成目标RelOutChip 。假设用户系统在使用外部启动时,片外FLASH 起始地址必须 为0x8000 0000( 这是LPC2200 芯片的要求),片外RAM 使用Bank1(即起始地址为0x8100 0000)。如果没有片外FLASH, 则不要使用RelOutChip 这个生成目标。如果片外RAM 起始 地址不为0x8100 0000,则需要修改mem_a.scf 文件,修改点见程序清单1.3。 注意:Windows 会隐藏这种文件的扩展名,仅显示为mem_a。 程序清单1.3 mem_a.scf 文件需要修改的代码—片外RAM . ERAM 0x81000000 /*从这个地址开始存储程序的可读写的变量,改成实际的 片外RAM 起始地址*/ { * (+RW,+ZI) } . HEAP_BOTTOM 0x81080000 UNINIT /*这个地址是片外RAM 的结束地址,根据实际情况修改*/ { Startup.o (HeapTop) } (6) 生成目标DebugInChipFlash 和RelInChip 。假设用户系统片外RAM 使用Bank0(即 起始地址为0x8000 0000)。如果片外RAM 起始地址不为0x8000 0000,则需要修改mem_c.scf 文 件,修改点见程序清单1.4。 17
程序清单1.4mem_c.scf文件需要修改的代码一片外RAM......ERAM0x80000000/*从这个地址开始存储程序的可读写的变量,改成实际的片外RAM起始地址*/1* (+RW,+ZI)1.....UNINITHEAPBOTTOM0x80080000/*这个地址是片外RAM的结束地址,根据实际情况修改*/Startup.o(HeapTop))注意:用户还可以修改mem_a.scf、mem_b.scf、mem_c.scf这几个文件对内存的使用进行更多的控制。(7)为了适应不同速度的存储器,工程模板默认配置4个Bank存储器接口为最慢的访问速度。用户可以根据实际使用的存储器重新配置访问速度,以获得最好的系统性能,参考程序清单1.5。程序清单1.5在target.c文件中配置存储器接口访问速度void TargetResetlnit(void) (#ifdefDEBUGMEMMAP=0x3;/remap/*重新配置Banko的访问速度*/BCFG0=0x10000400;#endif#ifdefOUTCHIPMEMMAP=0x3;//remap/*重新配置Banko的访问速度*/BCFG0=0x10000400;#endif#ifdefIN_CHIPMEMMAP=0x1;/remap/*重新配置Banko的访问速度*/BCFG0=0x10000400;18
程序清单1.4 mem_c.scf 文件需要修改的代码—片外RAM . ERAM 0x80000000 /*从这个地址开始存储程序的可读写的变量,改成实际的片外RAM 起始地址*/ { * (+RW,+ZI) } . HEAP_BOTTOM 0x80080000 UNINIT /*这个地址是片外RAM 的结束地址,根据实际情况修改*/ { Startup.o (HeapTop) } 注意:用户还可以修改m em_a.scf、mem_b.scf、mem_c.scf这几个文件对内存的使用进行 更多的控制。 (7) 为了适应不同速度的存储器,工程模板默认配置4 个Bank 存储器接口为最慢的访问速 度。用户可以根据实际使用的存储器重新配置访问速度,以获得最好的系统性能,参考程序清 单1.5。 程序清单1.5 在target.c 文件中配置存储器接口访问速度 void TargetResetInit(void) { #ifdef _DEBUG MEMMAP = 0x3; //remap /* 重新配置Bank0 的访问速度 */ BCFG0 = 0x10000400; #endif #ifdef _OUT_CHIP MEMMAP = 0x3; //remap /* 重新配置Bank0 的访问速度 */ BCFG0 = 0x10000400; #endif #ifdef _IN_CHIP MEMMAP = 0x1; //remap /* 重新配置Bank0 的访问速度 */ BCFG0 = 0x10000400; 18
#endif1注意:用户还可以修改target.c的TargetResetInitO函数在进入main函数前初始化更多的东西(使用汇编程序工程模板的工程除外)。1.5EasyJTAG仿真器的安装与应用EasyJTAG仿真器是广州周立功单片机发展有限公司开发的LPC2000系列ARM7微控制器的JTAG仿真器,支持ADS1.2集成开发环境,支持单步、全速及断点等调试功能,支持下载程序到片内FLASH和特定型号的片外FLASH,采用ARM公司提出的标准20脚JTAG仿真调试接口。其主要特点如下:采用RDI通讯接口,无缝嵌接ADS1.2和其它采用RDI接口的IDE调试环境。高达1M速率的JTAG时钟驱动。采用同步Flash刷新技术(synFLASH),同步下载用户代码到Flash中,即下即调。采用同步时序控制技术(synTIME),仿真可靠稳定。支持32位ARM指令/16位THUMB指令的混合调试。增加映射寄存器窗口,方便用户查看/修改寄存器数值。微型体积设计,方便用户灵活使用。EasyJTAG仿真器外观如图1.20所示,其驱动程序可在http://www.zlgmcu.com/tools/kaifaban/EasyARM2200.asp网页下载获得,或在产品光盘上获得(其目录名为EasyJTAGdrive,该目录下有一个readme.txt的文件说明)。aSYJTAC图1.20EasyJTAG仿真器实物外观1.5.1安装EasyJTAG仿真器首先,将EasyJTAG仿真器的驱动程序(比如产品光盘EasyJTAG_drive目录下的所有文件)复制到ADS的BIN目录,如C:IProgramFilesIARMADSv12\BIN。接着,将EasyJTAG仿真器的25针接口通过并口延长线与PC机的并口连接,将EasyJTAG仿真器的20针接口通过20PIN连接电缆接到SmartARM2200开发板的J2上,再使用配套的变压器(9V)给开发板供电。然后,进入AXD调试环境,打开【Options】->【ConfigureTarget..】,弹出ChooseTarget窗口,如图1.12所示。点击“ADD"添加仿真器的驱动程序,在添加文件窗口选择如C:IProgramFilesARMADSv12\BIN目录下的EasyJTAG.dll,点击"打开”即可。说明:点击Windows系统的【开始】-》【程序】-》【ARMDeveloperSuitev1.2】-》【AXDDebugger】可以直接运行AXD软件。注意:若在添加文件窗口中没有显示DLL文件,请设置WINDOWS文件浏览窗口的“文件夹19
#endif . } 注意:用户还可以修改target.c 的TargetRe setInit()函数在进入main 函数前初始化更 多的东西(使用汇编程序工程模板的工程除外)。 1.5 EasyJTAG 仿真器的安装与应用 EasyJTAG 仿真器是广州周立功单片机发展有限公司开发的LPC2000 系列ARM7 微控制 器的JTAG 仿真器,支持ADS1.2 集成开发环境,支持单步、全速及断点等调试功能,支持下 载程序到片内FLASH 和特定型号的片外FLASH,采用ARM 公司提出的标准20 脚JTAG 仿真 调试接口。其主要特点如下: 采用RDI 通讯接口,无缝嵌接ADS1.2 和其它采用RDI 接口的IDE 调试环境。 高达1M 速率的JTAG 时钟驱动。 采用同步Flash 刷新技术(synFLASH), 同步下载用户代码 到Flash 中,即下即调。 采用同步时序控制技术(synTIME),仿真可靠稳定。 支持32 位ARM 指令/16 位THUMB 指令的混合调试。 增加映射寄存器窗口,方便用户查看/修 改寄存器数值。 微型体积设计,方便用户灵活使用。EasyJTAG 仿真器外观如图1.20 所 示,其驱动程序可在http://www.zlgmcu.com/tools/kaifa ban/EasyARM2200.asp 网页下载获得,或在产品光盘上获得(其目录名为EasyJTAG_drive, 该 目录下有一个readme.txt 的文件说明)。 图1.20 EasyJTAG 仿真器实物外观 1.5.1 安装EasyJTAG 仿真器 首先,将EasyJTAG 仿真器的驱动程序(比如产品光盘 EasyJTAG_drive 目录下的所有文 件)复制到ADS 的BIN 目录,如C:\Program Files\ARM\ADSv1_2\BIN 。 接着,将EasyJTAG 仿真器的25 针接口通过并口延长线与PC 机的并口连接,将EasyJTAG 仿真器的20 针接口通过20 PIN 连接电缆接到SmartARM2200 开发板的J2 上,再使用配套的 变压器(9V)给开发板供电。 然后,进入AXD 调试环境,打开【Options 】->【Configure Target. 】,弹出Choose Target 窗口,如图1.12 所示。点击“ADD”添加仿真器的驱动程序,在添加文件窗口选择如C:\Program Files\ARM\ADSv1_2\BIN 目录下的EasyJTAG.dll ,点击“打开”即可。 说明:点击Windows 系统的【开始】->【程序】->【ARM Developer Sui te v1.2】-> 【AXD Debugger】可以直接运行AXD 软件。 注意: 若在添加文件窗口中没有显示DLL 文件,请设置WINDOWS 文件浏览窗口的“文件夹 19
选项(0).,”,将查看页中的“隐藏文件"项选用“显示所有文件”。1.5.2使用EasyJTAG仿真器将计算机并口与EasyJTAG仿真器连接,并将仿真器JTAG口接头插入SmartARM2200开发板的J2,通过AXD软件的设置即可进行仿真调试。1.仿真器设置在AXD调试环境,打开【Options】->【ConfigureTarget...】,弹出ChooseTarget窗,在“TargetEnvironments"框中选择"EasyJTAG."项。点击"Configure”按钮,进入“EasyJTAGSetup”设置窗口,见图1.21。在"ARMcore”项中选取CPU类型,在"Options"项中选择Haltprogram。然后点击OK”,再点击"OK",此时EasyJTAG将会进行连接(开发板)的操作。若连接成功,则开发板上的LPC2210芯片由EasyJTAG控制,原先运行的程序被停止。注意:有时,AXD会弹出如图1.23所示的错误对话框,或者类似的对话框,此时可以点击“Connectmode...”,然后选择ATTACH..”项确定,再点击"Restart”。若EasyJTAG正确连接开发板,AXD代码窗口将显示空白,接下来就可以使用【File】->【LoadImage..】加载调试文件,进行JTAG调试。区ZasyTtag SetupFlashType(onlyforEasyARM)Hocacrflash1flash0日SSTRMcoreLPC2210otSSTNo.ap-1SST39VF160SST39VF160VendorARMboatt1FLash0AddrssBytesexConnection0:00000000StartAddressCOLPTTCLitle Endian0x00000000MemorySizeCLPT2CBgEndnFLash1AddrssHalt ModeAuxOptionCn0X0000000StartAddressFStepInInteruptCHaltprogramDX0000000Memoxy SizeEraseFlashwhenneedCHaltand resetV1.05forDemoveTKSimulator fot ARMOKCancel图1.21“EasyJTAGSetup"设置窗口EasyJTAG设置选项说明:ARMcore项,选择CPU型号:TapNo.项,当CPU为LPC2106/2105/2104时,选择主/从JTAG调试口,Tap1为主,Tap2为从;Connection,硬件连接接口选择:HaltMode,停机模式选择,包含Haltprogram(停止CPU)和Haltandreset复位然后停止CPU)两项:Aux.Option,辅助选项,包含StepInInterrupt(允许单步运行进入中断)和EraseFlashwhenneed(允许EasyJTAG擦除Flash)两项;20
选项(O).”,将查看页中的“隐藏文件”项选用“显示所有文件”。 1.5.2 使用EasyJTAG 仿真器 将计算机并口与EasyJTAG 仿真器连接,并将仿真器JTAG 口接头插入SmartARM2200 开 发板的J2,通过AXD 软件的设置即可进行仿真调试。 1. 仿真器设置在AXD 调试环境, 打开【Options 】-> 【Configure Target. 】,弹出Choose Target 窗口,在 “Target Environments ”框中选择“EasyJTAG. ”项。 点击“Configure” 按钮,进入“EasyJTAG Setup” 设置窗口,见图1.21 。在"ARMcore" 项中 选取CPU 类型,在“Options”项中选择Halt program 。然后点击“OK”, 再点击“OK”, 此时 EasyJTAG 将会进行连接(开发板)的操作。若连接成功,则开发板上的LPC2210 芯片由 EasyJTAG 控制,原先运行的程序被停止。 注意:有时,AXD 会弹出如图1.23 所示的错误对话框,或者类似的对话框,此时可以点击 “Connectmode.”, 然后选择“ATTACH .” 项确定,再点击“Restart”。若EasyJTAG 正确连 接开发板,AXD 代码窗口将显示空白,接下来就可以使用【File】 ->【Load Image. 】加载 调试文件,进行JTAG 调试。 图1.21 “EasyJTAG Setup ”设置窗口 EasyJTAG 设置选项说明: ARMcore 项,选择CPU 型号; Tap No. 项,当CPU 为LPC2106/2105/2104 时,选择主/从JTAG 调试口,Tap1 为主,Tap2 为从; Connection,硬件连接接口选择; Halt Mode, 停机模式选择,包含Halt program(停止CPU)和Halt and reset( 复位然后停止 CPU)两项; Aux. Option ,辅助选项,包含Step In Interrupt( 允许单步运行进入中断)和Erase Flash when need(允许EasyJTAG 擦除Flash)两项; 20