ARM开发板使用手册.docx
- 文档编号:4702153
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:25
- 大小:351.55KB
ARM开发板使用手册.docx
《ARM开发板使用手册.docx》由会员分享,可在线阅读,更多相关《ARM开发板使用手册.docx(25页珍藏版)》请在冰豆网上搜索。
ARM开发板使用手册
ARM开发板使用手册
PHILIPLPC2132
ARM7TDMI
第一章介绍
LPC2132开发板是专门为arm初学者开发的实验板,用户可以做基础的arm实验,也可以做基于ucos-ii的操作系统实验。
本系统的实验源代码全部开放,用户可以在此基础上开发产品,减少重复劳动。
由于LPC2132体积很小,并且功能强大,因此特别适合需要复杂智能控制的场合,其运行速度高于早期的80486计算机,而体积只有指甲大。
我们已经将LPC2132产品成功应用在干扰比较强的工业场合,经过6个月的运行,各项指标符合要求。
因此我们特别推荐这一款开发板作为ARM初学者入门。
由于此款开发板体积很小,非常适合直接应用在工业以及民用智能控制器的场合。
LPC2132CPU介绍
LPC2131/2132/2138是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-STMCPU,并带有32kB、64kB和512kB嵌入的高速Flash存储器。
128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。
对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
较小的封装和很低的功耗使LPC2131/2132/2138特别适用于访问控制和POS机等小型应用中;由于内置了宽范围的串行通信接口和8/16/32kB的片内SRAM,它们也非常适合于通信网关、协议转换器、软件
modem、语音识别、低端成像,为这些应用提供大规模的缓冲区和强大的处理功能。
多个32位定时器、1个或2个10位8路的ADC、10位DAC、PWM通道、47个GPIO以及多达9个边沿或电平触发的外部中断使它们特别适用于工业控制应用以及医疗系统。
主要特性
●● 16/32位ARM7TDMI-S核,超小LQFP64封装。
●● 8/16/32kB的片内静态RAM和32/64/512kB的片内Flash程序存储器。
128位宽度接口/加速器可实现高达60MHz工作频率。
●● 通过片内boot装载程序实现在系统编程/在应用编程(ISP/IAP)。
单扇区或整片擦除时间为400ms。
●● 256字节行编程时间为1ms。
●● EmbeddedICE®RT和嵌入式跟踪接口通过片内RealMonitorTM软件对代码进行实时调试和高速跟踪。
●● 1个(LPC2131/2132)或2个(LPC2138)8路10位的A/D转换器,共提供16路模拟输入,每个通道的转换时间低至2.44us。
●● 1个10位的D/A转换器,可产生不同的模拟输出。
(仅适用于LPC2132/2138)
●● 2个32位定时器/计数器(带4路捕获和4路比较通道)、PWM单元(6路输出)和看门狗。
●● 实时时钟具有独立的电源和时钟,可在节电模式中极大地降低功耗。
●● 多个串行接口,包括2个16C550工业标准UART、2个高速I2C接口(400kbit/s)、SPITM和具有缓冲作用和数据长度可变功能的SSP。
●● 向量中断控制器。
可配置优先级和向量地址。
●● 小型的LQFP64封装上包含多达47个通用I/O口(可承受5V电压)。
●● 多达9个边沿或电平触发的外部中断管脚。
●● 通过片内PLL(100us的设置时间)可实现最大为60MHz的CPU操作频率。
●● 片内晶振频率范围:
1~30MHz。
●● 低功耗模式:
空闲和掉电。
●● 可通过个别使能/禁止外部功能和外围时钟分频来优化功耗。
●● 通过外部中断将处理器从掉电模式中唤醒。
●● 单电源,具有上电复位(POR)和掉电检测(BOD)电路:
●● CPU操作电压范围:
3.0V~3.6V(3.3V±10﹪),I/O口可承受5V的电压。
实验开发板的中央处理器采用Philips最新的LPC2132低功耗32位ARM处理器,内带16kRAM,64Kflash,工作频率最高60M。
实验种类
可以做如下实验(实际上不限于这些):
LCD液晶控制器实验,您可以掌握在没有操作系统的支持下编写LCD液晶驱动以及菜单制作
●● GPIO实验,通过GPIO驱动发光管
●● SPI总线实验,可以掌握对SPI外设的操作,如74HC595的操作
●● A/DD/A实验,掌握模拟信号采样并转化为数字量,以及数字量生成模拟电压
●● PWM实验,掌握脉宽调制的生成
●● 实时时钟实验,掌握对内部时钟的设置以及读取
●● 脉冲计数实验,掌握用中断方式对外部跳变信号的计数以及查询方式计数
●● 串行通信实验,掌握RS232通信,不同波特率的设置,查询方式通信以及中断方式通信
●● I2C总线实验,掌握如何通过I2C对E2ROM24C04操作
●● 键盘实验,掌握键盘扫描原理以及如何获得键码
●● 7段LED实验,掌握在LED显示数字的技巧
●● 低功耗实验,掌握如何使处理器进入节电模式
●● 通过串口下载程序代码,掌握远程程序修改的方法
●● 中断控制实验,学习如何使程序进入管态以及核态,学习中断向量的设置,以及C语言环境下对中断的处理。
●● 掌握如何在没有硬件的情况下在VC环境编写嵌入式应用程序,并模拟真实环境调试。
进一步掌握在硬件平台已经完成后如何把VC环境编写嵌入式应用程序移植到硬件平台上。
●● 掌握硬件驱动的API函数的编写、API调用的方法。
掌握函数库的生成以及库函数的调用,从而使源程序中关键部分的源代码不可见,保护知识产权。
●● 掌握用C++对嵌入式应用编程,掌握C,C++以及汇编混合编程
●● 掌握如何用UML建立模型并且生成C++程序,掌握对自动生成的C++程序的嵌入式改写并移植到目标系统
●● 操作系统实验,ucos—ii
也可以直接用开发板做智能控制器、智能仪表等工业设备。
实验器材清单
简易仿真头一个20芯扁平电缆1根,并口电缆一根,串口电缆一根,实验板一块,5v电源一个
光盘一张,光盘包括ads1.2,arm参考资料,实验源代码,调试代理,外设资料,原理图
在使用本开发板前,应该具备的基础知识包括:
ARM体系结构和编程,会C语言。
第二章开发环境的搭建
开发环境我们采用ADS1.2集成环境,请先安装ADS1.2。
如何使用ADS1.2请参考光盘内的手册。
ARM开发环境和51单片几很不一样。
熟悉51的都知道用仿真器来调试,但arm却不一样,它通过JTAG接口仿真。
因此这里先介绍JTAG仿真的概念。
JTAG调试接口
为什么现在的微处理器采用JTAG?
当前许多复杂的微处理器的内核不再能通过芯片的外设直接访问,调试芯片程序变得困难。
还有,为了缩短开发周期加快产品进入市场的速度,直接将CPU安装在电路板上调试也更接近实际工作情况。
这些都需要JTAG装置来完成。
JTAG的引脚定义
遵循JTAG的器件包含以下几个管脚
TCK测试时钟输入,它和系统时钟不同
TDI测试数据输入,通过它数据移位进入器件
TDO测试数据输出,通过它数据从器件移出
TMS测试模式选择,在JTAG规范中TMS命令选择测试模式
TRST测试复位输入,它为TAP控制器提供异步初始化
器件的测试支持功能是通过TAP控制器来实现的。
TAP是一个状态机,它控制控制所有相关操作,每种遵循JTAG的器件都有自己的TAP控制器,通过TCK和TMS可以使状态机内部的状态发生变化,从而支持诸如断点、单步、内部观察等调试工作。
本章针对ARM7TDMI介绍调试结构。
ARM的调试体系采用协议转换器来使调试器通过JTAG与ARM核直接通信。
前面JTAG标准中提到的扫描链功能是测试用,这里把它作为调试用:
捕获数据总线上的信号并向内核或存储器插入新的信息。
ARM7TDMI-S核内具有EmbeddedICE逻辑,EmbeddedICE逻辑提供对片内调试的支持。
调试指令直接通过扫描链插入ARM内核并执行。
根据插入调试指令的不同,内核可以处于观察、保存或改变状态。
ARM的调试体系可以使程序指令执行速度处于调试速度或全速运行。
在ARM中采用JTAG的特点是:
通过JTAG接口可以观察ARM内核状态和系统状态(注意:
系统状态包括片内外设,不同于内核状态);不占用额外的目标系统资源;提供传统的断点访问和观察点访问;不再需要另外的UART端口来和监控程序通信。
围绕ARM内核有两个扫描链:
围绕整个内核外围的一个扫描链以及仅仅覆盖数据总线和断点的扫描链。
由于后者的链比较短,从而使调试指令和数据可以快速插入内核,避免了额外的时间。
ARM的JTAG调试需要如下设备:
●● 一台运行调试软件的主机
●● 一个EmbeddedICE协议转换器。
EmbeddedICE协议转换器将远程调试协议命令转换成所需要的JTAG数据,从而对目标系统上的ARM7TDMI-S内核进行访问。
它包括两个部分:
将串行数据信号转换成JTAG接口兼容信号的装置以及带有JTAG接口的ARM调试体系内核。
其中前半部分可以是仿真器硬件,后半部分是ARM片子本身就支持的。
根据功能需要,仿真器硬件可以做了比较复杂也可以很简单。
我们采用简易的仿真器。
调试主机运行调试程序,如ADS,RealView,SDT等。
ICE协议转换器其实包含两部分:
协议转换硬件和软件,复杂的硬件一般采用FPGA实现,简单的可以就用一片数字缓冲电路实现。
协议转换软件一般在调试主机上运行,可以是API的方式也可以用后台服务的方式。
调试主机和协议转换硬件之间可以采用各种方式连接:
并行、串行、网络以及USB,只要最终递交给ICE协议转换器的数据一致就可以,这是通过运行在ICE协议转换器上面的通信软件来实现的。
ICE协议转换器和目标板通过遵循JTAG电气规范的电缆连接。
简易仿真头的使用
简易仿真头采用wiggler电缆,其使用过程如下:
硬件连接
按照下图连接仿真头、计算机以及实验板
软件配置
1首次使用时先安装驱动(以后不用再安装)---执行文件下的安装驱动.exe
安装好并口驱动和OCX
2,安装完毕后即可运行Arm7Agent或Arm9Agent调试ARM7系统或ARM9系统
3,如果在以后的使用过程中发现程序无法启动重新执行安装驱动.exe即可
4,在ADW(SDT)/AXD(ADS)的调试配置选项里选择remote_a.dll
5,在ADW/AXD的调试配置里IP地址必须填写:
127.0.0.1
二常见问题
1,THUMB/ARM混合编程时断点设置要素
当CPU处于一种CPU模式时(THUMB或ARM)断点只可以设置在当前模式
下的指令处不可以设置在另一种模式下的指令
解决方案设置一个断点在CPU模式切换指令处(如BX)当程序运行到此指
令并停下来后然后通过单步执行(Step)进入另一种状态这时候就可以
在当前模式下任意设置断点了
2,THUMB/ARM混合编程时因为ADW/AXD启动时默任的CPU模式为ARM模式如果
你启动调试前你的ARMCPU正在执行Thumb模式指令那么将会导致调试错
误
解决方案按一下你的板子的复位键,然后再启动ADW/AXD即可
3,为了加快软件影响单步执行速度现在暂时屏蔽了semihosting功能
4,如果出现无法逼使CPU进入调试的提示只需要复位你的板子,重新启动软
件即可
5,如果发现软件没有任何动作把它关了再启动
6,如果发现软件根本无法运行看不到其运行界面那么执行安装驱动.exe
重新驱动OCX即可
7,如果出现打开并口失败,那么执行安装驱动.exe,重新并口驱动即可
8如果提示检测不到ARM核如果你的CPU没坏供电正常那么就一定是你的
JTAG板子问题了,应该参考常用的那种"SDT"或"Wiggler"接线然后在JTAG调试软
件选择对应的选项SDT或wiggler或自定义
9,排除这些如果出现其他的调试错误,那么就是你设置ADW/AXD或你的板子问题了
10有时候,如果你计算机的防火墙开着,可能会使调试不正常,请设置防火墙为允许本代理程序运行,或者干脆关闭防火墙
安装代理软件
首先在光盘找到调试代理目录,安装并口驱动。
出现如下界面:
选择install,出现如下界面,说明驱动安装成功了。
然后开始打开该目录下的arm7.exe。
如果jtag接口没有连接好,或者arm开发板没有上电,就会出现如下界面:
否则,成功的话就出现成功检测到arm内核界面
然后开始配置ads开发环境
打开AXD程序,选择OptionsConfigueTarget
在Choosetarget里面选择ADP,然后d点击Configue,出现
点击Select,出现
选择ARMethernetdriver,确认OK,回到界面
点击Configure,出现
在TargetIPaddress框填入:
127.0.0.1,然后OK就可以了。
这时候,如果你没有打开调试代理软件,AXD会出现失败。
因此,必须先打开调试代理软件,然后运行AXD才能正常。
打开一个现有的源程序,并且运行
启动CodeWarriorforarmdevelopsuite
在file下选择一个现有文件。
对本例子而言,将光盘的实验程序全部拷贝到C盘,选择c:
\实验目录下的BeeP文件夹,打开BeepCProject,工程将出现在主界面下,在BeepCProject下有个调试选项:
Debug,DebugRel,Release.它们分别对应在RAM里面运行程序,在flash里面运行程序。
其实不同仅仅在于debugsetting的配置上面。
这里选择Debug,也就是在ram里面运行程序,这时源程序自动编译。
查看调试代理目前是否正常运行。
在Project里面选择Debug,这时候AXD将自动运行,并停在当前指令入口处。
也就是复位后的地址处。
对于LPC2132而言,停留在0x40000000处,这里放的是LDRPC,Reset_Addr,也就是管理模式下的第一条指令。
然后run,这时候程序应该开始执行,然后自动停在main()函数地方。
假如没有停在这里,请在AXD的File下面选择reloadcurrentimage,重复上述过程,这时就停在Main()上了。
接着Run,程序运行,观察蜂鸣器应该连续发声。
万龙LPC2132串口写程序步骤
LPC2132的flash可以通过2种方式写入:
IAP以及ISP。
对于初学者我们推荐采用ISP写。
在介绍以下方法前,我们认为您已经安装好ADS开发环境。
配置Codewarrier
1.1. 因为写入必须采用hex格式,首先设置hex输出文件
selectcodewarrieredit-->debugrelsettings
如上图:
postlink选择armfromelf
在armlinker选择scatter..\SYSTEM\debug_in_flash.scf
在option
imageentrypoint选0x0
在LINKERarmfromelfoutputformat选intel32bithex
在outputfilename填上最终目标hex文件例如:
c:
\abc.hex
然后保存,编译工程。
看看:
c:
\abc.hex是否成功
安装philiplpc2000flashutility
连接电脑串口与开发板
开发板上电
设置philiplpc2000flashutility
selectdevicelpc2132
XTAL11059.2
Uaudrate9600
短路开发板跳线器J6
选择ReaddeviceID提示复位开发板
按一下开发板RST键,松开,点确定
这时候partid和bootloaderid应该出来,说明正常
然后在flashprogramming的filename选择你所要写的程序abc.hex(必须采用hex格式)
执行uploadtoflash下载结束后执行compareflash显示compareok说明正常。
断开跳线器J6。
按RST程序应该独立运行
第三章 开发板硬件原理介绍
了解原理图以前,请先熟悉LPC2132CPU光盘内有LPC2132的datasheet。
注意:
CPU所有的引脚全部引出,因此CPU所有功能都可以使用,以下介绍的是开发板接的外部设备,包括以下几个部分:
供电电源,CPU,串行通信,复位电路,键盘电路,PWM电机驱动,SPI数码管部分,JTAG接口部分,I2CEEROM部分,BEEP以及LED部分,模拟输入。
在学习以下内容时请对照原理图。
元器件资料光盘里有
电源
LPC2132采用单电源供电,供电3.3V。
由于电路板上某些设备采用5V供电,因此输入电源首先经过7805稳压形成5v电压,然后送给AS1117-3.3低压差稳压电路,产生3.3v供CPU使用。
CPU部分
●● CPU晶体振荡器采用11.0592CPU内部可以倍频至60M
●● 实时时钟采用32.768K的晶体振荡器,其供电电源独立,通过外接的纽扣电池供电,因此开发板断电不会对内部的万年历有影响。
●● CPU的模拟地和数字地分开,有利于保证a/d转换的精度。
片内的A/D转换精度10位,如果需要14位转换精度,可以采用TLC2543我们对购买的用户提供代码以及接口资料。
●● CPU管脚许多是功能复用的,在作GPIO输出功能时候不需要外接上拉电阻,由于引脚在输入模式下为高阻抗,因此对一些输入脚加上拉电阻保证其处于确定的状态,防止不确定的信号引入。
RS232通信
RS232通信有2路,通过MAX232将3.3v电平转换为RS232电平。
由于MAX232适合用在5v的TTL电平场合,因此我们通过分压让其适合3.3v场合。
本机RS232最高工作频率115200bps。
如果需要在工业场合用通信,建议直接采用RS485通信[需要重布电路板],也可以在目前的RS232输出外接RS232/RS485通信转换模块,效果相同。
8段数码管
开发板上一共4个8段共阳数码管。
采用轮巡的方式动态扫描,每个发光管点亮时间大约20ms..74HC595是串并变换电路,SPI总线的数据在74HC595时钟作用下串行输入,变换为并行8位输出,控制数码管段信号。
键盘
键盘键数量不多,没有采用动态扫描,直接通过GPIO采样。
上拉电阻是为了保证按键信号处于确定状态,而100ome的串联电阻为了防止用户自己编程序将这些引脚设置为高电平的时候,同时按下键而烧毁CPU管脚。
液晶接口
采用的LCD有2种接口方式,SPI接口以及并行接口。
这里采用SPI接口,液晶背光通过开关管由CPU控制,液晶对比度调节通过电路板上黄色的可调电阻调节,出厂前已经调好,请不要自行调节。
液晶的编程说明书见光盘资料。
串行EEROM
采用I2c接口,存储器可能为24c04,24c02,24c01不同的开发板焊接的型号不同。
I2c地址分为设备号码,内部地址号。
内部地址号由2部分组成:
器件地址以及寄存器地址,详细请察看24c04说明书。
JTAG调试接口
Jtag接口的RTCK必须接一个下拉电阻,用来允许JTAG调试。
RTC部分
内部的实时时钟外接32.768kcrystal。
早先的LPC2100系列没有后备电源,调电后时间就丢失,而这款CPU考虑到这个问题,外加了电池供电,至少3年时间没问题。
A/D转换部分
A/D转换10位精度,通过电位器输入,范围0-3.3V,如果用户需要14位分辨率,可以采用TLC2543,我们可以提供接口以及程序。
PWM输出
PWM输出控制马达运行,占空比越大,输出平均电压越高,马达转得也越快。
为了防止开关管关闭的时候电机线圈反向电压多高击穿开关管,在电机并联了续流二极管。
另外,由于电机直接用3.3v电源供电,为了防止全速启动的开始阶段启动电流太大,影响CPU的正常工作,串联了10ome的电阻。
复位电路
可以采用专用复位电路,比如max708但价格贵,这里采用自行设计的复位电路,实际效果不错。
RST为低电平复位,正常工作的时候必须为高电平,当开发板发发生瞬间掉电的时候,电解电容通过二极管快速放电,当重新上电的时候,通过10K的电阻向电解电容充电,达到延迟复位,保证电压正常后CPU程序开始运行,否则可能会跑飞程序。
第四章 实验程序
各种实验在光盘的源代码里面都包含了,这里详细介绍DEMO程序,其余的程序请读者自行分析运行。
可以在我们程序的基础上改动称为你自己的应用。
所有的C程序都分为2个部分:
初始化启动代码以及应用程序。
由于启动代码我们已经做好,因此,用户只需要关心应用程序的编写。
不过,为了全方位掌握arm,建议了解启动代码。
启动代码
如果你的程序全部用汇编语言,启动代码就不需要,只需要对系统初始化,这和用单片机汇编开发类似。
但如果需要用C编写程序,必须提供启动代码。
也许有些人觉得奇怪,为什么用KeilC51不用写任何启动代码,但在ARM下编程序确要写?
这是因为arm公司自己不生产CPU只出售芯片技术,许多公司扩充arm内核,形成具有各自特色的arm处理器。
例如:
ROM,RAM的地址安排都各不一样,片内外设也各不相同。
而51的启动代码已经在Keilc51里集成用户不需要自己另外再写。
你可能会问:
为什么一定要用汇编写启动代码而不能直接用C语言来初始化?
因为C语言在工作以前必须初始化一些C语言的库,例如:
为C程序分配栈空间。
当这些基本项目没有初始化的时候,C语言的程序是无法工作的。
虽然C语言最终被编译器编译为汇编代码,但只有基本的设置完成,这些代码才能正常运行,arm的编译器不会做这些初始化。
编写启动代码需要有如下的预备知识:
●● 了解arm异常的种类
●● 了解各种异常对应的堆栈分配方法
●● 了解CPSR和SPSR
●● 了解汇编程序与C程序的调用
●● 了解ADS编译器相关的一些知识
●● 了解某些系统相关的外设设置
启动代码的编写可谓千变万化,即使同一型号的CPU启动代码也
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 开发 使用手册
![提示](https://static.bdocx.com/images/bang_tan.gif)