新聞中心

        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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 甘泉县| 玉环县| 广河县| 五大连池市| 永安市| 永福县| 抚远县| 枣阳市| 桃江县| 正宁县| 澜沧| 四子王旗| 柘城县| 普宁市| 邹平县| 铜陵市| 福清市| 依安县| 伊金霍洛旗| 奉化市| 余姚市| 天津市| 湘阴县| 望江县| 喀什市| 莒南县| 和田市| 淳安县| 江北区| 靖江市| 威信县| 长海县| 浠水县| 大理市| 都安| 阜新| 兰西县| 蒙城县| 集贤县| 同江市| 承德市|