ARM-Cortex_M3/M4处理器开发简介

一、关于ARM-Cortex_M4处理器

ARM-Cortex_M3和ARM-Cortex_M4处理器使用32位架构,寄存器组中的内部寄存器、数据通路以及总线接口都是32位的,两者均基于ARMv7-M架构。

1、 Cortex_M处理器使用的指令集架构(ISA)为Thumb ISA,其基于Thumb-2技术并同时支持16位和32位指令。

2、ARM-Cortex_M3和ARM-Cortex_M4处理器特点:

①三级流水线设计

②哈佛总线架构,具有统一的存储器空间:指令和地址总线使用相同的地址空间。

③32位寻址,支持4GB存储器空间。

④具有NVIC(嵌套向量中断控制器)的中断控制器。

⑤支持可选MPU(存储器保护单元)

⑥可选的浮点指令(单精度)

3、ARM微控制器的构成:

处理器、程序存储器(如FLASH)、SRAM、外设、内部总线、时钟生成逻辑(包括锁相环)、复位生成器及这些信号的分布网络、电压调节和电源控制器回路、其它模拟部件(ADC/DAC等)、I/O部分等。

处理器只占芯片中的一小块区域,以下为微控制器的多个模块。

二、ARM-Cortex_M3/M4处理器开发

(一)开始需要准备什么

  1. 开发组件(keil微控制器开发套件 MDK-ARM)
  2. 开发板
  3. 调试适配器
  4. 软件设备驱动
  5. 示例和代码
  6. 文档及其他(用户手册、数据手册以及应用笔记)
  7. 其他硬件(逻辑分析仪、示波器、usb分析仪、万用表等)

(二)软件开发流程:

  1. 创建工程
  2. 添加文件到工程
  3. 设置工程选项
  4. 编译和链接
  5. flash编程
  6. 执行程序和调试

常见的软件开发流程

(三)软件流程

  1. 轮询

轮询方式的简单处理应用

对于简单的任务,处理器可以等待数据准备好后进行处理,而后再等待。

2、中断驱动

外设在需要服务时可以将处理器唤醒。在中断驱动的应用中,不同外设的中断可以指定为不同的中断优先级。

简单的中断驱动应用

一般情况下,外设服务的数据处理分为两部分,一部分是需要快速处理,而一部分则可以执行得稍微慢一些。这时可以将中断驱动和轮询结合起来。

3、多任务系统

实时操作系统(RTOS)可以用于处理任务调度。RTOS可以将处理器时间分为多个时间片且将时间片分给所需的进程,以实现多个进程同时执行。需要一个定时器来记录RTOS的时间,且在每个时间片的最后,定时器会产生定时中断,它会触发任务调度器且确定是否要执行上下文切换。若需要执行,当前正在执行的任务就会被暂停,处理器转而执行另一个任务。

RTOS还具有信号量和消息传递的特性。

三、C程序中的数据类型

四、输入、输出和外设访问

微控制器都有多个I/O接口和定时器、实时时钟(RTC)等外设。ARM-Cortex-M3 andM4 除了GPIO/SPI/UART/I2C等常见的接口外设,还有许多高级接口外设,如USB/CAN/以太网及ADC/DAC等模拟接口,需要度微控制器提供的用户手册才能知道用法。

对于这些微控制器,外设经过了存储器映射,也就是寄存器可以从系统存储器映射中访问。为了用C程序访问这些外设,可以使用指针。

一般来说,外设在使用前需要初始化,一般包括以下几个步骤:

  1. 若需要,设置时钟控制回路使能连接到外设和对应引脚的时钟。(外设时钟一般是默认关闭的。需要在使用外设的时候使能时钟;有时,还需要使能外设总线系统的时钟。)
  2. 有时,还需要配置I/O引脚的操作模式。大多微控制器都有复用的I/O引脚。比如:配置引脚的输出、输入方向,功能。有时还需要编程其它的配置寄存器,定义输出类型等预想的电气特性(电压、上拉、下拉、开漏或推挽等)
  3. 外设配置
  4. 中断配置(需要中断操作,需在中断控制器NVIC ,使能中断和配置中断优先级)

需要设置各种外设模块中的外设寄存器。

微控制器接口:

USB转UART可以printf,使用串口工具。

五、Cortex 微控制器软件接口标准(CMSIS)

CMSIS-core的组织架构:

CMSIS文件被集成在微控制器供应商提供的设备驱动库软件包里。一般CMSIS定义为三层:

  1. 内核外设访问层 :内核寄存器 和内和外设的辅助函数,地址定义等
  2. 设备外设访问层:外设寄存器的地址定义及中断分配、异常向量定义
  3. 外设访问函数

参考资料:ARM-Cortex_M3与Cortex_M4权威指南

相关推荐
冷眼看人间恩怨6 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
Hejjon11 小时前
SpringBoot 整合 SQLite 数据库
笔记
西洼工作室14 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
初学者7.14 小时前
Webpack学习笔记(2)
笔记·学习·webpack
新手上路狂踩坑15 小时前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
stm 学习ing16 小时前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl
尘觉17 小时前
算法的学习笔记—扑克牌顺子(牛客JZ61)
数据结构·笔记·学习·算法
bohu8317 小时前
sentinel学习笔记1-为什么需要服务降级
笔记·学习·sentinel·滑动窗口
初学者7.18 小时前
Webpack学习笔记(3)
笔记·学习·webpack
bohu8319 小时前
sentinel学习笔记5-资源指标数据统计
笔记·sentinel·statisticslot