利用ADS1.2和JLINK V8搭建ARM7开发平台

来源:互联网 发布:淘宝店铺标志300x300 编辑:程序博客网 时间:2024/06/05 04:16

硬件资源:一块以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即可。

 改完后,下载,调试,顺利进入中断....

0 0
原创粉丝点击