×
单片机 > 单片机程序设计 > 详情

Jlink 在S3C2440上的使用

发布时间:2020-06-16 发布时间:
|

1)JLINK在AXD中调试的配置

使用ADS1.2的时候进入AXD调试环境回出现“ the session file could not be loaded”

解决方案:1:将工程文件放在不包含中文路径的目录下。

  2:设置AXD->confing Interface 中general中的save and load default session前面的选项去掉。

一:在AXD->options ->configure interface 中的session file 中载入初始化文件,具体内如如下:

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 --〉options -〉configurate processor 把semihosting上的选项去掉  点击clear all.

三:第一次使用ADS时需要在AXD中配置J-LINK,在AXD>OPTION>CONFIGURE TARGET里选择J-LING的安装目录下的JLinkRDI.dll,然后点击CONFIGURE配置,将芯片的复位时间选为2000ms即可正常调试.

#########################################################################

                                      配置J-Link为mini2440烧写bootloader                                   

用J-Link其实不配置也能烧,只不过速度超慢

因为啥,因为不是在板子的内存里运行的。

初学者可能不会配置J-Flash,可以参考我的配置文件(慎用,烧BIOS容易出问题)。

【DownUrl】 J-Link烧写mini2440 BIOS配置文件

-----------------------------------------------------------------------------------------------------------------

自己配置的话,基本配置如下,主要是要参考光盘里带的init script,自己填入初始化选项中。

配置的主要过程如下:

菜单:[Options]-->[option settings]

1. Gneral : Connectioin to J-link --> USB : Device 0

2. Target Interface : 保持默认设置,不用动

3. CPU :

Core --> Auto, Little endian

Use target RAM(faster)-->Addr:40000000 64KB(主要是这个,不用的话就太慢了)

初始化序列(Init sequence)按下面的填,也是从H-Jtag的script扒出来的,我简单做了下注释。

##-------Action-----Value0------Value1
Setmem 32-Bit 0x53000000 0x00000000 ; pWTCON , 看门狗定时器控制寄存器
Setmem 32-Bit 0x4A000008 0xFFFFFFFF ; INTMSK , 中断屏蔽寄存器 
Setmem 32-Bit 0x4A00001C 0x000007FF ; INTSUBMSK , 针对INTMAK具体化的一个中断请求屏蔽寄存器
Setmem 32-Bit 0x53000000 0x00000000 ; pWTCON , 看门狗定时器控制寄存器
Setmem 32-Bit 0x56000050 0x000055AA ; rGPFCON , Port F control
Setmem 32-Bit 0x4C000014 0x00000007 ; CLKDIVN , CPU时钟分频控制寄存器
Setmem 32-Bit 0x4C000000 0x00FFFFFF ; LOCKTIME , 锁时计数寄存器 
Setmem 32-Bit 0x4C000004 0x00061012 ; MPLLCON , MPLL寄存器
Setmem 32-Bit 0x4C000008 0x00040042 ; UPLLCON , UPLL寄存器
Setmem 32-Bit 0x48000000 0x22111120 ; Bus width & wait status
Setmem 32-Bit 0x48000004 0x00002F50 ; Boot ROM control
Setmem 32-Bit 0x48000008 0x00000700 ; BANK1 control
Setmem 32-Bit 0x4800000C 0x00000700 ; BANK2 control
Setmem 32-Bit 0x48000010 0x00000700 ; BANK3 control
Setmem 32-Bit 0x48000014 0x00000700 ; BANK4 control
Setmem 32-Bit 0x48000018 0x0007FFFC ; BANK5 control
Setmem 32-Bit 0x4800001C 0x00018005 ; BANK6 control
Setmem 32-Bit 0x48000020 0x00018005 ; BANK7 control
Setmem 32-Bit 0x48000024 0x008E0459 ; DRAM/SDRAM refresh
Setmem 32-Bit 0x48000028 0x00000032 ; Flexible Bank Size
Setmem 32-Bit 0x4800002C 0x00000030 ; Mode register set for SDRAM
Setmem 32-Bit 0x48000030 0x00000030 ; Mode register set for SDRAM

4. Flash

取消"Automatically detect flash memory",然后"Select Flash Device"。

mini2440的Flash型号是:SST39VF1601,选中之后不要改写任何数值。

5. Production

Erase, Program and Verify enable.


Jlink提示问题:

买了个J-LINK仿真器,拿到手就写了个最经典的程序:跑马灯。不幸的是不能全速运行,只要全速运行,就提示:“Processor ARM79_0 raised an exception.Cause: The processor was reset”

系统老是自己复位,原以为是ICE那里设置不对,折腾了半天。突然想到watchdog,看了一下数据手册,在默认情况下watchdog是允许的。。。。把watchog禁止了就可以了。

         可以这样关闭watchdog:

         ldr  r0,=0x53000000

         mov r1,#0x0

         str r1,[r0]


       或者是在jlink RDI中,有一个cpu的选项签,这个选项签中的下拉菜单中,选择noreset。就不会提示这个了。



关于对semihosting的理解

    semihosting是在调试器里使用,一旦程序semihosting是在调试器里使用,一旦程序使用semihosting,则代码(库函数)直接产生软件中断,调用主机上的函数,用于对主机的操作。例如:程序中可以使用printf()函数,当执行该函数时,代码产生软件中断,调试器捕捉到该特定中断后,调用主机上的函数执行,最后在调试软件的界面中显示该函数的结果。换句话说,semihosting提供了与主机的交互功能,方便调试。直接烧到板子里是用不了的,因为没法与主机通信了。

       Semihosting,顾名思义,就是"半主控",意思就是说,运行在target board上的程序利用主机上的facilities的一种程序调试方式,主要是debug目标板时,利用主机的输入输出设备,例如在AxD的console上打印相应的调试信息或者用主机的键盘输入相应字符作为target上的程序的输入。
  C/C++ code默认是可以使用console的,例如,如果只包含C/C++的程序采用ARMulater模拟,就可以直接使用console作为程序的输出设备;如果程序包含有汇编代码,要使用主机设备的话,必须采用semihosting SWI方式。Semihosing SWI(以下简称SHS),必须有相应的debug agent的支持,才能截获SHS,并向software debugger(AxD)请求相应的服务,如打印字符或者接受字符输入,这样的agents包括:
 1)ARMulater
 2)debug monitor(Angel)
 3)MultiICE
  由于调试裸板或者没有Angel可以供目标板使用的时候,主要还是要借助仿真器进行调试,所以第三种方式最为常用,下面主要就这种方式进行介绍。当然,UART也是一种最常用的调试接口,但是,使用Semihosting,可以独立地调试各个硬件模块的逻辑功能,确保各段代码正确后再进行集成,相应地省去了每次都要配置UART和另开一个hyperterminal观察调试信息。所以,我在开发的时候倾向于使用semihosting来调试相关的代码,这些代码使用C或者C++编写,也就是说和硬件配置关系不大。


关键字:Jlink  S3C2440

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM基础知识八