日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ARM】Tiny4412裸板编程之协处理器

發布時間:2024/4/24 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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裸板编程之协处理器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。