单片机
返回首页

利用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即可。


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

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章