利用ADS1.2和JLINK V8搭建ARM7开发平台
2020-06-21 来源:eefocus
硬件资源:一块以ARM7(LPC2119)为核心的电路板,Jlink v8仿真器,LONGWEIPS-305DM直流稳压电源,笔记本电脑(安装win7旗舰版)
软件资源:ADS1.2 Jlink v8驱动Setup_JLinkARM_V408i
最近需要用到LPC2119这款芯片,可手头没有这款芯片的仿真器,上网一查周立功公司的仿真器AK100某宝上最便宜也要1.8K,这个....囊中羞涩啊。LZ我忽然想到以前用ADS1.2搞S3C2440开发时用的是Jlink v8仿真器,这个仿真器能不能用到LPC2119这款芯片呢?于是乎赶忙问度娘,查资料得知有Jlink v8支持LPC2119芯片,欣喜万分,立马开始尝试。
由于我现有的电路板上已经焊好了下载插槽为单排8针插槽,和我现有的Jlink v8 2*4插槽无法搭配使用,但是Jlink v8仿真器的转接板上有2*7 、2*10等多种插针,于是乎我就拿现有的杜邦线从转接板的插针引出,而杜邦线也插上一排插针,将转接板上引出的线和电路板插槽一一对应上(nTRST、TDI、TMS、TCK、RTCK、TDO、nRST、VDD)。将线练好,电路板上电,启动ADS方针DEBUG(前提是安装好JLINK驱动,并配置好,可百度Jlink v8 用户手册,上面有详细操作教程),发现报错,一直出现low voltage,这下子可把我弄懵了,我查是否线没接好、芯片供电是否正常....搜百度搜了很多资料 没有相关解释,没办法我又仔细研究Jlink v8的硬件结构,一个个端口测试电压 是否正常,最后发现有Jlink v8上有个Vref 一直为低,而看数据手册上应该与Vdd相连 为3.3v,于是将Vref飞线连上了Vdd3.3v,问题解决了.....可是留下一个问题,为什么我以前用Jlink v8烧写S3C2440程序时没有报错呢??
当我编好程序down到目标板,嘿,又给我出难题了。进不了中断,这可我接纳闷了,赶紧找原因,首先检查一遍中断的相关初始化程序是否有误,是否屏蔽中断,没问题,看看内存里面中断标志是否置位,奇了怪了,我中断标志是置位了,可是就是进不了中断服务程序,查看其它与中断相关的寄存器,发现CPSR寄存器有异常。这下就和ARM7的启动代码相关了,搜寻网络资料发现,可能引起无法触发中断的可能原因有以下两点
1.请注意你的程序调试方式选择,若选择DebugInFlash或RelInFlash,程序入口地址应为:0x00000000;若选择DebugInRam,程序的入口地址应为:0x40000000。
我下载的周立功的工程模板,里面已经将入口地址正确设置了,所以排除了这个原因。
2.在Startup.s文件中初始化堆栈函数设置有误
我下载的原版的工程模板中代码如下
InitStack
MOV R0, LR
;Build the SVC stack
;设置管理模式堆栈
MSR CPSR_c, #0xd3
LDR SP, StackSvc
;Build the IRQ stack
;设置中断模式堆栈
MSR CPSR_c, #0xd2
LDR SP, StackIrq
;Build the FIQ stack
;设置快速中断模式堆栈
MSR CPSR_c, #0xd1
LDR SP, StackFiq
;Build the DATAABORT stack
;设置中止模式堆栈
MSR CPSR_c, #0xd7
LDR SP, StackAbt
;Build the UDF stack
;设置未定义模式堆栈
MSR CPSR_c, #0xdb
LDR SP, StackUnd
;Build the SYS stack
;设置系统模式堆栈
MSR CPSR_c, #0xdf
LDR SP, =StackUsr
MOV PC, R0
最后一句 MSR CPSR_c,#0xdf。这就出问题了,将IRQ中断屏蔽掉了,本人汇编都还给老师了,所以就不在此贻笑大方了。关于启动代码解读可参考:http://blog.chinaunix.net/uid-22124213-id-403007.html
将上面代码改为以下:
InitStack
MOV R0, LR
;Build the SVC stack
;设置管理模式堆栈
MSR CPSR_c, #0xd3
LDR SP, StackSvc
;Build the IRQ stack
;设置中断模式堆栈
MSR CPSR_c, #0xd2
LDR SP, StackIrq
;Build the FIQ stack
;设置快速中断模式堆栈
MSR CPSR_c, #0xd1
LDR SP, StackFiq
;Build the DATAABORT stack
;设置中止模式堆栈
MSR CPSR_c, #0xd7
LDR SP, StackAbt
;Build the UDF stack
;设置未定义模式堆栈
MSR CPSR_c, #0xdb
LDR SP, StackUnd
;Build the SYS stack
;设置系统模式堆栈
MSR CPSR_c, #0x5f
LDR SP, =StackUsr
MOV PC, R0
实际就是降0xdf换为0x5f即可。
改完后,下载,调试,顺利进入中断....