問題引入:算法
用一句話回答如下問題:架構
(本章重點在 1.1.3 和 1.1.4)設計
(圖)指針
(圖)code
芯片主要是由內核和外設組成。教程
內核(主控制器):接口
外設(從控制器):內存
總線:class
內核與外設經過總線鏈接,其分爲:I(指令)、S(系統)、D(數據)總線。基礎
幾個總線同時訪問某個外設或者內核,產生競爭的時候,總線矩陣會使用調度算法進行仲裁。
STM32F42xx的總線接口
(圖)
存儲器自己是不具備地址信息的,地址信息是由用戶或者廠商分配的,爲存儲器從新分配地址的過程即爲存儲器映射。
Cortex - M4內核是32位的,能夠尋址2的32次方,也就是4GB(0x0000 0000 - 0xFFFF FFFF)的內存空間,
這4GB的內存空間被分紅了8個Block,每一個Block都有特定的功能,每一個Block大小爲512MB。(教程裏有每一個Block的功能劃分)
Block0用於設計Flash,429IGT6只用了1MB。
Block1用於設計Sram,用於存儲變量,429IGT6用了256KB,被分紅了三個部分:Sram1爲112KB,Sram2爲16KB,Sram3爲64KB。
Block2用於設計片上外設。外設根據速度不一樣被分紅四條總線進行控制:AHB一、AHB二、APB二、APB1。
(圖)
Block3是FMC的bank1 - bank2,用於擴展外部存儲,一個bank爲256MB,板上拓展了一個大小爲8MB的Sram。
Block4是FMC的bank3 - bank4
Block7爲Cortex - M4的內部外設,是由Arm公司設計的,如:NVIC等。
經過地址和偏移量間接訪寄存器。
問題引入:
經過絕對地址訪問內存單元:
//GPIO端口所有輸出高電平 *(unsigned int *)(0x40021C14) = 0xFFFF;
0x40021C14是輸出數據寄存器OCR的地址,如何找到?
(unsigned int *)的做用是什麼?
經過寄存器別名方式訪問內存單元:
#define GPIOH_ODR *(unsigned int *)(0x40021C13) GPIOH_ODR = 0XFF;
什麼是寄存器?
什麼是存儲器映射?