新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > KEIL FOR ARM 下LPC22xx的外部RAM用法

        KEIL FOR ARM 下LPC22xx的外部RAM用法

        作者: 時間:2016-11-11 來源:網絡 收藏
        工作筆記:

        調試外部RAM,我是在CS0上外擴了一個64K的RAM,也就是地址從0X80000000開始。開始不知道REALVIEW的設置,所以總是不能讀寫RAM,沒有輸出信號,在KEIL下要做如下設置。

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

        一、在“Options for Target Targe 1”下,選擇Asm菜單,在“Conditional Assembly Control Symbols”下的輸入框中填上EXTERNAL_MODE,然后按OK結束,

        二、Startup.s這個文件也要做一定的改動。

        EMC_SETUP EQU 1 ;使能外部RAM控制。

        BCFG0_SETUP EQU 1 ;使能CS0控制。如果用到別的片選,則都要使能。
        BCFG0_Val EQU 0x1000554A; ;

        ;此時要注意BCFG0這個寄存器的設置,要仔細看內容,其分別定義了讀、寫、連續的時鐘周期,重要的是,如果是RAM,RVLE位一定要置1,別的要根據你RAM的速度,來設置一個合適的值,位29、28決定了RAM的寬度,8位、16位、32位等。

        三、另一個設置就是比較重要的PINSEL2

        PINSEL2_Val EQU 0x0F000914

        的設置的為16位總線,A1-23地址線使能,使能CS0,OE ,WE;別的引腳則設置為了I/O,這個寄存器的位4、5應該看明白,你選擇的是多少位的總線,然后就是看你需要的選擇了。

        綜上,設置了這幾種寄存器,外部RAM就可以正常工作了。如果以上設置的不對,則可能沒有WE信號,也可能不產生CS0;下面是一個簡單的例子。

        #define RAMADDR 0x80000000 //外部RAM的基址。

        void ExternRam(void)
        {
        volatile unint *buf;
        unint data[512];
        unint i;
        for (i=0x00;i<512;i++)
        {
        buf=(volatile unint *) (RAMADDR | i<<1);
        *buf=i;
        }
        for (i=0x00;i<512;i++)
        {
        buf=(volatile unint *) (RAMADDR | i<<1);
        data[i]=*buf;
        }
        }

        如果你寫入的數據與讀出的數據一樣,那就說明設置的對了,調試時,最好用示波器看看WE,OE,CS0等信號是否正常。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 山东| 怀安县| 津市市| 津南区| 岐山县| 蓬莱市| 禄劝| 富裕县| 海丰县| 唐山市| 钟祥市| 林芝县| 大名县| 牙克石市| 敦煌市| 兴义市| 林周县| 拉萨市| 平和县| 夏津县| 襄樊市| 溧阳市| 丰台区| 错那县| 分宜县| 饶阳县| 信宜市| 永修县| 黄龙县| 焦作市| 秀山| 昭平县| 河曲县| 博白县| 微博| 扶余县| 闸北区| 团风县| 资兴市| 三台县| 宁阳县|