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裸板编程之协处理器相关推荐

  1. 【ARM】Tiny4412裸板编程之异常

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...

  2. 【ARM】Tiny4412裸板编程之异常(软中断)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...

  3. 【ARM】Tiny4412裸板编程之异常(中断向量表)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 异常向量表 03. 异常向量表实现 04. 设置Vectors bit 05. 主函数实现 06. 附录 01. 开发环境 开发板:Ti ...

  4. 【ARM】Tiny4412裸板编程之静态库(libc.a)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. 库的来源 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准版 「 ...

  5. 【ARM】Tiny4412裸板编程之按键(C语言)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  6. 【ARM】Tiny4412裸板编程之按键

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  7. 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  8. 【ARM】Tiny4412裸板编程之蜂鸣器

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  9. 配置eclipse为ARM嵌入式开发板编程

    配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...

最新文章

  1. hdu-1847-畅桶工程续
  2. 数据结构与算法试题集锦
  3. HEOI2012 朋友圈
  4. [ 墨者学院 ] 命令执行——Bash漏洞分析溯源
  5. pycharm更改模板_pycharm怎样给文件编辑统一的模板?
  6. kindle亚马逊个人文档不显示_4.68亿个人信息泄露,大数据时代裸奔?探悉不落地的文档在线预览...
  7. java习题8,Java经典练习题8
  8. JS-为金额添加千分位逗号分割符
  9. 【Python】文件的使用
  10. 新电脑到手要干的事情
  11. UVA10673 Play with Floor and Ceil【暴力枚举】
  12. 一个Maven工程中,不同的模块需要不同的JDK进行编译的解决方案
  13. error: Unable to find vcvarsall.bat
  14. Atitit 开发效率补充哦哦那个、、 目录 1. 架构方法上选择快速开发的架构 1 2. 编程方法上选择快速的编程范式和编程方法 1 3. 开发方法论上需要快速的方法 2 1.架构方法上选择快速
  15. html分辨手机电脑,html自动识别手机或者pc端
  16. 物联网安全专题 | 浅谈物联网设备安全分析方法 — 硬件篇
  17. 嵌入式和单片机的区别
  18. INT 10H显示字符串的小例子
  19. 线性规划单纯形法的matlab程序,线性规划单纯形法的MATLAB实现_数学专业.doc
  20. SAP软件ERP系统简介

热门文章

  1. Repeater 得到checkbox值
  2. 配置Struts2.0
  3. vst3插件_Blue Cat Audio Blue Cat PatchWork mac(蓝猫桥接插件)
  4. mysql-proxy myrelay_myrelay
  5. java理念_java温故而知新(9)OOP(面向对象编程)理念
  6. POJ 2083 递归画分形图
  7. C#实现数据回滚,A事件和B事件同时执行,其中任何一个事件执行失败,都会返回失败...
  8. 每天一个linux命令-用户之间切换
  9. 关于mybatis的@Param注解和参数
  10. 抽象类、抽象方法与代码块