ARM知识点三和串口代码的编写流程

ARM的一些常见问题

  1. ARM 体系结构的主要特点是什么?
  • 精简指令集 (RISC):ARM 采用 RISC 结构,指令集较小且简单,执行效率高。相比于复杂指令集 (CISC),RISC 更强调每条指令的执行速度。
  • 低功耗设计:ARM 处理器通过简化指令集和减少每条指令的处理步骤,达到了低功耗的效果,适用于移动设备和嵌入式系统。
  • Thumb 和 Thumb-2 指令集:ARM 支持 16 位 Thumb 指令集,它能够提高代码密度,特别适合对内存有限的嵌入式系统。
  • 多核和对称多处理 (SMP):现代 ARM 处理器支持多核架构,并且多核处理器可以并行处理多个任务。
  • 向量浮点单元 (VFP) 和 NEON:ARM 处理器通常集成 VFP(向量浮点运算单元)和 NEON 技术来加速多媒体和信号处理任务。
  1. ARM 的中断处理机制是怎样的?
    ARM 的中断机制是通过中断向量表来处理的,不同的中断类型有不同的优先级。主要的中断处理流程如下:
  • 中断请求 (IRQ):常规外设或定时器产生的中断请求。
  • 快速中断 (FIQ):高优先级的中断请求,常用于紧急任务处理。FIQ 有独立的寄存器组来加快中断响应速度。
  • 中断向量表:中断向量表存储在一个固定的地址(如地址 0x00000000 或 0xFFFF0000),每种中断类型有一个固定的入口地址,处理器通过跳转到相应的中断向量表位置来响应中断。
  • 嵌套中断:在 ARM 架构中,通过管理中断屏蔽和优先级,可以支持嵌套中断,即在处理中断的过程中可以响应更高优先级的中断。
  1. ARM Cortex-M 系列的主要特点是什么?
    ARM Cortex-M 系列是专为嵌入式系统设计的,主要特点包括:
  • 基于 ARMv7-M 或 ARMv8-M 指令集。
  • 低功耗,非常适合电池供电的嵌入式设备。
  • 支持快速中断响应,通过 NVIC(嵌套向量中断控制器)实现高效的中断管理,最多支持 240 个中断通道。
  • 内置调试支持:如 DWT(数据观察点和跟踪)和 ITM(指令跟踪宏单元)。
  • 浮点运算单元 (FPU):Cortex-M4 和 Cortex-M7 支持硬件浮点运算,适合需要大量数值计算的应用。
  1. ARM 处理器的总线接口有哪些?
    ARM 处理器主要使用以下总线接口技术:
  • AMBA (Advanced Microcontroller Bus Architecture):AMBA 是 ARM 提出的总线协议,常用的总线类型包括:
  • AHB (Advanced High-performance Bus):主要用于高性能外围设备和高速数据传输。
  • APB (Advanced Peripheral Bus):用于低速外围设备,如 GPIO、串口等。
  • AXI (Advanced eXtensible Interface):用于高性能内存和外设之间的数据传输,支持并行和流水线操作。
  1. 如何在 ARM 体系结构中实现内存映射I/O?
    内存映射I/O 是 ARM 处理器中外设与内存地址空间共享的一种机制,具体步骤如下:
  • 内存映射:每个外设都分配有固定的内存地址,处理器可以通过读写这些内存地址来控制外设。
  • 地址分配:不同外设的地址范围通常在芯片手册中指定。例如,GPIO 的控制寄存器可能映射到一个特定的地址段。
  • 访问外设:通过普通的 ldr 和 str 指令,ARM 处理器可以访问这些内存映射的外设。
  1. ARM中的异常处理机制是什么?
    ARM 处理器的异常处理机制与中断类似,但处理的是软件错误或其他需要特殊处理的事件。常见的异常包括:
  • 复位异常 (Reset):设备复位时触发。
  • 未定义指令异常 (Undefined Instruction):执行未定义的指令时触发。
  • 数据预取异常 (Data Abort/Prefetch Abort):发生内存访问错误或非法地址访问时触发。
  • 软件中断 (SWI):用于用户态调用内核服务(类似于系统调用)。
  1. ARM 的虚拟内存管理是如何实现的?
    ARM 处理器支持虚拟内存管理,通过以下方式实现:
  • MMU (Memory Management Unit):用于将虚拟地址转换为物理地址,并提供访问控制。
  • 分页机制:ARM 使用分页来管理内存,将内存划分为固定大小的页,虚拟地址通过页表映射到物理地- 址。
  • TLB (Translation Lookaside Buffer):TLB 用于缓存最近使用的页表项,减少内存访问时的转换开销。

安装交叉编译工具

  1. 拷贝 gcc-4.6.4.tar.xz 到 Linux 环境,并解压
tar -xvf gcc-4.6.4.tar.xz
  1. 将整个 GCC 目录安装到系统
    • 方法:将 gcc-4.6.4/bin 目录添加到 PATH 环境变量
    • 修改 ~/.bashrc 文件,添加以下内容,在文件底部添加
    export PATH=$PATH:/home/lsf/source/gcc-4.6.4/bin
    
    • source ~/.bashrc 使修改立即生效
  2. 测试安装
    终端中输入 arm-none- 并使用 Tab 键自动补齐,检查工具是否可用
  3. 注意
    • 若是 64 位系统,可能需要安装 32 位支持库
sudo apt-get install lib32ncurses5 lib32z1

接口技术

  • CPU: 狭义上指的是 核, 广义上指的是 整个芯片
    • 狭义上的 CPU:指处理器的 核心 (core) 部分,负责执行指令、处理数据和控制计算过程。它包括了运算逻辑单元 (ALU)、寄存器、控制单元等,核心的任务是执行软件的指令集。
    • 广义上的 CPU:可以包括整个芯片,除了核心以外还包括缓存 (cache)、总线控制器、内存管理单元 (MMU) 等部件。它不仅仅是执行指令的逻辑单元,还包括一些周边的控制逻辑和接口。
  • SOC : system on chip 片上系统, 核+接口
    • SoC 可以看作是一个集成了 CPU、接口以及其他外设的单芯片系统,适合于嵌入式系统和移动设备应用
  • 裸机编程: 没有操作系统的编程,比如 单片机
    • STM32:基于 ARM Cortex-M 核心,广泛应用于工业控制和消费电子。
    • 51 单片机:经典的8位单片机,适合学习与小型应用。

裸机编程示例图

在这里插入图片描述
在这里插入图片描述
- 核心流程:
ldr 指令:CPU 使用 ldr(load register)指令,从存储器或外设的寄存器读取数据到寄存器。
str 指令:CPU 使用 str(store register)指令,将寄存器的数据写回存储器或外设的寄存器中。
- 硬件,分为两部分 核心板+外设板
- 核心板:能让CPU正常运行的最小系统,主要组件:CPU,flash,RAM,电源,串口,晶振
- 外设板: 外设板通常包含了许多外部设备,这些设备通过各种接口与核心板的 CPU 连接,用于扩展系统的功能。例如:扬声器、SD卡接口、ADC、HDMI
- 核心板和外设板通过接口(如 GPIO、I2C、SPI、UART 等)进行连接和通信。

操作硬件一般步骤(以 LED 为例)

  1. 从电路板上找到该硬件
    • 找到你想控制的硬件设备。例如:LED2
    • 记下该设备的标号(如 LED2),方便后续在电路图和芯片手册中查找相关信息
  2. 打开电路图,找到该硬件的连接信息
    • 打开硬件的 电路原理图,找到 LED2 相关的部分
    • 在电路图中查找 LED2 的位置,并查看该 LED 是如何连接到 CPU 的管脚上。例如,你可能会发现 LED2 连接到 CPU 的 GPX2_7 引脚
  3. 阅读芯片手册 (datasheet),找到相关控制寄存器
    • 打开对应的 芯片手册 (datasheet),找到涉及控制 GPX2_7 引脚的章节,通常是在 GPIO(通用输入输出)控制器章节中
    • GPX2_7 表示 GPIO X 组的第 7 个引脚,你需要找到该引脚的寄存器配置方式
    寄存器的相关配置:
    GPX2CON(引脚配置寄存器):配置该引脚的模式(输入/输出)。
    寄存器地址:0x11000C40。
    操作说明:设置 [31:28] 位为 0001,表示将 GPX2_7 设置为输出模式。
    GPX2DAT(数据寄存器):用于控制引脚的高低电平(控制开/关)。
    寄存器地址:0x11000C44。
    操作说明:[7] 位控制 GPX2_7 的输出状态。设置该位为 1 则为高电平(LED 点亮),设置为 0 则为低电平(LED 熄灭)。
    
    • 编写代码,进行编程和测试
      • 代码在start.s中写,通过Makefile文件编译,取bin文件烧录进去开发板即可
      • 在这里插入图片描述
.text
@@@ 通过 ARM 裸机编程直接控制硬件,具体任务是通过按键控制 LED 的亮灭,即当按键按下时点亮 LED,松开按键时熄灭 LED。
@@ 配置 GPX2_7 为输出模式
ldr r0,=0x11000c40        @ 加载 GPX2CON 地址
ldr r2,[r0]               @ 读取 GPX2CON 内容到 r2
bic r2,r2,#0xF0000000     @ 清除 GPX2_7 的控制位
orr r2,r2,#0x10000000     @ 设置 GPX2_7 为输出模式 (0001)
str r2,[r0]               @ 将修改后的值写回 GPX2CON

@@ 配置 K2 为输入模式 (GPX1_1)
ldr r0,=0x11000c20        @ 加载 GPX1CON 地址
ldr r2,[r0]               @ 读取 GPX1CON 内容到 r2
bic r2,r2,#0xF0           @ 清除 GPX1_1 的控制位
str r2,[r0]               @ 直接清除后默认是输入模式 (0000)

loop:
	ldr r0,=0x11000c24    @ 加载 GPX1DAT 地址 (检测按键输入)
	ldr r2,[r0]           @ 读取 GPX1DAT
	and r2,r2,#2          @ 检查 GPX1_1 状态,检查按键是否按下
	cmp r2,#0
	bleq  light_led_fun    @ 如果按下按键,调用点亮 LED 函数
	blne  off_led_fun      @ 如果没有按下,调用熄灭 LED 函数
	
	bl sdelay             @ 延时
	b loop                @ 继续循环

@@ 点亮 LED
light_led_fun:
	ldr r0,=0x11000c44    @ 加载 GPX2DAT 地址
	ldr r2,[r0]           @ 读取 GPX2DAT
	orr r2,r2,#0x80       @ 设置 GPX2_7 为高电平,点亮 LED
	str r2,[r0]           @ 写回 GPX2DAT
	mov pc,lr             @ 返回

@@ 熄灭 LED
off_led_fun:
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值