1. 程式人生 > >暫存器名稱和地址的對映分析

暫存器名稱和地址的對映分析

首先要清楚的一點,所有操作,最終目的都是操作暫存器

一,對比51微控制器STM32對暫存器的操作

1)51微控制器:

     sfr P0=0x80;      //關鍵字sfr 宣告地址和名稱的對映
     P0=0x00;          //將0x00賦值給P0口的8位(51微控制器一組IO為8位)

2)STM32:

     GPIOA->ODR=0x00000000     //為GPIOA的ODR暫存器地址賦值0x00000000

二,以GPIOA為例說明STM32暫存器和名稱的對映:

GPIOA下的某個暫存器,掛載在GPIOA下,地址為GPIOA基地址+偏移量
GPIOA掛載在APB2匯流排,地址為APB2

匯流排基地址+GPIOA偏移量
ABP2掛載加外設基地址,地址為外設基地址+ABP2偏移量

原始碼中可以找到:

        //外部匯流排基地址
        #define PERIPH_BASE     ((uint32_t)0x40000000)          

        //APB2基地址=外部匯流排基地址+偏移量
        #define APB2PERIPH_BASE     (PERIPH_BASE + 0x10000)     

        //GPIOA基地址=APB2基地址+偏移量
        #define GPIOA_BASE     (APB2PERIPH_BASE + 0x0800)          
//GPIOA將地址順序分配給7個32位暫存器(結構體分配) #define GPIOA ((GPIO_TypeDef*)GPIOA_BASE) //將暫存器地址對映到7個32位暫存器,分別控制 typedef struct { __IO unit32_t CRL; __IO unit32_t CRH; __IO unit32_t ODR; __IO unit32_t IDR; __IO unit32_t BSRR; __IO unit32_t BRR; __IO unit32_t LCKR; }GPIO_TypeDef;

在STM32手冊中:GPIO暫存器地址映像如下:

  這裡寫圖片描述

如此,實現STM32暫存器名稱和地址之間的對映關係

相關推薦

名稱地址對映分析

首先要清楚的一點,所有操作,最終目的都是操作暫存器 一,對比51微控制器和STM32對暫存器的操作 1)51微控制器: sfr P0=0x80; //關鍵字sfr 宣告地址和名稱的對映 P0=0x00;

ADS1248 配置通道轉換

ADS1248是TI的一款 24位delta-sigma(ΔΣ) 、2KSPS、8通道(4通道差分)ADC晶片。TI官方有RTD設計方案,參考文件做了一板4通道3線PT100溫度採集。除錯ADS1248過程中遇到一些問題,記錄下來方便以後使用。 參考程式碼:

Nand flash(三)及硬體初始化分析

關於NAND Flash S5PV210的NAND Flash控制器有如下特點: 1) 支援512byte,2k,4k,8k的頁大小 2) 通過各種軟體模式來進行NAND Flash的讀寫擦除等 3) 8bit的匯流排 4) 支援SLC和MCL的NAND Flash 5) 支

ESPEBP的理解

一直對暫存器ESP和EBP的概念總是有些混淆,檢視定義ESP是棧頂指標,EBP是存取堆疊指標。還是不能很透徹理解。之後借於一段彙編程式碼,總算是對兩者有個比較清晰的理解。下面是按呼叫約定__stdcall 呼叫函式test(int p1,int p2)的彙編程式碼;假設執行

ESPEBP的一些理解

PS:EBP是當前函式的存取指標,即儲存或者讀取數時的指標基地址;ESP就是當前函式的棧頂指標。每一次發生函式的呼叫(主函式呼叫子函式)時,在被呼叫函式初始時,都會把當前函式(主函式)的EBP壓棧,以便從子函式返回到主函式時可以獲取EBP。 下面是按呼叫約定__stdc

C++程式碼反彙編後的函式呼叫過程,堆疊EBPESP

棧是從高地址向低地址生長的。  ebp始終指向當前棧幀的棧底部 , 通過ebp+4中儲存著函式的返回地址 。函式返回時將EBP的值推給EIP ,返回到上一個函幀繼續執行。 ret 與call指令 相反 ,call 將EIP壓入堆疊,然後跳到標號處。 ret 8  在函式返回

STM32 地址名稱對映

stm32韌體庫內可以看見指向結構體的指標,其賦值如下: 例:GPIOA->ODR=0x00000000; 此句是為ODR暫存器賦值為0x00000000;    在stm32f10x.h檔案裡定義了以下結構體 typedef str

2018/11/03-棧、x86架構-《惡意程式碼分析實戰》

  棧用於函式的記憶體、區域性變數、流控制結構等被儲存在棧中。棧是一種用壓和彈操作來刻畫的資料結構,向棧中壓入一些東西,然後再把他們彈出來。它是一種先入後出(LIFO)的結構。   x86架構有對棧的內建支援。用於這種支援的暫存器包括ESP和EBP。其中,ESP是棧指標,包含了指向棧頂的記憶體地址。一些東西

WinCE下的地址對映以及訪問

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

【arm】arm32位arm64位架構、指令差異分析總結

Date: 2018.9.21 1、參考 2、前言   最近三個月的時間,都在進行解碼庫的arm架構彙編優化,包括arm32位彙編優化和arm64位彙編優化。在arm32位入門之後,只要掌握了兩種架構的暫存器和指令集差異之後,就可以很快上手編寫arm64

ioremap 函式對映操作已知的實體地址、埠、IO)

NAME ioremap - map bus memory into CPU space SYNOPSIS void __iomem * ioremap (unsigned

跟我學彙編(三)實體地址的形成

一、通用暫存器 對於一個彙編程式設計師來說,CPU中主要部件是暫存器。暫存器是CPU中程式設計師可以用指令讀寫的部件。程式設計師通過改變各種暫存器的內容來實現對CPU的控制。 不同的CPU,暫存器的個數、結構是不同的。8086CPU 有14個暫存器,每個暫存

1.4 x86 CPU地址空間分配訪問

1、基本概念 cpu地址空間和pci地址空間是兩個常用的比較容易混淆的概念,特別是其中不同系列的cpu的實現還各不相同:x86系列cpu地址空間和pci地址空間是重合的,即為同一空間;而非x86 cpu的cpu地址空間和pci地址空間為兩個獨立的空間。 也許

Verilog中儲存器——陣列定義賦值

[轉載]http://blog.sina.com.cn/s/blog_9424755f0101rhrh.html 儲存器是一個暫存器陣列。儲存器使用如下方式說明: reg [ msb: 1sb] memory1 [ upper1: lower1], memory2 [upper2: lowe

ARM 程式狀態深入分析

程式狀態暫存器共分為兩種,它們的位數都是 32 位: 1 個 CPSR:當前程式狀態暫存器(current program status register),可以在任何工作模式下被訪問。 5 個 SPSR:保持程式狀態暫存器(saved program status r

ARM的7種執行模式37個

ARM的7種工作模式 包括使用者模式和特權模式二大類,其中特權模式又分為系統模式和異常模式。CPU每次只能執行在一種工作模式下,各種模式之間的切換可以是程式設計師通過程式碼主動切換(通過程式狀態暫存器CPSR)也可以是CPU自己在某種情況下自動切換。在每種模式下最多隻能看到18個暫存器,其他

計算機儲存結構分析,記憶體,快取,硬碟)

前言            一個計算機包含多種儲存器比如:暫存器、快取記憶體、記憶體、硬碟、光碟等,為啥有這麼多種儲存方式,對於不太瞭解的人,總是覺得雲裡霧裡的,搞不明白原因。        

第005課 計算機單位

計算機單位換算 單位換算 微米,毫米,釐米,分米....... 1Byte = 8Bit 1M = 1024KB 1G = 1024M 1個字母在計算機中佔一個位元組,8個位。 位寬 1個位元組   256 2個位元組   65

實現BX的內容加上123 並把送到AX

① 一條指令 1 LEA AX,[BX+123] ②兩條指令 1 ADD BX,123 2 MOV AX,BX   Tips: LEA指令與MOV指令的區別: ① MOV指令是 資料        傳送指令-------傳送

中斷,異常,系統呼叫,程序切換時的堆疊變化儲存

 1. 中斷,異常,系統呼叫相同:     CPU自動壓入:   ss            執行級別提升時需切換堆疊,因此多壓入