LPC2000系列Proteus仿真+代码 菜鸟的ARM学习笔记

2019-10-12来源: eefocus关键字:LPC2000系列  Proteus仿真  ARM

下面就是我学习ARM的第一阶段的记录,这段时间的学习基本上是使用Proteus配合KEIL做简单的实验(最后有实验的目录以及下载地址)。通过该阶段的学习,算是对ARM的基本结构有了了解。


该阶段主要学习资料是《基于PROTEUS的ARM虚拟开发技术》,以及另外一本ARM体系结构的书籍,感觉这类书都差不多。


学习ARM前需要的基础

  • 前辈学习ARM的经验! (我是在嵌入式开发联盟的新人区看的帖子。)

  • 掌握C语言编程。

  • 了解简单的微机算计原理知识,例如二进制,计算机程序的执行过程,总线(数据、地址、控制),软件系统(系统软件与应用软件)。

  • 听说过RISC与CISC,高级语言与低级语言的区别。

  • 最好听说过串行传输与并行传输。

  • 普林斯顿(ARM7)和哈佛结构(ARM9、10、11—)。


什么是ARM?

学ARM,自然要理解ARM是什么,也好明确学习目标。网上的资料很多,“ARM是一家公司,也是一个处理器体系”……我将学ARM分为以下几类:

  • 做ARM的核心研发。也就是进ARM公司做IP核,应该是学电子之类的东西吧。

  • 买ARM的IP核,做具体的嵌入式处理器、核心板,例如三星和NXP。

  • 买ARM核心板,连接外围电路制作教育用或开发用的开发板,或者直接开发其它中断产品。

  • 买ARM开发板做产品,要做系统软件和应用软件。


3和4基本并列了。

ARM基础

任何一本介绍ARM体系结构书籍都应该有这些内容。

处理器模式

用户模式、特权模式又分为系统模式、管理模式、快中断模式、中断模式、终止模式、未定义指令终止模式。


2. 寄存器

R0-R7、R15和CPSR是所有模式共享的。
R8-R12出快中断模式有RX-fiq外所有模式共享。
R13、R14和SPSR只有用户模式和系统模式共享,其它都有似有SPSR。

R15(PC)程序计数器
R16(CPSR)程序转台寄存器
R13(SP)堆栈指针
P14(LR)链接寄存器

ARM指令集 汇编程序设计

略了,我看了,但是做Proteus仿真实验没用上,两天就忘了。

LPC2000

我买的3本ARM入门书籍中有两本都是以LPC2000系列为例的,其实从网上可以下载到具体LPC2XXX处理器的datasheet,上面的资料是最权威和详尽的。

引脚选择

PINSEL0、PINSEL1设置各个引脚的功能。

中断

中断的寄存器太多了,没记。

GPIO

做输入输出。以P0口为例,寄存器有IO0PIN、IO0SET、IO0DIR、IO0CLR。

存储器

  • LPC2000可用地址为4GB,内部2GB(0~0x7FFFFFFF),外部2GB(0x80000000~0xDFFFFFFF),高0.5GB是I/O设备地址空间(0xE0000000~0xFFFFFFFF)。

  • 内部最低128KB或256KB为Flash。

  • 高1GB(0x40000000~0x7FFFFFFF)为SRAM。其中0x40000000~0x40001FFF为片内SRAM。

  • I/O部分,低2MB(0xE0000000~0xE001FFFFF)为VPB外设空间,高2MB(0xFFE00000~0xFFFFFFFF)为AHB外设空间。

  • FLASH加速模块。

MAMCR设置是否允许加速、MAMTIM设置预取处理器时钟。

时钟

cclk、pclk
分振荡器模式和从属模式,振荡器Fosc经PLL升频为cclk,cclk经过VPB分频后为pclk。
设置cclk
PLLCFG 设置PLL倍频M,PLL分频器值P
PLLCON PLL的允许与连接
PLLSTAT 读取PLL状态
PLLFEED 使PLL设置生效
例Fosc=12MHz,cclk=60MHz,则M=60/12-1=4,因为Fcco=P*cclk*2(要求156M~320MHz)。
设置pclk
由VPBDIV设置00为4分频、01为不分频、10为二分频。

定时器

pclk定时,定时器为32位,从0计数到0xFFFFFFFF。以T0为例
T0TC,计数器初值
T0PR,定时计数器分频,pclk/(PR+1)
T0MR0~3,匹配值,当计数带到时候,按照T0MCR的设置触发不同动作。
T0MCR,计数器到达匹配值的动作(复位、中断、停止)
T0EMR,外部匹配寄存器,到达匹配值时候外部引脚的操作(MAT0.0~3)
T0CCR,外部引脚有特定动作时候,计数值存入T0CR0~3,设置是否触发中断
T0CR0~3,在T0CCR控制下存TC值。
T0TCR,复位与使能
T0IR,对应MR与CR中断

PWM

看门狗

Pclk四分频后控看门狗的32为计数器减一。
WDTC,看门狗计数器初值。
WDMOD,看门狗工作模式,可以开启和复位看门狗。
WDFEED,喂狗寄存器。
WDTV,看门狗计数器当前值。

UART

引脚RxD0,TxD0
U0RBR,暂存接受数据。
U0THR,暂存发送数据。访问它时,U0LCR的DLAB位为0。
U0IER,串口个状态的中断允许。
U0IIR,中断标志。
U0FCR,控制UART的FIFO(暂时没明白)。
U0LCR,传输模式。
U0LSR,当前状态(错误指示)。
U0DLL、U0DLM,pclk/( U0DLL U0DLM),访问时UOLCR的DLAB位为1。

SPI

全双工同步串行接口
引脚:
SCK0,串行时钟。
SSEL0,从机选择。
MISO,主机输入,从机输出。
MOSI,主机输出,从机输入。
寄存器:
S0SPCR,SPI控制。
S0SPSR,SPI状态。
S0SPDR,SPI数据。
S0SPCCR,控制SCK的频率。必须为偶数且大于等于8。(指示一个SCK周期中的pclk周期)
S0SPINT,SPI中断。

I2C

引脚:SDA,SCL
寄存器:
I2CONSET
I2CONCLR
I2CON
上面三个寄存器控制应答标志位,中断标志、停止和起始以及I2C使能。
I2STAT,I2C状态。
I2DAT,I2C数据。
I2ADR,I2C从模式地址。
I2STAT,I2C状态。
I2SCLH,高电平占空比占pclk周期个数。
I2SCLL,低电平占空比占pclk周期个数。
分频fpclk/( I2SCLH+I2SCLL)。

AD转换

引脚:AIN0~3
寄存器:
ADCR,工作模式选择。
ADDR,转换数据以及标志的暂存。


1、LED闪烁——ARM的Proteus实验

实验原理

ARM(LPC21XX)的一个I/O口接LED,通过给它送0和1来设置LED的亮和灭。

Proteus仿真电路图

步骤

KEIL

  • 创建新工程

  • 选择ARM型号(KEIL会自动生成启动代码startup.s)

  • 添加源文件,编写程序

  • 设置项目选项(是否输出hex、lst文件,设置linker script)

Proteus

  • 绘制电路图

  • 载入程序

  • 仿真

C语言源程序

/******************************************************************************/
/*                                                                            */
/*               led.c:  用ARM点亮一个led并闪烁,有点浪费……                    */
/*                                                                            */
/******************************************************************************/
#include                         
/*******************************************************************************
**函数名: delay()
**描述: 软件延时
********************************************************************************/
void delay (void)  {                         
  unsigned volatile long i,j;
  for(i=0;i<60000;i++)
  for(j=0;j<5;j++)
  ;
}
int main(void) {
  PINSEL0 = 0;              /*设置引脚为GPIO */
  IO0DIR = 0x000001;              /*将P0.0设置为输出 */
  IO0SET = 0x000001;              /*将P0.0置1,也就是让led灭 */
  while (1)  {
                IO0CLR = 0x000001;
              delay();
                IO0SET = 0x000001;
              delay();
  }
}

2、开关控制LED——ARM的Proteus实验

实验原理

ARM的P0.1口接按钮,再通过P0.0控制LED的亮、灭。本实验的电路图以及实验均在上一个实验基础之上修改。其中电路图只多了一个开关。

Proteus仿真电路图

实验步骤略(与上一实验相同)

C语言源程序

/******************************************************************************/
/*                                                                            */
/*           led.c:  用ARM实现开关控制led并亮灭,还是有点浪费……                */
/*                                                                            */
/******************************************************************************/
#include
#define P0_1 0x02;                                                                     /*P0.1*/                        
/*******************************************************************************
**函数名: delay()
**描述: 软件延时
********************************************************************************/
void delay (void)  {                         
  unsigned volatile long i;
  for(i=0;i<10000;i++)
  ;
}
int main(void) {
  int p01State;
  PINSEL0 = 0;              /*设置引脚为GPIO */
  IO0DIR = 0x000001;              /*将P0.0设置为输出 */
  IO0SET = 0x000001;              /*将P0.0置1,也就是让led灭 */
  while (1)  {
    p01State = IO0PIN&P0_1;              /*读取开关状态*/
              if(p01State == 0){
                            IO0CLR = 0x000001;
                            delay();
              }
                else{
                            IO0SET = 0x000001;
                            delay();
              }               
  }
}

[1] [2] [3] [4] [5]
关键字:LPC2000系列  Proteus仿真  ARM 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic476946.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于ARM平台的钢琴游戏 实现琴键按下效果
下一篇:LPC2148像往U盘拷贝文件一样更新用户程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

LPC2000系列ARM芯片的电子琴的设计
1.用LPC2000系列ARM芯片设计电子琴,用proteus软件仿真。2.按下不同的按键,扬声器能够发出不同的音调。3.用PWM控制扬声器可以实现音调的条件。通过编程,利用按键去控制扬声器的发声。通过小组讨论分析,结合设计电路性能指标、器件的性价比,本设计电路选择方案二。硬件设计与介绍嵌入式的定义:从技术的角度定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语嵌入式反映了这些系统通常是更大系统中的一个完整的部分,称为嵌入的系统。嵌入的系统中可以共存多个
发表于 2019-10-12
LPC2000系列ARM芯片的电子琴的设计
LPC2200系列bootloader实现过程:
地址去,然后跳转到0x00010000地址,执行应用程序。基本原理都是这样,明白了原理,可以轻易的改为从网口,从SD卡,启动应用程序,整个移植的过程还算顺利,意想不到的顺利,我把 串门底层收发函数移植过之后,很快就能用了,不过我不满意的是“官方BOOT”的串口收发是一种阻塞方式,好象很落后了,我在 LPC1788上使用的是非阻塞的收发方式。不过官方的BOOT功能比较完善,还有几个命令,用着不错。用了半个月之后,突然发现了一个很隐蔽的问题,当我在LPC2294上加第二个网口的时候,不定时死机,单位跟踪也跟了,但是依然找 不到问题所在。在网上搜索了一下,发现有几个人遇到了类似的问题,“通过自定义的BOOTLOADER启动应用程序之后,不定时
发表于 2019-01-16
ARM7系列LPC2214芯片的调试报告
的大小等带来一个概念;基本结构下面是关于启动文件一个说明,模仿于UV3软件提供PHILIP 的LPC2000系列芯片的startup文件;在说明之前你有必要先熟悉ARM指令集,注意他的模块化的结构;VPBDIV、PLL、MAM、EMC、BCG0-3等的设置比较模式化,熟悉下datasheet说明后,比较容易设置好,要留意的就是PINSEL0-2的设置,根据自己的外部接口配置PINSEL。LPC2114启动代码的编写主要包括:    1.异常向量表的建立      2.MCU各种模式堆栈的初始化    3.系统基本的初始化工作    下面
发表于 2018-12-17
keil MDK启动文件分析---基于LPC2100系列
;;/*****************************************************************************/;/* STARTUP.S: Startup file for Philips LPC2000                              
发表于 2018-12-12
keil MDK启动文件分析---基于LPC2100系列
基于ARM7的高性能低功耗LPC2000系列微控制器应对嵌入式需求
突出特点      由于采用了ARM7TDMI-S内核,LPC2000系列MCU工作频率达60MHz,与其他8-bit产品相比具有更强的功能延展性。同时它借助片上存储器加  模块实现了“零等待访问”高速闪存功能,提高了指令执行的效率。此外,LPC2000的外设接口非常丰富,包括UART、SPI、I2C、CAN、ADC、 PWM、RTC等。LPC2000系列MCU应用领域非常广泛,从网络通信、  马达控制,到汽车和消费电子都适合于涉足。      嵌入式系统是面向用户、面向产品、面向应用的,它是将先进计算机技术、半导体技术和电子技术以及各
发表于 2018-04-02
基于ARM7的高性能低功耗LPC2000系列微控制器应对嵌入式需求
单片机国旗自动升降系统仿真及程序
lcd1602显示,正转翻转停止显示高度;这个是花了100元买的.基于51单片机做的国旗自动升降系统的proteus仿真原理图: 如果没有装KEIL软件找到  .c   .h结尾的文件即为程序。打开方式选择记事本打开或者到开发资料里安装KEIL软件单片机源程序如下:#include <reg52.h>                 //调用单片机头文件#define uchar unsigned char  //无符号字符型 宏定义     
发表于 2019-10-15
单片机国旗自动升降系统仿真及程序
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved