【ARM】Tiny4412裸板编程之协处理器
00. 目录
文章目录
- 00. 目录
- 01. 开发环境
- 02. 协处理器简介
- 03. 获取Main ID
- 04. 获取CCSIDR
- 05. 获取SCTLR
- 06. ID_MMFR3
- 07. 附录
01. 开发环境
- 开发板:Tiny4412SDK标准版 「Tiny4412 SDK 1506」
- 工具:「arm-linux-gcc-4.5.1」 「minicom」 「dnw」
- 平台:Ubuntu 20.04
02. 协处理器简介
协处理器(coprocessor),一种芯片,用于减轻系统微处理器的特定处理任务。
协处理器,这是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等;而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。需要说明的是,由于现在的计算机中,整数运算器与浮点运算器已经集成在一起,因此浮点处理器已经不算是辅助处理器。而内建于CPU中的协处理器,同样不算是辅助处理器,除非它是独立存在。
ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和存储器之间传送数据。 ARM 协处理器指令包括以下 5 条: — CDP 协处理器数操作指令— LDC 协处理器数据加载指令— STC 协处理器数据存储指令— MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令— MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令。
ARM:协处理器包括以下5条:
CDP:协处理器数据操作指令。
LDC:协处理器数据加载指令。
STC:协处理器数据存储指令。
MCR:ARM处理器寄存器到协处理器寄存器的数据传送指令。
MRC:协处理器寄存器到ARM处理器寄存器的数据传送指令 。
03. 获取Main ID
B3.17.2 Full list of VMSA CP15 registers, by coprocessor register number
MIDR相关描述31:24位
16:19位描述
访问方法:
MRC p15, 0, <Rt>, c0, c0, 0 ; Read MIDR into Rt
cp15.S文件内容如下
.section .text.align 2.global get_midr
get_midr:MRC p15, 0, r0, c0, c0, 0 mov pc, lr
test.c文件内容如下
#include <string.h>
#include <adc.h>void (*udelay)(unsigned int) = (void*)0x43e26480;
int (*print)(const char *format, ...) = (void*)0x43e11a2c;int main(void)
{print("main start\n");print("MIDR: %p\n", get_midr());print("main end\n");return 0;
}
执行结果
## Starting application at 0x50000000 ...
main start
MIDR: 413fc090
main end
## Application terminated, rc = 0x0
DengJin #
04. 获取CCSIDR
CCSIDR寄存器介绍
访问方法
MRC p15, 1, <Rt>, c0, c0, 0 ; Read current CCSIDR into Rt
cp15.S文件
.section .text.align 2.global get_ccsidr
get_ccsidr:MRC p15, 1, r0, c0, c0, 0mov pc, lr
test.c文件
#include <string.h>
#include <adc.h>void (*udelay)(unsigned int) = (void*)0x43e26480;
int (*print)(const char *format, ...) = (void*)0x43e11a2c;int main(void)
{print("main start\n");print("MIDR: %p\n", get_midr());print("CCSIDR: %p\n", get_ccsidr());print("main end\n");return 0;
}
执行结果
## Starting application at 0x50000000 ...
main start
MIDR: 413fc090
CCSIDR: 701fe019
main end
## Application terminated, rc = 0x0
05. 获取SCTLR
B4.1.130 SCTLR, System Control Register, VMSA
M, bit[0] MMU enable. This is a global enable bit for the PL1&0 stage 1 MMU. The possible values of this
bit are:
0 PL1&0 stage 1 MMU disabled.
1 PL1&0 stage 1 MMU enabled.
In an implementation that includes the Security Extensions, this bit is Banked between the Secure
and Non-secure copies of the register.
访问方法
MRC p15, 0, <Rt>, c1, c0, 0 ; Read SCTLR into Rt
MCR p15, 0, <Rt>, c1, c0, 0 ; Write Rt to SCTLR
cp15.S文件
.section .text.align 2.global get_sctlr
get_sctlr:MRC p15, 0, r0, c1, c0, 0mov pc, lr
test.c文件
#include <string.h>
#include <adc.h>void (*udelay)(unsigned int) = (void*)0x43e26480;
int (*print)(const char *format, ...) = (void*)0x43e11a2c;int main(void)
{print("main start\n");print("MIDR: %p\n", get_midr());print("CCSIDR: %p\n", get_ccsidr());print("SCTLR: %p\n", get_sctlr());print("main end\n");return 0;
}
执行结果
## Starting application at 0x50000000 ...
main start
MIDR: 413fc090
CCSIDR: 701fe019
SCTLR: 00c5187a
main end
## Application terminated, rc = 0x0
06. ID_MMFR3
B4.1.92 ID_MMFR3, Memory Model Feature Register 3, VMSA
访问方法
MRC p15, 0, <Rt>, c0, c1, 7 ; Read ID_MMFR3 into Rt
cp15.S文件
.section .text.align 2.global get_id_mmfr3
get_id_mmfr3:MRC p15, 0, r0, c0, c1, 7mov pc, lr
test.c文件
#include <string.h>
#include <adc.h>void (*udelay)(unsigned int) = (void*)0x43e26480;
int (*print)(const char *format, ...) = (void*)0x43e11a2c;int main(void)
{print("main start\n");print("MIDR: %p\n", get_midr());print("CCSIDR: %p\n", get_ccsidr());print("SCTLR: %p\n", get_sctlr());print("ID_MMFR3: %p\n", get_id_mmfr3());print("main end\n");return 0;
}
执行结果
## Starting application at 0x50000000 ...
main start
MIDR: 413fc090
CCSIDR: 701fe019
SCTLR: 00c5187a
ID_MMFR3: 00102111
main end
## Application terminated, rc = 0x0
07. 附录
Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf
【ARM】Tiny4412裸板编程之协处理器相关推荐
- 【ARM】Tiny4412裸板编程之异常
00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...
- 【ARM】Tiny4412裸板编程之异常(软中断)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...
- 【ARM】Tiny4412裸板编程之异常(中断向量表)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 异常向量表 03. 异常向量表实现 04. 设置Vectors bit 05. 主函数实现 06. 附录 01. 开发环境 开发板:Ti ...
- 【ARM】Tiny4412裸板编程之静态库(libc.a)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. 库的来源 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准版 「 ...
- 【ARM】Tiny4412裸板编程之按键(C语言)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...
- 【ARM】Tiny4412裸板编程之按键
00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...
- 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)
00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...
- 【ARM】Tiny4412裸板编程之蜂鸣器
00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...
- 配置eclipse为ARM嵌入式开发板编程
配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...
最新文章
- hdu-1847-畅桶工程续
- 数据结构与算法试题集锦
- HEOI2012 朋友圈
- [ 墨者学院 ] 命令执行——Bash漏洞分析溯源
- pycharm更改模板_pycharm怎样给文件编辑统一的模板?
- kindle亚马逊个人文档不显示_4.68亿个人信息泄露,大数据时代裸奔?探悉不落地的文档在线预览...
- java习题8,Java经典练习题8
- JS-为金额添加千分位逗号分割符
- 【Python】文件的使用
- 新电脑到手要干的事情
- UVA10673 Play with Floor and Ceil【暴力枚举】
- 一个Maven工程中,不同的模块需要不同的JDK进行编译的解决方案
- error: Unable to find vcvarsall.bat
- Atitit 开发效率补充哦哦那个、、 目录 1. 架构方法上选择快速开发的架构	1 2. 编程方法上选择快速的编程范式和编程方法	1 3. 开发方法论上需要快速的方法	2 1.架构方法上选择快速
- html分辨手机电脑,html自动识别手机或者pc端
- 物联网安全专题 | 浅谈物联网设备安全分析方法 — 硬件篇
- 嵌入式和单片机的区别
- INT 10H显示字符串的小例子
- 线性规划单纯形法的matlab程序,线性规划单纯形法的MATLAB实现_数学专业.doc
- SAP软件ERP系统简介
热门文章
- Repeater 得到checkbox值
- 配置Struts2.0
- vst3插件_Blue Cat Audio Blue Cat PatchWork mac(蓝猫桥接插件)
- mysql-proxy myrelay_myrelay
- java理念_java温故而知新(9)OOP(面向对象编程)理念
- POJ 2083 递归画分形图
- C#实现数据回滚,A事件和B事件同时执行,其中任何一个事件执行失败,都会返回失败...
- 每天一个linux命令-用户之间切换
- 关于mybatis的@Param注解和参数
- 抽象类、抽象方法与代码块