导航

【笔记】ARM Cortex-M0从这里开始

page 标注书本

pdf 标注(E:\kpan\Desktop\LPC\LPC1200_um_en.pdf )

page21

1.AHB  Home Address Block,内部地址块

2.CC2530 f256 f256的意思是Flash配置为256KB.

 

page29

1.NVIC(Nested Vectored Interrupt Controller 嵌套矢量中断控制器

 

pdf8

1. Fig 2. LPC122x memory map 内存映射关系.

2013年3月26日 23:56:24


http://www.zlgmcu.com/nxp/lpc1000/lpc1200.asp周立功单片机

LPC12XX系列ARM特性

LPC1200系列ARM是基于Cortex-M0内核的微控制器,具有高集成度和低功耗等特性,可用于嵌入式应用。Cortex-M0是第二代ARM内核,它可为系统提供更高的性能,如增强的调试特性和更高密度的集成。基于Cortex-M0的优势,LPC1200可在相似应用中实现更低的平均功耗。

    LPC1200系列Cortex-M0微控制器可在高达45MHz的CPU频率下运行,包含高达128KB片内Flash存储器和8KB数据存储器。较小的512字节Flash擦除扇区带来了多种设计上的好处,如更精细的EEPROM仿真,支持从任意串行接口启动加载,减少了对RAM缓存容量的要求,从而为现场编程带来便利。

    LPC1200系列Cortex-M0微控制器的外设组件包括一个10位ADC(8通道)、两个带有输出反馈的模拟比较器、两个UART接口、一个SSP/SPI接口、一个带有快速模式的I2C接口、一个看门狗定时器、一个DMA控制器、一个CRC计算及校验模块、四个通用定时器、一个32位RTC和多达55个通用I/O引脚。

    LPC12D00系列Cortex-M0微控制器:LPC12D27可驱动静态或复合LCD(高达4个背极和40段)可以很容易的级联多个LCD驱动器,最多驱动2560段,可应用在大型显示场合。

    特性
  • 处理器内核
    • ARM Cortex-M0内核,运行速度高达45MHz
    • 内置嵌套向量中断控制器(NVIC)
    • SWD调试接口
    • 系统节拍定时器
  • 片内存储器
    • 高达8kB SRAM
    • 高达128kB片内Flash存储器
    • 可通过片内引导装载程序软件实现在系统编程(ISP)和在应用编程(IAP)功能
  • 时钟产生单元
    • 晶体振荡器工作频率1MHz~25MHz
    • 12MHz的内部RC振荡器精度为1%,可选择作为系统时钟
    • PLL允许CPU在最大CPU速率下工作,而无需高频晶振,可从主振荡器、内部RC振荡器或看门狗振荡器运行
    • 时钟输出功能可反映主振荡器时钟、IRC时钟、CPU时钟和看门狗时钟
    • 实时时钟(RTC)
  • 电源
    • 3.3V单电源供电(2.0V~3.6V)
    • 具有三种低功耗模式:睡眠模式、深度睡眠模式和深度掉电模式
    • 12个拥有专用中断的GPIO可将CPU从深度睡眠模式中唤醒
    • 掉电检测带三个独立阈值,每个阈值都可用于中断和强制复位
    • 上电复位(POR)
    • 集成了PMU(电源管理单元),可在睡眠、深度睡眠和深度掉电模式中极大限度地减少功耗
  • 数字外设
    • 21通道Micro DMA控制器
    • 硬件CRC计算及校验模块
    • 两个带有小数波特率发生器和内部FIFO的UART。其中UART0带RS-485并支持调制解调器,UART1为带IrDA的标准UART
    • SSP控制器,带FIFO和多协议功能
    • I2C总线接口,完全支持I2C总线规范和快速模式Plus,数据速率为1Mbit/s,具有多地址识别功能和监控模式
    • 4个可编程的大驱动电流(16mA)引脚
    • 多达55个通用I/O(GPIO)引脚,可编程为上拉、开漏模式,可编程的数字输入干扰滤波
    • GPIO均可配置为边沿或者电平中断
    • 四个通用定时/计数器,带有四个捕获输入和四个匹配输出(32位计时器)或两个捕获输入和两个匹配输出(16位计时器)
    • 窗看门狗定时器
    • 4×40段LCD驱动(LPC12D27)
  • 模拟外设
    • 一个8通道10位ADC
    • 两个高度灵活的模拟比较器,模拟比较器的输出可以编程为定时器的匹配信号,也可模拟555定时器
  • 封装
    • LQFP100、LQFP64和LQFP48封装

page50

1.工程建立和编程规范

(1) 文件存储管理

*System

*source

*project

*out

*GPIO

*DOC

*Core

(2)实际工程窗口:

image

(3)代码分类

  • H头文件:引脚定义,宏定义,全局变量,内部函数,外部函数.
  • C文件中:尽量与硬件无关,只存放变量和代码
  • 变量的定义:使用宏或者是typedef

(4)编程规范

  • 注释://行后单行注释,/**/多行注释
  • 文件头:a.文件名 b.版本. c参数 d.使用的工具 e.描述信息
  • 函数头格式: 函数名 描述 参数 返回值
  • 文件结束
  • 变量命名
  • 预编译 a宏定义 b数据类型typedef  c条件编译

page57

1.CMSIS

     ARM Cortex™ 微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard)

2.CMSIS分层

  • 核心外设访问层CPAL Core Peripheral Acess Layer

定义内部寄存器地址,功能函数(内部寄存器,NVIC,调试子系统的访问)

  • 中间件访问层MWAL Middleware Acess Layer

通用API

  • 设备访问层 DPAL Device Peripheral Acess Layer

定义 硬件寄存器的地址,对外设的访问函数,

3.CMSIS规范

image

  • stdin.h 包含了对8,16,32位等数据的指示符定义,用来屏蔽不同编译器的差异
  • core_cm0.h和core_cm0.c 包含了Cortex-Mx的全局变量的声明和 定义了一些静态功能函数
  • system_LPC12xx.h和system_LPC12xx.c 定义的是
    • 系统初始化函数
    • 系统时钟的定义
    • 时钟变量

image

image

image

image

 

(1)工具链

CMSIS支持三大主流工具链:MDK,IAR,CNU,在core_cm0.c中的定义来屏蔽一些编译器的内置的关键字的差异:

image

   1: #include <stdint.h>
   2:  
   3: /* define compiler specific symbols */
   4: #if defined ( __CC_ARM   )
   5:   #define __ASM            __asm                                      /*!< asm keyword for ARM Compiler          */
   6:   #define __INLINE         __inline                                   /*!< inline keyword for ARM Compiler       */
   7:  
   8: #elif defined ( __ICCARM__ )
   9:   #define __ASM           __asm                                       /*!< asm keyword for IAR Compiler          */
  10:   #define __INLINE        inline                                      /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */
  11:  
  12: #elif defined   (  __GNUC__  )
  13:   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
  14:   #define __INLINE         inline                                     /*!< inline keyword for GNU Compiler       */
  15:  
  16: #elif defined   (  __TASKING__  )
  17:   #define __ASM            __asm                                      /*!< asm keyword for TASKING Compiler      */
  18:   #define __INLINE         inline                                     /*!< inline keyword for TASKING Compiler   */
  19:  
  20: #endif

(2)中断异常

  • 系统异常 负数
  • 设备异常 从0开始

异常和中断标识符必须加上后缀_IRQn

中断在LPC12xx.h中定义:

e:\documents\program\gatewayt0928\lpc12xx\lpc12xx.h

 

   1: typedef enum IRQn
   2: {
   3: /******  Cortex-M0 Processor Exceptions Numbers ***************************************************/
   4:   NonMaskableInt_IRQn           = -14,    /*!< 2 Non Maskable Interrupt                           */
   5:   HardFault_IRQn                = -13,    /*!< 3 Cortex-M0 Hard Fault Interrupt                   */
   6:   SVCall_IRQn                   = -5,     /*!< 11 Cortex-M0 SV Call Interrupt                     */
   7:   PendSV_IRQn                   = -2,     /*!< 14 Cortex-M0 Pend SV Interrupt                     */
   8:   SysTick_IRQn                  = -1,     /*!< 15 Cortex-M0 System Tick Interrupt                 */
   9:  
  10: /******  LPC12xx Specific Interrupt Numbers *******************************************************/
  11:   WAKEUP0_IRQn                  = 0,        /*!< All I/O pins can be used as wakeup source.       */
  12:   WAKEUP1_IRQn                  = 1,        /*!< There are 12 pins in total for LPC12xx           */

posted on 2013-03-26 23:40  淅沥枫  阅读(3104)  评论(0编辑  收藏  举报