微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC2132 调试记

LPC2132 调试记

时间:11-10 来源:互联网 点击:
最近公司开发一个新项目,出于成本的考虑,要求空间只能是32K+8K。选用LPC2131(ARM7微控制器芯片芯片),同时也选择了UCOS-II实时操作系统。移植整个操作系统加上一些必备的驱动,总共花了12K。现在作个小结,简单的介绍下整个流程。(写得非常肤浅,新手而已,只是因为以前调过LPC2100开发板,所以经理将这个任务交给了我)(以前的项目是数据采集系统。上位机用的三星的S3C2410,LINUX2.6.x内核,用QToptia用户界面+sqlite数据库,底层是SOCKET编程,下位机是菲利浦的LPC2100,主要用于采集数据和AD转换(OS:usLinux, SOCKET编程+底层ADC驱动))

1、查看快速入门,快速掌握烧写FLASH和JTAG工具,ADS1.2。(相关工具在Software&Driver文件夹下)

(1)LPC2131 FLASH工具:philips公司的LPC2100 Flash Utility V2.2.0 .
(a)波特率设置为9600,时钟设为11050KHZ,time-ou[sec]:2(另外,buffer->flashbuf operation->Download flash可以从flash上下载程序到本机后,再与本机的程序比较是否一致,选择Compare Flash时可以进行flash上程序的校验)
(b)"Upload to Flash"前先要P0.14对地拉低(将ISP(JP1)跳线),程序固化后,将ISP(JP1)跳线帽断开,重新复位系统即可运行程序。LPC2100系列ARM7微控制器芯片具有ISP功能,可以通过串口进行程序下载。(这点非常重要,在我们公司的硬件出板后,我调试板子时,用JTAG调试,程序可以运行,但是用串口下载完程序,重新复位后没有一点反应。后来查过就是硬件设计上没有设置这个跳线。也没有按照如上的要求来进行程序的下载和运行。下载和运行时P0.14脚都为低电平。说明一直是在ISP模式下。)

(2)EasyJTAG-H和H-JTAG可进行硬件仿真调试(不知道有谁知道如何固化,敬请赐教)EasyJtag可以固化,但是我使用时,总是有错误出现,连接不到,网上查过错误原因,很多人有过这样的错误,但是没有找到解决方法。

(3)ADS1.2集成开发环境几个注意点:

(a)Debug Settings ->linker->ARM Linker设置RO(或者指定.scf文件)

(b)Debug Settings ->Target->Target Settings->Post-Linker (ARM fromELF)

(c)Debug Settings ->Liker->ARM fromELF指定output format(Intel 32 bit Hex)

和output file name(/xx/xx/xxx.hex)

(d)指定生成的文件夹为DebugInRam,如果是RelInFlash的话,会对芯片加密,需

要用ISP全局擦除后,才能恢复JTAG调试及ISP读/写操作。

(e) ADX配置好调试目标。Option->configure Target->ADD->D:\Program

Files\H-JTAG V0.3.1目录下的H-JTAG .dll,点击“打开”即可。

Option->configure Target ->Choose Target->H-JTAG

2、快速运行示例代码。在此基础上进行修改可以省去很多时间。移植了UCOS-II操作系统,修改了I2C(模拟I2C),UART0, BEEP(用于测试),中断处理,用一个硬件时钟模拟多个软件时钟。参考网上代码后修改(作者:21icbbs LPC900,2005-08)示例代码见最后例1。

3、开发板上调试完毕后,关键在于板子出来后的调试。此时的问题,可能是硬件,可能是软件。需要软硬件配合调试。做好工作日志,因为此时的问题如果不做好记录,会导致大货时问题没有得到更改。比如前面提到的这次硬件设计上没有设计ISP跳线的问题。另外,开发板上的某些硬件可能与实际板子的有所不同,要稍加注意。如:我们公司出板时用的CPU是LPC2132,与LPC2131的不同是LPC2132是64K+16K,还有时钟更改了,不要忘记在代码中把时钟的值更改过来。其他的基本上没有什么问题,直接移植就可以了。现在还差的就是做个最小文件系统啦(留出一块空间512字节,可存储,可擦除,还要带CRC校验)啊,努力吧。要学的东西太多啦。

4、附带讲一下减少代码的一些办法。

(a)在startup.s中的跳转函数入口,不要写main函数,改为其它名字,也就是把自己的入口函数的名字改掉。因为如果是main入口的话,ads1.2会做一大堆全局变量的COPY和搬移。在用ADS单步调试时会发现在进入main之前会先做_main.这就是在做这些工作。但是如果这样做的话,要记得全局变量和静态变量RODATA段的初始值会丢失,需要在用这些变量前再赋下值。

(b)尽量不用或少用库函数,如atoi,strcmp,strcp等等,而是由自己去实现,这样可以减少链接一些不必要的库文件。

以上二者做的适中的话,可能可以减少10K的代码量

(c)UCOS_II.h中提供了内核裁减的可配置,轻松减少代码。

例1:target.c文件

//定义软件定时器数量(至少1个)

#define TIMER_N8

//定义软件定时器结构

//每个定时器只占用2个字节

struct

{

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top