#ARM开发

ARM和系统移植为驱动开发学习做准备工作

C语言基础及STM32需要的硬件知识,学习流程、思想和解决问题的方法即可

知道驱动的基本框架以及基本开发要求

接口技术

GPIO:通用的输入输出接口(输入:上拉、下拉、浮空、模拟;输出:推挽/开漏)

本质:操作寄存器。使能:配置模式(输出)、输出类型(推挽)、输出速度(默认)、输出数据(相应位写1)。

串口通信协议:UART、IIC、SPI、CAN

电气协议:TTL、RS232、RS485

无线通信:WiFi、蓝牙、NB-IOT、Lora、zigbee

ADC:模数转换(需要得到外界真实数据)

PWM:脉冲宽度调制(用定时器调节平均功率)

MCU与MPU的区别

【三分钟了解什么是CPU_SOC_MPU和MCU】 三分钟了解什么是CPU_SOC_MPU和MCU_哔哩哔哩_bilibili

STM32G030(M0+) S5P6818(A53)

微控制单元(Microcontroller Unit;MCU) ,又称单片微型计算机或者单片机,是把中央处理器的频率与规格做适当缩减,并将内存、计数器(Timer)、USB、A/D转换、UART、、DMA等周边接口整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。

微处理器单元 (Microprocessor Unit;MPU)。就是把很多 CPU 集成在一起并行处理数据的芯片。通俗来说,MCU 集成了 RAM,ROM 等设备;MPU 则不集成这些设备,是高度集成的通用结构的中央处理器矩阵,也可以认为是去除了集成外设的 MCU。

传统来说,MPU更多采用Arm Cortex-A系列核心,具备丰富的外设接口,MCU则大多采用Arm Cortex-M系列核心,也比MPU更便宜,更容易安装和使用。主要区分是MMU。

更简单粗暴地划分二者的方式是运行Linux就是MPU,基于实时操作系统(RTOS)就是MCU。MCU的目的是永远运行一个相当简单的控制循环,或者直到它中断或停止。

随着技术和应用的发展,某些公司开始逐渐越界,界限开始模糊。

CPU运行原理

根据下载的程序运行,程序是指令和数据的有序集合

指令的解析

一条指令机器码的执行通常分为三个阶段:

1)取指:控制器将PC寄存器中的值发送给内存,内存将对应地址中的指令(机器码)传送回CPU的指令寄存器IR中

2)译码:指令译码器对IR中的指令进行识别,将指令(机器码)解析(翻译)成具体的运算操作(+/-/*...)

3)执行:控制器控制运算器中对应的运算单元进行运算,运算结果写入寄存器

注意:PC每取地址一次,自加一次。PC的值自动增加使PC指向内存中的下一条指令

思考:

1.运算器不同,处理指令不同。不同的处理器上如何运行同一个c语言程序?

2.假设指令集有乘法指令,结果并没有乘法运算器,怎么办?

可以转换为加法指令

指令流水线

指令的执行是按照流水线

取指--》取指器 根据PC值取指令

译码--》译码器

执行--》执行器

以上三个器件,都是单周期的器件,三个器件的工作是独立

指令1 指令2 指令3 指令4 指令5

1 取指

2 译码 取指

3 执行 译码 取指

4 执行 译码 取指

5 执行 译码 取指

6 执行 译码

7 执行

PC永远指向当前取指指令的地址,一旦取到指令,pc后移4byte,保存下一条指令地址。

指令流水线机制的引入确实能够大大的提升指令执行的速度,但在实际执行程序的过程中很多情况下流水线时是无法形成的,比如芯片刚上电的前两个周期、执行跳转指令后的两个周期等。

所以指令流水线的引入以及优化只能使平均指令周期不断的接近1而不可能真正的达到1,且流水线级数越多芯片设计的复杂,程度就越高,芯片的功耗就越高。

指令集架构

ARM的命名有指令集架构、 处理器架构、 处理器型号三类命名规则

架构指支持的汇编指令集(架构不同,汇编指令集不同)

ARM体系结构:ARMv8-A ---> Cortex-A53 --> S5P6818 主频:1.4GHZ

内核:Cortex-A9,A53,A73,A75

ARM公司授权芯片的公司,芯片产家在内核的基础上,增加了一些外设,发布一款芯片,这些芯片可以统称为SoC

SoC:System of Chip(片上系统);例如:S5P6818,骁龙(高通),麒麟(海思)

s5p6818(8核)

ARM的工作模式(A系列)

  1. 用户模式(User ):非特权模式,用户程序的工作模式,运行在操作系统的用户态。它没有权限去操作其他硬件资源,只能执行处理用户自己的数据,并且不能切换到其他模式。要访问硬件资源或切换到其他模式,只能通过软中断或产生异常。
  2. 快速中断模式(FIQ ):当一个高优先级(fast) 中断产生时将会进入这种模式。它主要用于高速数据处理及通道处理。
  3. 中断模式(IRQ):当一个低优先级(normal) 中断产生时将会进入这种模式。硬件产生中断信号后,处理器会自动进入这种模式。
  4. 管理模式/SVC(Supervisor):当复位或软中断指令执行时将会进入这种模式,当用户模式下的用户程序请求使用硬件资源时,通过软件中断可以进入该模式。
  5. 中止模式(Abort) :用于支持虚拟内存或存储器保护。当用户程序访问非法地址或没有权限读取的内存地址时,会进入该模式。
  6. 未定义模式(Undef):当执行未定义指令时ARM会进入这种模式
  7. 系统模式(System特权模式之一,提供给操作系统内核使用。可以访问更多的寄存器和特权指令,用于执行特权级别的操作和管理系统资源。
  8. 监控模式(Monitor) : 是为了安全而扩展出的用于执行安全监控代码的模式。也是一种特权模式(Cortex-A特有模式)

工作模式的理解

不同的模式拥有不同的权限

不同的模式执行的代码不同

不同的模式拥有不同的功能

特定的模式拥有特定的权限,执行特定的代码,完成特定的功能

ARM寄存器

工作模式的切换是依据寄存器去实现的。

ARM7,9,11 有37个寄存器

30 个通用寄存器

1 个用作 PC( program counter)

1个用作CPSR(current program status register)

5个用作SPSR(saved program status registers)

Cortex-A多出3个寄存器,即有40个寄存器

Monitor 模式r13_mon , r14_mon, spsr_mon

R0-R15, CPSR,SPSR 这些寄存器是由ARM公司提供,每个寄存器都是32位的。

这些寄存器没有地址,只有一个唯一的编号,通过这些编号,就可以访问对应的地址空间。R0-R15,cpsr,spsr就是对应的编号,每个编号都对应的32位二进制

专用寄存器

R13(SP,Stack Pointer)

栈指针,用于存储当前模式下的栈顶地址

R14(LR,Link Register)

链接寄存器:函数调用时,保存返回地址(下一条地址的指令的地址

R15(PC,Program Counter)

程序计数器:用于存储当前取址指令的地址(下一条指令的地址

CPSR寄存器

CPSR(Current Program Status Register),程序状态寄存器

存储当前程序运行状态

NZCV这几位叫条件位,后边八位叫控制位(C表示)

Bit[4:0]

[10000]User [10001]FIQ [10010]IRQ [10011]SVC

[10111]Abort [11011]Undef [11111]System [10110]Monitor

Bit[5]

[0]ARM状态 [1]Thumb状态

Bit[6]

[0]开启FIQ [1]禁止FIQ

Bit[7]

[0]开启IRQ [1]禁止IRQ

Bit[28]

> 当运算器中进行加法运算且产生符号位进位时该位自动置1,否则为0

> 当运算器中进行减法运算且产生符号位借位时该位自动置0,否则为1

Bit[29]

> 当运算器中进行加法运算且产生进位时该位自动置1,否则为0

> 当运算器中进行减法运算且产生借位时该位自动置0,否则为1

Bit[30]

当运算器中产生了0的结果该位自动置1,否则为0

Bit[31]

当运算器中产生了负数的结果该位自动置1,否则为0

SPSR寄存器

SPSR:保存程序状态的寄存器saved program status register)

用于保存CPSR(通用寄存器,在切换模式的时候用)

ARM的异常处理

异常

处理器在正常执行过程中可能遇到一些不正常的事件发生,这时处理器就要将当前程序暂停下来转而去执行这个异常事件,异常事件处理完之后返回被异常打断的地方继续执行。

ARM异常源

概念:导致异常产生的事件称为异常源

ARM异常源

FIQ

快速中断请求引脚有效

IRQ

外部中断请求引脚有效

Reset

复位电平有效

Software Interrupt

执行swi指令

Data Abort

数据终止

目录 第1 章 ARM 微处理器概述 5 1.1 ARM-Advanced RISC Machines 5 1.2 ARM 微处理器的应用领域及特点 5 1.2.1 ARM 微处理器的应用领域 5 1.2.2 ARM 微处理器的特点 6 1.3 ARM 微处理器系列 6 1.3.1 ARM7 微处理器系列 6 1.3.2 ARM9 微处理器系列 7 1.3.3 ARM9E 微处理器系列 7 1.3.4 ARM10E 微处理器系列 7 1.3.5 SecurCore 微处理器系列 8 1.3.6 StrongARM 微处理器系列 8 1.3.7 Xscale 处理器 8 1.4 ARM 微处理器结构 8 1.4.1 RISC 体系结构 8 1.4.2 ARM 微处理器的寄存器结构 9 1.4.3 ARM 微处理器的指令结构 9 1.5 ARM 微处理器的应用选型 10 1.6 本章小节 10 第2 章 ARM 微处理器的编程模型 11 2.1 ARM 微处理器的工作状态 11 2.2 ARM 体系结构的存储器格式 11 2.3 指令长度及数据类型 12 2.4 处理器模式 12 2.5 寄存器组织 13 2.5.1 ARM 状态下的寄存器组织 13 2.5.2 Thumb 状态下的寄存器组织 15 2.5.3 程序状态寄存器 16 2.6 异常(Exceptions) 18 2.6.1 ARM 体系结构所支持的异常类型 18 2.6.2 对异常的响应 18 2.6.3 从异常返回 19 2.6.4 各类异常的具体描述 19 2.6.5 异常进入/退出小节 20 2.6.6 异常向量(Exception Vectors) 20 2.6.7 异常优先级(Exception Priorities) 21 2.6.8 应用程序中的异常处理 21 2.7 本章小节 21 ARM 应用系统开发详解──基于S3C4510B 的系统设计 2 第3 章 ARM 微处理器的指令系统 22 3.1 ARM 微处理器的指令集概述 22 3.1.1 ARM 微处理器的指令的分类与格式 22 3.1.2 指令的条件域 23 3.2 ARM 指令的寻址方式 23 3.2.1 立即寻址 24 3.2.2 寄存器寻址 24 3.2.2 寄存器间接寻址 24 3.2.3 基址变址寻址 24 3.2.4 多寄存器寻址 25 3.2.5 相对寻址 25 3.2.6 堆栈寻址 25 3.3 ARM 指令集 25 3.3.1 跳转指令 25 3.3.2 数据处理指令 26 3.3.3 乘法指令与乘加指令 30 3.3.4 程序状态寄存器访问指令 32 3.3.5 加载/存储指令 32 3.3.6 批量数据加载/存储指令 34 3.3.7 数据交换指令 35 3.3.8 移位指令(操作) 35 3.3.9 协处理器指令 36 3.3.10 异常产生指令 38 3.4 Thumb 指令及应用 38 3.5 本章小节 39 第4 章 ARM 程序设计基础 40 4.1 ARM 汇编器所支持的伪指令 40 4.1.1 符号定义(Symbol Definition)伪指令 40 4.1.2 数据定义(Data Definition)伪指令 41 4.1.3 汇编控制(Assembly Control)伪指令 43 4.1.4 其他常用的伪指令 45 4.2 汇编语言的语句格式 48 4.2.1 在汇编语言程序中常用的符号 49 4.2.2 汇编语言程序中的表达式和运算符 49 4.3 汇编语言的程序结构 52 4.3.1 汇编语言的程序结构 52 4.3.2 汇编语言的子程序调用 52 4.3.3 汇编语言程序示例 53 4.3.4 汇编语言与C/C++的混合编程 55 4.4 本章小节 56 第5 章 应用系统设计与调试 57 ARM 应用系统开发详解──基于S3C4510B 的系统设计 3 5.1 系统设计概述 57 5.2 S3C4510B 概述 58 5.2.1 S3C4510B 及片内外围简介 58 5.2.2 S3C4510B 的引脚分布及信号描述 61 5.2.3 CPU 内核概述及特殊功能寄存器(Special Registers) 67 5.2.4 S3C4510B 的系统管理器(System Manager) 72 5.3 系统的硬件选型与单元电路设计 82 5.3.1 S3C4510B 芯片及引脚分析 82 5.3.2 电源电路 83 5.3.3 晶振电路与复位电路 83 5.3.4 Flash 存储器接口电路 85 5.3.5 SDRAM 接口电路 89 5.3.6 串行接口电路 93 5.3.7 IIC 接口电路 94 5.3.8 JTAG 接口电路 95 5.3.9 10M/100M 以太网接口电路 96 5.3.10 通用I/O 接口电路 100 5.4 硬件系统的调试 101 5.4.1 电源、晶振及复位电路 101 5.4.2 S3C4510B 及JTAG 接口电路 102 5.4.3 SDRAM 接口电路的调试 103 5.4.4 Flash 接口电路的调试 105 5.4.5 10M/100M 以太网接口电路 105 5.5 印刷电路板的设计注意事项 105 5.5.1 电源质量与分配 105 5.5.2 同类型信号线的分布 106 5.6 本章小节 106 第6 章 部件工作原理与编程示例 107 6.1 嵌入式系统的程序设计方法 107 6.2 部件工作原理与编程示例 108 6.2.1 通用I/O 口工作原理与编程示例 108 6.2.2 串行通讯工作原理与编程示例 111 6.2.3 中断控制器工作原理与编程示例 120 6.2.4 定时器工作原理与编程示例 123 6.2.5 GDMA 工作原理与编程示例 127 6.2.6 IIC 总线控制器工作原理 133 6.2.7 以太网控制器工作原理 138 主要特性 139 MAC 功能模块 140 带缓冲DMA 接口(Buffered DMA Interface) 144 以太网控制器特殊功能寄存器(Ethernet Controller Special Registers) 147 MAC 寄存器(Media Access Control(MAC)Register) 154 以太网控制器的操作(Ethernet Controller Operation) 160 发送一个帧(Transmitting a Frame) 162 ARM 应用系统开发详解──基于S3C4510B 的系统设计 4 接收一个帧(Receiving a Frame) 162 6.2.8 Flash 存储器工作原理与编程示例 162 6.3 BootLoader 简介 167 6.4 本章小节 167 第7 章 嵌入式uClinux 及其应用开发 168 7.1 嵌入式uClinux 系统概况 168 7.2 开发工具GNU 的使用 170 7.2.1 GCC 编译器 170 7.2.2 GNU Make 172 7.2.3 使用GDB 调试程序 177 7.3 建立uClinux 开发环境 180 7.3.1 建立交叉编译器 181 7.3.2 uClinux 针对硬件的改动 184 7.3.3 编译uClinux 内核 185 7.3.4 内核的加载运行 187 7.4 在uClinux 下开发应用程序 188 7.4.1 串行通信 190 7.4.2 socket 编程 195 7.4 .3 添加用户应用程序到uClinux 202 7.4.4 通过网络添加应用程序到目标系统 205 7.5 本章小结 207 第8 章ARM ADS 集成开发环境的使用 209 8.1 ADS 集成开发环境组成介绍 209 8.1.1 命令行开发工具 209 8.1.2 ARM 运行时库 218 8.1.3 GUI 开发环境(Code Warrior 和AXD) 219 8.1.4 实用程序 221 8.1.5 支持的软件 221 8.2 使用ADS 创建工程 222 8.2.1 建立一个工程 222 8.2.2 编译和链接工程 225 8.2.3 使用命令行工具编译应用程序 229 8.3 用AXD 进行代码调试 230 8.4 本章小结 233
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值