您的位置:首页 > 其它

ads+jlink和keil+jlink调试环境配置

2014-06-12 03:33 405 查看
/***********************************************************************************************************************************************************************/

ads1.2 and jlinkv8

1.安装ads1.2和jlink驱动Setup_JLinkARM_V408i.exe

安装ads1.2时,最后在100%时如果持续时间长,耐心等一下吧。

如果你在WIN7 X64下安装ADS就会有,

Warning : L6301W:Could not find file C:\Program Files .

Error : L6218 : Undefined symbol .......

好像库都找不到了。

问题就出在Program Files (x86)那个括号上。ADS是1997年的产品,对本地化支持不好。

这种情况只会出现在WIN7 X64的系统下,x32下没有Program Files (x86)的目录,不会有这样的问题。

所以ADS的所有访问的路径,不能有文中或特殊符号。

解决方法:你把ADS安装在C根目录下就可以。比如:C:\ARM\ADSv1_2。

2.将线连好:pc的usb口连到jlink的usb口,jlink的jtag口连到板子的jtag口。由于我的jlink的jtag口20pin而板子jtag口10pin,所以中间用一个转接小板转接了一下

将板子的flash开关在nor或nand均可,将板子上电,在开始里打开jlink gdb server,应该会出现下图,恩,jlink没坏



3.确保TQ2440_Test工程的路径中不存在中文

在TQ2440_Test中双击TQ2440_Test.mcp,出现



点击debug,弹出axd窗口如下,(貌似还弹出了load session的窗口,关闭了就行)

4.在axd中点击configure target



弹出下图



add 一个文件JLinkRDI.dll,默认在C:\Program Files\SEGGER\JLinkARM_V408i,添加后如下图



然后点configure,然后在弹出的窗口中点确定,然后点OK

5.在axd中点击configure interface,弹出串口,在session file标签页配置script脚本文件init_sdram.txt,路径中不要中文



init_sdram.txt内容如下

[cpp] view
plaincopy

Setmem 0x53000000 0x00000000 32

Setmem 0x4A000008 0xFFFFFFFF 32

Setmem 0x4A00001C 0x000007FF 32

Setmem 0x53000000 0x00000000 32

Setmem 0x56000050 0x000055AA 32

Setmem 0x4C000014 0x00000007 32

Setmem 0x4C000000 0x00FFFFFF 32

Setmem 0x4C000004 0x00061012 32

Setmem 0x4C000008 0x00040042 32

Setmem 0x48000000 0x22111120 32

Setmem 0x48000004 0x00002F50 32

Setmem 0x48000008 0x00000700 32

Setmem 0x4800000C 0x00000700 32

Setmem 0x48000010 0x00000700 32

Setmem 0x48000014 0x00000700 32

Setmem 0x48000018 0x0007FFFC 32

Setmem 0x4800001C 0x00018005 32

Setmem 0x48000020 0x00018005 32

Setmem 0x48000024 0x008E0459 32

Setmem 0x48000028 0x00000032 32

Setmem 0x4800002C 0x00000030 32

Setmem 0x48000030 0x00000030 32

然后确定,然后关闭axd,

6.然后在ads中再次点击debug,如果此时弹出的画面是如下,就再次执行一下第 4 5步,貌似因为之前的配置没被保存



7.然后在ads中再次点击debug,如果此次弹出的画面如下,即要求定位到2440init.s文件,那就找到到ads工程源码中的这个文件,点击打开



点击打开之后,应该就可以出现以下窗口


接下来点击go或按F5 等调试就可以了

在操作过程中,点击debug后如果又出现一些问题,那么就执行一下configure interface或configure target

/***********************************************************************************************************************************************************************/

keil4 and jlinkv8

1.安装keil4 和jlink驱动Setup_JLinkARM_V408i.exe

2.打开keil4,新建一个工程,名为test



3.在接下来的框中选择samsung的s3c2440a芯片,如下



4.在接下来的框中选择是,使用官方启动脚本,如下



5.配置板子



target:



debug:



Ext_RAM.ini是手动在工程目录建立的文件,其内容如下

[cpp] view
plaincopy

/******************************************************************************/

/* Ext_RAM.INI: External RAM (SDRAM) Initialization File */

/******************************************************************************/

// <<< Use Configuration Wizard in Context Menu >>> //

/******************************************************************************/

/* This file is part of the uVision/ARM development tools. */

/* Copyright (c) 2005-2008 Keil Software. All rights reserved. */

/* This software may only be used under the terms of a valid, current, */

/* end user licence from KEIL for a compatible version of KEIL software */

/* development tools. Nothing else gives you the right to use this software. */

/******************************************************************************/





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 itself

CPSR = 0x000000D3; // Disable interrupts

PC = 0x40000000; // Position PC to start of RAM

_WDWORD(0x53000000, 0x00000021); // Enable Watchdog

g, 0 // Wait for Watchdog to reset chip



Init(); // Initialize memory

LOAD .\test.axf INCREMENTAL // Download program

SetupForStart(); // Setup for Running

g, main // Goto Main

上面倒数第三行是需要改动的,在本例中是test.axf。一般为工程名.axf。编译输出窗口也有指示,如下。



另外,此文件还规定了pc的开始指向,在debug图中点击ext_ram.ini右侧的edit,如下



可以编辑此文件,有两种编辑方式:文本和图形。如下



可见设置pc要指向0x30000000,即代码段的起始地址。而代码段区域是在target标签页设定,见上面target图(即read only memory area,但也放在了sdram中)

utilities:



6.选择file/new,新建一个文件,并保存为main.c



并将此文件加入工程中,如下



7.编辑main.c,输入如下测试代码

[cpp] view
plaincopy

#include<s3c2440.h>

void delay(int x)

{ int i = 0;

while(x--){

for(i=0;i<5000;i++){

;

}

}

}

int main()

{

while(1)

{

GPBCON|=(1<<2*5);//GPB5 LED1,0 on

GPBCON&=~(1<<11);

GPBDAT&=~(1<<5);//light on

delay(100);

GPBDAT|=(1<<1*5);//light off

delay(100);



GPBCON|=(1<<2*6);//GPB6 LED2

GPBCON&=~(1<<13);

GPBDAT&=~(1<<6);

delay(100);

GPBDAT|=(1<<1*6);

delay(100);



GPBCON|=(1<<2*7);//GPB7 LED3

GPBCON&=~(1<<15);

GPBDAT&=~(1<<7);

delay(100);

GPBDAT|=(1<<1*7);

delay(100);



GPBCON|=(1<<2*8);//GPB8 LED4

GPBCON&=~(1<<17);

GPBDAT&=~(1<<8);

delay(100);

GPBDAT|=(1<<1*8);

delay(100);



GPBCON|=(1<<2*0);//GPB0 BUZZER, 1 on

GPBCON&=~(1<<1);

GPBDAT|=(1<<1*0);

delay(100);

GPBDAT&=~(1<<0);

delay(100);



}



}

按下ctrl + F5开始调试-------开关拨到nand测

一些位操作



某位置1,其余位不变:如置GPBCON第10位1,其余不变 (从第0位开始算起)

GPBCON |= (1<<10);

某连续几位置1,其余位不变:如置GPBCON第10,11位1,其余不变

GPBCON |= (3<<10);

如果置bit0,可以GPBCON |=1;

GPBCON |= ~0 ; 或直接 GPBCON= 0xFFFFFFFF;//这样不太好不如 GPBCON|= ~0



某位清0,其余位不变:如清GPBCON第10位0,其余不变(从第0位开始算起)

GPBCON &= ~(1<<10);

某连续几位清0,其余位不变:如清GPBCON第10,11位0,其余不变

GPBCON &= ~(3<<10);

GPBCON &= ~1;

所有位清零 GPBCON&=0 ; 或直接 GPBCON=0;



同时某位清零和置1,而其他位不变

如置GPBCON第10位为1,清GPBCON第11位为0,置GPBCON第12位为1

GPBCON =GPBCON |(1<<10)& (~(1<<11))
|(1<<12);

也可以

GPBCON|= 0x05<<10;//或许不能保证第11位清零(如果原来第11位=1,执行后仍为1)



从位组合数据,8位

data=0;//组合之前先清零

for(i=0;i<8;i++){

data<<1;

data |= bit_value;

}



读取中间某几位

如 val = rCLKDIVN;

m = (val>>1)&3;//读取bit2 bit1到m

switch (m) {

case 0:

HCLK = FCLK;

break;

case 1:

HCLK = FCLK>>1;

break;

case 2:

if(s&2)

HCLK = FCLK>>3;

else

HCLK = FCLK>>2;

break;

case 3:

if(s&1)

HCLK = FCLK/6;

else

HCLK = FCLK/3;

break;

}

keil c中嵌入汇编--c51

1.在c代码中加入汇编标志,比如

main()

{ InitAll();

#pragma ASM

SETB P3.5 //buzzer on

NOP

#pragma ENDASM

ctrlprocess();

}

2.设置一下

在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;如下



keil c中嵌入汇编--arm

按照如下方式直接加入代码即可

__asm

{

mov r0,#1

mov r1,#0x56000014 //buzzer on

strb r0 ,[r1]

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: