新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM寄存器地址定義

        ARM寄存器地址定義

        作者: 時間:2016-11-09 來源:網絡 收藏
        今天學習DMA,需要傳遞地址,我想從串口傳到寄存器來點亮led燈,只是學習一下DMA的原理,首先說明一點的是程序還很爛,沒有做成功。其中發現了一個問題,就是寄存器的地址#define rGPBCON (*(volatile unsigned *)0x56000010)我看了這個的時候,到底這是定義的一個什么呢?上網搜了一下,總結一下。

        1.首先這是定義的一個變量,這一點要非常明白,因為rGPBCON就是一個寄存器變量,我們可以給他賦值對他讀寫操作,這是一個變量,而不是一個指針或者地址。

        本文引用地址:http://www.104case.com/article/201611/317630.htm

        2.這是一個地址固定的變量,以前分配的變量地址是隨機的,但這里的地址是固定的,就是0x56000010。

        3.#define rGPBCON (*(volatile unsigned *)0x56000010)宏定義的過程,首先把0x56000010這個物理地址強制轉換為指針變量

        (volatile unsigned *)0x56000010 這就是一個指針變量。然后再用*符號對指針變量操作相當于*p是一個變量。其中因為這里是寄存器映射到內存是虛地址,所以需要用關鍵字volatile寫回,而不是讀緩沖器中的值。

        4. 關于rGPBCON這個特殊寄存器到底有沒有這樣一個寄存器?

        這個我一直很迷惑,直到今天,我才明白,其實沒有這樣一個寄存器,這個寄存器是0x56000010開始的四個字節的內存地址的別名,rGPBCON是占用內存的,而不存在IO空間或者說IO寄存器。因為ARM根本久沒有IO空間,直接映射到內存空間。



        關鍵詞: ARM寄存器地址定

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岱山县| 封丘县| 伊金霍洛旗| 大英县| 安多县| 施秉县| 高青县| 罗甸县| 庄河市| 修水县| 郁南县| 璧山县| 化隆| 望都县| 滦南县| 方城县| 遂川县| 雷波县| 广东省| 淮南市| 行唐县| 东乌| 天全县| 芜湖县| 芷江| 阳新县| 永和县| 开平市| 和平区| 房山区| 赤壁市| 江城| 抚远县| 镇康县| 云霄县| 洞口县| 潞西市| 改则县| 昆明市| 石泉县| 隆德县|