DM642对SDRAM的操作


#define EMIFA_GBLCTL         0X01800000
#define EMIFA_CE0CTL         0X01800008
#define EMIFA_SDCTL          0X01800018
#define EMIFA_SDTIM          0X0180001C
#define EMIFA_SDEXT          0X01800020
#define SDRAM_ADDR           0x80000024
#define address              0x80000000

typedef float             f32;
typedef int               s32;
typedef unsigned int      u32;
typedef short             s16;
typedef unsigned short    u16;
typedef unsigned char     u8;
typedef signed char       s8;
 
#include <stdio.h>
 
//============   main program ========================

void set_EMIFA();
void Write_sdram();
void Read_sdram();

void main()
{
 
  set_EMIFA();
  Write_sdram();
  Read_sdram();
  
}

void set_EMIFA()
{
 *(volatile u32*)EMIFA_GBLCTL=(u32)0x000520A4;//0x00000010; //indicates that ECLKOUT1 is enabled to clock and used to clock the SDRAM 
 *(volatile u32*)EMIFA_CE0CTL=(u32)0xFFFFFFD3;//0xFFFFFFDF;  MTYPE=1101b 64bit-wide SDRAM
 *(volatile u32*)EMIFA_SDCTL =(u32)0x5b116000; //0x5b116000  !!!! 63spra433b 0x57119000
// *(volatile u32*)EMIFA_SDTIM =(u32)0x00000446;//a value of 0x446 should be written to the refresh period field in the EMIF SDRAM timing register
// *(volatile u32*)EMIFA_SDEXT =(u32)0x0005452B; //0x0005452B*/

    /**(volatile u32*)EMIFA_GBLCTL=(u32)0x000520a4; //0x000520a4: 1/2 EMIFA Clock
 *(volatile u32*)EMIFA_CE0CTL=(u32)0xFFFFFFDF;
 *(volatile u32*)EMIFA_SDCTL =(u32)0x47116000; //0x5b116000
 *(volatile u32*)EMIFA_SDTIM =(u32)0x00000446;//a value of 0x446 should be written to the refresh period field in the EMIF SDRAM timing register
 *(volatile u32*)EMIFA_SDEXT =(u32)0x00054549;   */
}

void Write_sdram()
{
        int i;
        for(i =0;i<100;i++)
        {
         *((volatile u32 *)address + i) = i;
               
        }
  
}

void Read_sdram()
{      
        int j,k,counter;
        counter=0;
        for(j =0;j<100;j++)
        {
          k=*((volatile u32 *)address + j);
         
          if(k!=j)
             counter++;
         
        }
        if(counter>0)printf("error rate is %d",counter/100);
        else printf("operate correctly");
       
       
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值