IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM体系结构及接口技术 -> 正文阅读

[嵌入式]ARM体系结构及接口技术

【1】ARM体系结构及接口技术---课程的安排(8.5天)

1. ARM体系结构---》 理论 (2.5天)
    1> ARM相关的概念  --->  1天
    2> ARM的汇编指令集  ---> 1.5天
?
2. 接口技术  ---> 各种硬件的驱动实验 (6天)
    1> LED灯实验(点灯大法) ? 汇编  /  C语言
            A7核点灯 ? ?  M4核点灯
?
    2> uart串口实验(PC通信)
            A7核uart ? ?  M4核uart
    
    3. PWM实验 (蜂鸣器/风扇/马达)
            A7核pwm ? ?  M4核pwm
    
    4. 按键中断实验(按键/人体红外传感器/火焰传感器/光电开关传感器/定时器)
            A7核中断 ? ? M4核中断
    
    5. IIC实验(温湿度传感器/环境光和接近传感器/血氧饱和度和脉搏传感器)
    
    6. SPI实验(数码管)
        
    综合练习:
3. stm32mp157a ? ---> 异构核 ? 
    cortex-A7*2  ---> 运行linux系统
        u-boot版本---》 2021.07 ? /  2021.10
        linux内核版本 ---》5.10.10  / 5.10.61 ---> 设备树
    cortex-M4 ?  ---> 运行实时的程序
    
    
    exynos4412  /  s5p6818

【2】课程的需要具备的能力

1. 具备C语言的编写能力

【3】课堂要求

1. 课上一定要认真,不要走神
2. 及时完成课上的作业
3. 有问题及时提问
4. 一定要写代码

【4】ARM课程的目标

1. 能够看懂简单的汇编代码
2. 具备分析电路图的能力(电路图的工作原理) ---->  硬件电路设计工程师
3. 具备分析芯片手册的能力 (抓住手册的重点)
4. 核心:掌握软件编程控制硬件的思想

【5】为什么要设计ARM体系结构及接口技术的课程

1. 为后续linux驱动的学习打基础
    linux驱动是基于linux内核提供的接口实现硬件驱动的开发
        linux驱动:linux内核驱动的接口函数 / 驱动的框架 / 
                各种子系统 gpio  iic  spi  playform / 
                设备树。
2. 可以从事STM32相关的单片机的开发  ---》 简单的物联网设备的开发
    C语言 --> 数据结构 --> 一定的硬件基础--> 单片机的开发

【6】ARM的相关概念

1. ARM汇编指令 --> 编译器将指令编程生成一条机器码,存在代码段的空间,
                指向指令完成某个特定的功能。
                每条汇编指令最终都对应着芯片上的某个特殊的电路图,
                当指向指令值,就是让电路图工作。
                
                eg: add 加法指令 ----> 加法器(与或非门电路组成)
                
                
2. ARM指令集 ---> 会多条汇编指令的集合
?
3. ARM架构 ---> 根据arm指令的集的不同,给ARM指令不同的版本号的命名
    ARM-v1  - ARM-v6架构 ? ---> 已经淘汰
    ARM-v7架构  ---> 32位架构,支持arm32位的汇编指令集
    ARM-v8架构  ---> 64位架构,支持arm64位的汇编指令集,向下兼容arm-v7架构
    ARM-v9架构  ---> 2021年年初发布的ARM架构, 64位架构
    
4. ARM内核 --> ARM公司根据不同的ARM架构的版本号设计不同的性能的ARM内核
    架构 ? ? ? ?  内核
    arm-v7      cortex-A7
    arm-v7      cortex-A9
    arm-v8 ? ?  cortex-a53/a55/a72/a76/a78/x1
    
5. SOC  (System On Chip:片上系统)
    ARM公司不生产芯片,将ARM的内核IP授权给生成芯片的厂家(
        高通,联发科,海思,ST:意法半导体, NXP:恩智浦, 新塘科技, 展讯, 澎湃 )
        芯片厂家拿到ARM公司的授权之后,在ARM核的基础之上,
        添加很多个芯片外设资源,生产自己公司的芯片,这样的芯片统称为SOC.

?

MCU : 微控制单元(Microcontroller Unit)
    单片机  8051内核 ? cortex-M内核
MPU :  微处理器 (Microprocessor Unit)
    高端的处理器,可以运行操作系统,
        Cortex-A系列的内核 ? mips ? powerPC
CPU : 中央处理器(central processing unit)
?
GPU : 图形处理器(graphics processing unit)
?
FPU :浮点运算单元 (Float Point Unit)
?
DSP :数字信号处理(Digital Signal Processing)
?
FPGA : 现场可编程逻辑门阵列(Field Programmable Gate Array)
ARM架构 ?  携带ARM内核的处理器年销量在100亿以上
?
MIPS架构  --->  龙芯科技(mips架构买断)
?
RISC-V架构  ----> 开源的架构
?

【7】ARM公司的发展历史

1. 1978年,CPU公司 
    Cambridge processing Unit
2. 1979年 ?  Acorn
3. 1985年, 32位,8MHz, 
 ? 使用的精简指令集RISC
 ? 芯片的名字ARM 
4. 1990年,转折点
 ? iphone 150万英镑 VLSI: 25万英镑
 ? ARM公司12工程师+技术专利:150万英镑
 ? ARM公司-》 Advanced RISC Machine
?
ARM公司不生产芯片,做技术的授权,
提供解决方案。芯片厂家拿到技术授权之后,
根据需求设计生产自己的SOC。
?
5. 2016年,日本软银收购
6. 2020年,英伟达(未收购成功) 

【8】RISC和CISC的区别

1. RISC: 精简指令集  Reduced Instruction Set Computing 
    一般接触到的处理器都是使用的精简指令集,8051,arm mips power risc-v
    
    精简指令集从复杂指令集中选取一些相对比较简单,
    并且使用频率较高的指令作为精简指令;
    精简指令的周期和指令的宽度固定。
    
    指令周期:执行一条指令需要几个时钟周期,大多数都是单周期指令。
            周期跟CPU的主频有关。 频率和周期成倒数关系。
        
    指令宽度:指令编译生成机器码,在代码段占用的代码段的空间固定。
                
                    使用交叉编译器编程程序,生成arm的可执行程序
    linux@ubuntu:~$ arm-linux-gnueabihf-gcc 1.c 
                    查看可执行文件的属性
 ?  linux@ubuntu:~$ file a.out
                    使用反汇编的命令将elf文件转换为返汇编文件.dis
 ?  linux@ubuntu:~$ arm-linux-gnueabihf-objdump -D a.out > a.dis
?
    
    000102bc <__libc_start_main@plt>:
 ?  内存地址 ? ? ? 机器码 ? ?  反汇编代码
 ? ? ? 102bc: ? e28fc600 ?  add ip, pc, #0, 12
 ? ? ? 102c0: ? e28cca10 ?  add ip, ip, #16, 20 ; 0x10000
 ? ? ? 102c4: ? e5bcfd48 ?  ldr pc, [ip, #3400]! ?  ; 0xd48
    
2. CISC: 复杂指令集  Complex Instruction Set Computer
    电脑的CPU使用的是复杂指令集  AMD intel
    复杂指令集更加注重指令的功能性,指令的运算能力,
    复杂指令集的指令的宽度不固定,指令的周期不固定。
    
    linux@ubuntu:~$ gcc 1.c
 ?  linux@ubuntu:~$ file a.out 
 ?  linux@ubuntu:~$ objdump -D a.out > a.dis
    
    0000000000001129 <main>:
    内存地址 ? ? ? 机器码 ? ? ? ? ? ? ? ? 反汇编代码
 ? ? ? ?1129: ? f3 0f 1e fa ? ? ? ? ? ? endbr64 
 ? ? ? ?112d: ? 55 ? ? ? ? ? ? ? ? ? ?  push ? %rbp
 ? ? ? ?112e: ? 48 89 e5 ? ? ? ? ? ? ?  mov ?  %rsp,%rbp
 ? ? ? ?1131: ? 89 7d fc ? ? ? ? ? ? ?  mov ?  %edi,-0x4(%rbp) ? 
 ? ? ? ?1134: ? 48 89 75 f0 ? ? ? ? ? ? mov ?  %rsi,-0x10(%rbp)
 ? ? ? ?1138: ? b8 00 00 00 00 ? ? ? ?  mov ?  $0x0,%eax
 ? ? ? ?113d: ? 5d ? ? ? ? ? ? ? ? ? ?  pop ?  %rbp
 ? ? ? ?113e: ? c3 ? ? ? ? ? ? ? ? ? ?  retq
 ? ? ? ?113f: ? 90 ? ? ? ? ? ? ? ? ? ?  nop

【9】ARM产品的分布

1. Cortex-A系列
    A系列更加注重处理器的功能性,主要运行linux系统
    --》 linux系统, Android系统, 鸿蒙OS

?

2. Cortex-M系列
    M系列主要针对的物联网市场,工业控制,低成本的电子产品。
    主要运行的是ARM的裸机程序。
        也可以运行实时的操作系统:ucos-II 阿里thingsOs FreeRTOS
                            lite-OS  RThread-OS

?

3. Cortex-R系列
    主要针对的是实时性的处理。

?

4. SecurCore系列
    针对于安全市场

?

5. Cortex-X1系列
    高性能的处理器上可以使用,支持芯片厂家对x1的核深度定制(魔改)。

【10】arm数据类型的约定

1> arm-V7架构的数据约定: 
    char ? ? ? ?  8bits 
    half word ? ? 16bits
    word ? ? ? ?  32bits 
    double word ? 64bits (arm-V7架构支持)
?
2> arm-V8架构的数据约定:
    char ? ? ? ? ?  8bits 
    half word ? ? ? 16bits
    word ? ? ? ? ?  32bits 
    double word ? ? 64bits 
    qual word ? ? ? 128bits (arm-V8架构支持)    

【11】arm-v7架构 和 arm-v8架构的区别

1.
    arm-v7架构是32位的架构,
    arm-v8架构是64位的架构,
2. 
    arm-v7架构汇编指令,一条指令占32bit(4字节)空间
    arm-v8架构汇编指令,一条指令占32bit(4字节)空间
3. 
    32位汇编指令,一次可以完成32位数据的运算,原因寄存器是32位的
    64位汇编指令,一次可以完成64位数据的运算,原因寄存器是64位的
        具体要看寄存器---》 后边讲解。
        
        eg: 
        add  r0, r1, r2  @ r0 = r1 + r2
        add  x0, x1, x2  @ x0 = x1 + x2

【12】ARM处理器的工作模式

1. cortex-A系列处理器的工作模式:

?

疑问:异常的处理过程? ---》 按键中断实验详细讲解。
?
总结:
    在特定的工作模式下执行特定的代码,完成特定的功能。
?
2. cortex-M系列处理器的工作模式:
 ? 只有两种工作模式:
 ? 线程模式: ----》 主程序(main函数)
 ? 异常模式: ----》 打断主程序的执行,执行异常处理程序,
 ?              此时工作在异常模式下
 ?  比如:按键中断  定时器中断 串口中断 .....

【13】ARM寄存器组织,重要!重要!重要

1. ARM-v7架构的寄存器组织

关于寄存器组织的总结:
1> 每个小方块代表一个寄存器,一个寄存器可以存放32bits(4字节)的数据
2> 每种工作模式下,都有自己访问的寄存器
3> 寄存器背景色为白色的表示公有的寄存器,
    寄存器的背景色为深色表示私有的寄存器;
    如果某个工作模式下没有私有的则访问公有的寄存器,
    如果某个工作模式下有私有的寄存器,则不可以访问公有的寄存器。
4> 寄存器的空间有限,个数有限,寄存器是没有地址的。
    对于寄存器的访问是通过编号进行访问的,R0-R15,cpsr,spsr.

2. ARM-v8架构的寄存器组织

【14】特殊的寄存器详解

1. R13 --别名--> sp : the Stack Pointer 
        栈指针寄存器,栈指针寄存器指向的是栈空间,
        及栈指针寄存器中存放的栈空间的某个地址。

2. R14 --别名--> lr :  the Linking Register 
    链接寄存器,保存的是返回地址

?

?

3. R15  --别名--> PC : the Program Counter 
        程序计数寄存器,保存的是当前取址指令的地址。

?

4. cpsr :  currented program statued register
        当前程序状态寄存器, 存储当前程序的状态,比如,工作模式
?
5. spsr :  saveed program statued register
        保存程序状态寄存器, 用于对cpsr进行备份

【14】cpsr寄存器详解

?

?N[31] : 指令的执行结果为负数,N位被自动置1,否则为0. 
Z[30] : 指令的执行结果为零,Z位被自动置1,否则为0.
?
C[29] : 
    加法:产生进位,C位被自动置1,否则为0.
        进位:低32位向高32位进位。
    减法:产生借位,C位被自动清0,否则为1.
        借位:低32位向高32位借位。
V[28] : 符号位发送变化,V位被自动置1,否则为0.
?
I[7] : IRQ中断屏蔽位
    I = 1 : 屏蔽IRQ中断
    I = 0 : 不屏蔽IRQ中断
F[6] : FIQ中断屏蔽位
    F = 1 : 屏蔽FIQ中断
    F = 0 : 不屏蔽FIQ中断
T[5] : 状态位 
    T = 0 : ARM状态, 执行ARM汇编指令集
    T = 1 : Thumb状态, 执行Thumb指令集
    
    ARM指令集,一条指令占32位空间,
    Thumb指令集,一条指令占16位空间。
    
    Cortex-M内核使用的都是Thumb指令集。
M[4:0] : 模式位
    10000 User mode; ? ?
 ?  10001 FIQ mode; ? ? ? ? 
 ?  10011 SVC mode;
 ?  10111 Abort mode; ?
 ?  11011 Undef mode; ?
 ?  11111 System mode; ? ? 
 ?  10110 Monitor mode; ? 
 ?  10010 IRQ mode;
 ?  其他保留

【15】指令流水线

指令流水线重点掌握三级流水线即可。
?
取指器 : 根据PC寄存器中的值,从代码段进行读取指令的机器码
译码器 : 翻译指令的功能,给到对应的执行器
执行器 : 执行指令,并将指令的执行结果写回到寄存器中。
    以上三个器件都是单周期的器件,工作互不干扰。
?
    指令1 指令2 指令3 指令4 指令5 指令6
1T  取指
2T  译码  取指
3T  执行  译码  取指
4T       执行  译码  取指
5T           ? 执行  译码  取指
6T           ? ? ?  执行  译码  取指
7T           ? ? ? ? ? ?  执行  译码  取指
8T                       ? ? ? 执行  译码  取指
?
    指令的周期 = 8 / 6 = 1
    
    以上指令的执行是理想的执行顺序,实际上会被异常或者
    函数的调用打断理想的指令的流水线。
?
    学习汇编指令从宏观上理解汇编指令执行完之后的功能即可,
    不需要从微观上理解每条汇编指令内部又是如果完成的。

【16】windows开发环境的搭建

1. 安装Keil 5软件
    安装--->破解-->创建工程
    
    破解需要使用破解软件:关闭杀毒软件,windows自动的杀毒

2. 安装secureCRT串口工具

?

3. 安装pdf工具
    不建议使用:网页打开pdf文件 , wps
    
    推荐使用:福昕阅读器, SumatraPDF-3.1.2-64-install.exe

【17】ubuntu开发环境的搭建

安装交叉编译工具链

交叉开发:PC端编写代码,PC端交叉编译代码,目标板运行代码
?
本地开发:PC端编写代码,PC端编译代码,PC端运行代码
安装交叉编译器的步骤:
1. 在ubuntu的家目录下创建toolchain目录 
    cd ~ 
    mkdir toolchain
    cd toolchain
    
2. 拷贝交叉编译工具链的压缩包到toolchain目录下
    cp  ***/gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz 
        ~/toolchain
?
3. 对交叉编译工具链的压缩包进行解压缩
    tar -vxf gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz
    会得到一个gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf名字的文件夹
    修改文件夹的名字:
    mv gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf gcc-7.5.0
?
4. 在gcc-7.5.0/bin目录下的可执行程序就是各种交叉编译器
    ls  gcc-7.5.0/bin
?
5. 配置ubuntu系统的环境变量
    /etc/bash.bashrc ?  ---> 对所有的用户有效
    /etc/profile ? ? ?  ---> 对所有的用户有效
    /etc/environment ?  ---> 对所有的用户有效 
    ~/.bashrc ? ? ? ? ? ---> 对当前的用户有效
    
    我比较喜欢修改/etc/bash.bashrc
    
    打开sudo vi /etc/bash.bashrc,在这个文件的最后一行添加以下内容:
    export PATH=$PATH:/home/linux/toolchain/gcc-7.5.0/bin
                      修改位自己的路径,注:家目录不要使用~
?
6. 使环境变量立即生效
    重启系统 
    source ? /etc/bash.bashrc
?
7. 测试交叉编译工具链是否安装成功
    arm-linux-gnueabihf-gcc  -v ?
    
    arm-l  --> tab
    如果出现以下信息表示安装成功:
    gcc version 7.5.0 (Linaro GCC 7.5-2019.12) 
    
8. 如果不成功,安装以下32位兼容库 
    sudo apt-get install lib32z1
?
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:08:40  更:2022-01-14 02:10:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 1:22:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码