內部寄存器:指的是CPU內核里的寄存器,如r0,r1等;
外設寄存器:一般是指一些某一特殊功能的物理地址,外設寄存器的物理地址都在0x4800_0000~0x5FFF_FFFF,比如STM32中,GPIO、I²C、SPI、CAN都叫做外設寄存器。嵌入式通過編程來控制外設寄存器從而控制芯片外部的外設。
內存:內存(Memory)也被稱為內存儲器,其作用是用於暫時存放CPU中的運算數據,以及與硬盤等外部存儲器交換的數據。如RAM,SDRAM,Flash等。
物理地址:操作系統會給每一個內存單元編上一個絕對的號,計算機系統就通過這個編號來定為每一個內存單元的物理位置,這個編號稱為內存的物理地址
s3c2440(CPU:ARM920t)是32位操作系統,可達4GB(0x0000_00000xFFFF_FFFF)的地址范圍。但實際的內存可能用不了這么多內存,如,片內RAM的物理地址在0x0000_00000x0000_7FFF,SDRAM的物理地址在0x3000_00000x33fF_FFFF,外設寄存器的物理地址都在0x4800_00000x5FFF_FFFF。
mov指令:只能用於CPU內核寄存器(如r0,r1等)之間的數據傳輸;
ldr指令:用於從內存中讀取數據至CPU內核寄存器里;
str指令:用於從CPU內核寄存器中讀取數據至內存里。
外設內存映射機制
說到映射大家可能就會想到函數映射,其實外圍設備的內存映射原理是一樣的,只不過左邊的集體變成了CPU,右邊的集合變成了外圍設備,那條帶箭頭的線就是連接CPU和外設地址引腳的地址總線。
要知道,一個開發板的CPU地址引腳並不是所有的都與內存元器件相連的,如果該板上有外設(如一塊獨立顯卡),那么CPU就需要分出一些引腳來與該外設的地址引腳相連,相當於將一部分內存尋址的空間分給了外設,那不相當於CPU分出去地址尋址空間為空?非也,一般的外設為了加快處理速度都有自己的片內RAM(比如說顯存,你也知道顯存對顯卡性能的重要性),分出去的地址空間也就與片內RAM物理連接起來,這樣CPU就能像訪問內存一樣去訪問外設的片內RAM,這也就是所謂的內存映射。