新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用C語言和ARM匯編語言設置SDRAM的慣用方法

        用C語言和ARM匯編語言設置SDRAM的慣用方法

        作者: 時間:2016-11-10 來源:網絡 收藏
        用C語言設置SDRAM的慣用方法

        /* SDRAM regisers */

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

        #defineMEM_CTL_BASE0x48000000// BWSCON的地址

        #defineSDRAM_BASE0x30000000// SDRAM的起始地址

        /* SDRAM 13個寄存器的值*/

        /*定義了一個數組,把13個寄存器的設置值存到一個數組里面*/

        unsignedlongconstmem_cfg_val[]={//注意unsignedlongconst的含義…

        0x22111110,//BWSCON

        0x00000700,//BANKCON0

        0x00000700,//BANKCON1

        0x00000700,//BANKCON2

        0x00000700,//BANKCON3

        0x00000700,//BANKCON4

        0x00000700,//BANKCON5

        0x00018005,//BANKCON6

        0x00018005,//BANKCON7

        0x008e07a3,//REFRESH

        0x000000b2,//BANKSIZE

        0x00000030,//MRSRB6

        0x00000030,//MRSRB7

        };

        /*設置控制SDRAM的13個寄存器*/

        /* for循環總共13次,剛好對13個寄存器賦值完畢*/

        void memsetup()

        {

        inti = 0;

        unsignedlong*p = (unsignedlong *)MEM_CTL_BASE;

        for(; i < 13; i++)

        p[i] = mem_cfg_val[i];

        }

        ARM匯編語言設置SDRAM的慣用方法

        @******************************************************************************

        @ File:head.s

        @功能:設置SDRAM,將程序復制到SDRAM,然后跳到SDRAM繼續執行

        @******************************************************************************

        .equMEM_CTL_BASE,0x48000000

        .equSDRAM_BASE,0x30000000

        .text

        .global _start

        _start:

        bldisable_watch_dog

        blmemsetup

        blcopy_steppingstone_to_sdram

        ldrpc,=set_sp@跳到SDRAM中繼續執行

        halt_loop:

        bhalt_loop

        memsetup:

        @ initialize the static memory

        @ set memory control registers

        movr1,#MEM_CTL_BASE

        adrlr2,mem_cfg_val@ adrl用于搬運地址

        movr3, #0x0@給r3清零(自己加上的一條指令)

        addr3,r1, #52@ 52 == 4*13

        1:

        ldrr4,[r2], #4

        strr4,[r1], #4

        cmpr1,r3

        bne1b@每次遞增4個字節,共循環13次(設置13個寄存器)

        movpc,lr



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 进贤县| 右玉县| 民权县| 波密县| 呈贡县| 鸡西市| 奉节县| 小金县| 天镇县| 正镶白旗| 吉首市| 安仁县| 新田县| 威海市| 如东县| 兴安盟| 综艺| 县级市| 巴南区| 盘锦市| 商南县| 洞头县| 临夏市| 内乡县| 牡丹江市| 大关县| 石家庄市| 郸城县| 澄城县| 温州市| 永定县| 平乐县| 绥德县| 富平县| 大港区| 米脂县| 肇庆市| 建宁县| 林甸县| 娄烦县| 师宗县|