ARM寄存器地址定義
1.首先這是定義的一個變量,這一點要非常明白,因為rGPBCON就是一個寄存器變量,我們可以給他賦值對他讀寫操作,這是一個變量,而不是一個指針或者地址。
2.這是一個地址固定的變量,以前分配的變量地址是隨機的,但這里的地址是固定的,就是0x56000010。
3.#define rGPBCON (*(volatile unsigned *)0x56000010)宏定義的過程,首先把0x56000010這個物理地址強制轉(zhuǎn)換為指針變量
(volatile unsigned *)0x56000010 這就是一個指針變量。然后再用*符號對指針變量操作相當于*p是一個變量。其中因為這里是寄存器映射到內(nèi)存是虛地址,所以需要用關(guān)鍵字volatile寫回,而不是讀緩沖器中的值。
4. 關(guān)于rGPBCON這個特殊寄存器到底有沒有這樣一個寄存器?
這個我一直很迷惑,直到今天,我才明白,其實沒有這樣一個寄存器,這個寄存器是0x56000010開始的四個字節(jié)的內(nèi)存地址的別名,rGPBCON是占用內(nèi)存的,而不存在IO空間或者說IO寄存器。因為ARM根本久沒有IO空間,直接映射到內(nèi)存空間。
標簽: ARM寄存器地址定