TQ2440 在Keil V5 MDK下创建工程 并 使用Jlink 在RAM调试 方法
来源:互联网 发布:酷狗软件 编辑:程序博客网 时间:2024/05/13 15:55
下面以点亮LED的裸机实验为例,讲述Tq2440开发板,使用Keil软件编写程序创建工程,并使用Jlink v8在RAM调试程序的流程。
一、准备工作:
1.软件:Keil mdk511a ,Jlink相关驱动程序
2.硬件:TQ2440开发板(S3C2440A芯片 ARM920T),Jlink V8以及相关转接线
二、创建Keil工程:
1.先在磁盘创建工程目录例如LED。打开keil,选择菜单Project->New uVision Project...在对话框选择刚刚创建的led目录,并取工程名为led,单击保存。如图1.
图1
2.选择芯片型号为S3C2440A,单击ok进入下一步,见图2。
图2
3.在弹出的“Copy ‘S3C2440.s’to Project Folder and Add File to Project?”对话框中选择“是”(这个很重要,见图3)。
图3
4.复制编写好的源码文件例如“Main.c”到工程目录”LED“;将文件添加到工程:如图4在工程资源管理器下选中Target-SourceGroup1(可更名)右键选择Add Existing File to Group‘Source Group1’...在弹出的对话框中将刚刚复制到LED目录下的Main.c加入。在图5中选择Main.c后单击add后单击close。
图4
图5
三、配置Keil工程:
1.单击图6所示魔术棒图标或在图4所示工程资源管理器下选中target1右键选择Options for Target‘Target1’...,进入工程配置页。
图6
2.Target标签的配置如图7所示:
图7
3.Output及Listing标签的配置如图8。先需在工程目录led下创建DEBUG目录。
图8
4.Linker标签设置如下图9:注意:Scatter File中是没有内容的 否则出错!
图9
5.Debug标签配置如图10。
1)”Run to main()“选项貌似是这样子的:不勾选它时,调试时程序会等候在main函数开始;勾选它调试时,程序会直接跑起来,根本停不下来啊(当然在main函数开始处添加断点可以让程序停在那里)
2)Ext_RAM.ini用于初始化RAM,它与工程无关,但这是在RAM调试程序必须的。在工程目录LED下创建文本文件,命名为Ext_RAM.ini,复制如下代码到该文件:注意PC = 0x30000000和 LOAD .\LED.axf INCREMENTAL这两句的作用,前者与图7配置有何关系?(这似乎和main入口并无关系,它是启动文件s3c2440.s编译链接后的首地址似乎也是TQ2440开发板RAM首地址)后者是编译完成后用于debug的文件。
FUNC void SetupForStart (void) {// <o> Program Entry Point PC = 0x30000000;}FUNC void Init (void) { _WDWORD(0x4A000008, 0xFFFFFFFF); // Disable All Interrupts _WDWORD(0x53000000, 0x00000000); // Disable Watchdog Timer // Clock Setup // FCLK = 300 MHz, HCLK = 100 MHz, PCLK = 50 MHz _WDWORD(0x4C000000, 0x0FFF0FFF); // LOCKTIME _WDWORD(0x4C000014, 0x0000000F); // CLKDIVN _WDWORD(0x4C000004, 0x00043011); // MPLLCON _WDWORD(0x4C000008, 0x00038021); // UPLLCON _WDWORD(0x4C00000C, 0x001FFFF0); // CLKCON // Memory Controller Setup for SDRAM _WDWORD(0x48000000, 0x22000000); // BWSCON _WDWORD(0x4800001C, 0x00018005); // BANKCON6 _WDWORD(0x48000020, 0x00018005); // BANKCON7 _WDWORD(0x48000024, 0x008404F3); // REFRESH _WDWORD(0x48000028, 0x00000032); // BANKSIZE _WDWORD(0x4800002C, 0x00000020); // MRSRB6 _WDWORD(0x48000030, 0x00000020); // MRSRB7 _WDWORD(0x56000000, 0x000003FF); // GPACON: Enable Address lines for SDRAM}// Reset chip with watchdog, because nRST line is routed on hardware in a way// that it can not be pulled low with ULINK_WDWORD(0x40000000, 0xEAFFFFFE); // Load RAM addr 0 with branch to itselfCPSR = 0x000000D3; // Disable interruptsPC = 0x40000000; // Position PC to start of RAM_WDWORD(0x53000000, 0x00000021); // Enable Watchdogg, 0 // Wait for Watchdog to reset chipInit(); // Initialize memoryLOAD .\LED.axf INCREMENTAL // Download programSetupForStart(); // Setup for Runningg, main
一些发现: 上面的init();函数前面5行注释掉后并不会对后面的调试产生影响。g ,main 语句可有可无。如果他被注释调试时从s3c2440.s文件开始,然后才跳到main(),如果没被注释,调试时从main开始(如果按照图10配置的话),但并不意味着s3c2440.s文件的代码没有执行。程序只是停在了main入口处。
图10
6.Utilities标签的配置。
图11
7.所有标签页配置完后单击ok保存配置。
三、编译与调试
1.连接好硬件电路:如图12。jlink一端连好PC的usb口,另一端通过转接板连接到开发板JTAG口。将开发板nand/nor选择开关置于nor,打开开发板电源。(PS:没有开始调试时,如果jlink指示灯在闪烁,说明jlink驱动不正确,,呵呵。。。)
图12
2.编译并进入调试如图13,14
图13
图14
3.至此,可以像调试51单片机一样调试ARM裸机程序啦。(单步,断点......)
一些效果
附、点亮LED工程 Main.c源码
#include<s3c2440.h>void Led_port_init(void);#define LED1_ON ~(1<<5)#define LED2_ON ~(1<<6)#define LED3_ON ~(1<<7)#define LED4_ON ~(1<<8)#define LED1_OFF (1<<5)#define LED2_OFF (1<<6)#define LED3_OFF (1<<7)#define LED4_OFF (1<<8)/*************************************************Function name: delayParameter : timesDescription : 延时函数Return : voidArgument : voidAutor & date :**************************************************/void delay(int times){ int i; for(;times>0;times--) for(i=0;i<400;i++);}/*************************************************Function name: MainParameter : voidDescription : 主功能函数Return : voidArgument : voidAutor & date :**************************************************/int main(void){ int i; Led_port_init(); for(i=0;i<100;i++) { /* 全亮 */ GPBDAT = GPBDAT&(LED1_ON)&(LED2_ON)&(LED3_ON)&(LED4_ON); delay(10000); /* 全灭 */ GPBDAT = GPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF); delay(10000); }}/*************************************************Function name: Led_port_initParameter : voidDescription : TQ2440开发板有4个引脚连接了LED发光 二极管,分别是GPB5--LED1,GPB6—LED2 GPB7--LED3,GPB8--LED4,该函数的作用 是对其个引脚进行初始化。Return : voidArgument : voidAutor & date : Daniel**************************************************/ void Led_port_init(void){ /*设置GPB5-GPB8为输出端口*/ GPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16)); GPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);}
参考googlemi的文章 在此表示感谢
http://blog.csdn.net/googlemi/article/details/8743331
- TQ2440 在Keil V5 MDK下创建工程 并 使用Jlink 在RAM调试 方法
- 基于固件库的STM32F10x程序在Keil v5 MDK 下的RAM调试方法
- mini2440在Keil MDK下使用Jlink调试入门
- keil MDK在RAM中调试
- 在Keil中使用JLink调试S5PV210配置方法
- 在Eclipse下编译Keil MDK工程
- 在Eclipse下编译Keil MDK工程
- 在Keil V5下新建STM32F407工程
- Jlink 在ADS下的调试--基于TQ2440
- IAR 环境下基于JLINK在RAM中调试STM32
- STM32在KEIL MDK环境下建立新工程
- JLINK在MDK中调试时间
- STM32在Keil MDK5环境下RAM上代码调试
- 在Keil MDK编译环境下使用UEstudio编写程序
- am335x在ubuntu下使用StarterWare编写裸机程序并在CCS中用Jlink调试
- 在linux下使用jlink有两种方法
- Keil MDK使用J-LINK分别在Sram,Nor Flash以及Sdram中调试代码的原理和方法
- 在MDK环境下使用STM32F10x_StdPeriph_Lib_V3.5.0库创建工程教程
- 计算机系统要素:第五章 计算机体系结构
- POJ 2965 The Pilots Brothers' refrigerator(dfs+记录路径)
- axis 开发webservice
- PHP里$_SERVER['HTTP_HOST']和$_SERVER['PHP_SELF']区别
- C float类型 范围 详解
- TQ2440 在Keil V5 MDK下创建工程 并 使用Jlink 在RAM调试 方法
- ORACLE11g 区的管理与分配
- Openstack rootwrap
- 数据库规范
- 高通8x74分支编译问题集锦
- C 语言 int(32位) 内存中的表示
- dell 机虚拟机安装苹果操作系统出现问题
- CPU对内存管理四
- Git简介