Blackfin DSP(四):BF533 EBIU之SDRAM
BF533的SDRAM控制器最大支持128M bytes的SDRAM空间;总线宽度可以配置为4位、8位、16位。处理器与SDRAM的连线包括数据总线D[0:15]、地址总线A[1:19]、SDRAM刷新专用信号SA10,时钟信号SCLK、时钟使能信号SCKE、行锁存信号SRAS#,列锁存信号SCAS#,写使能信号SWE#,片选信号SMS#和总线屏蔽信号ABE[1:0].
SDRAM的起始地址为0x0000 0000,尾地址为0x03ff ffff,共64MB;若为32MB SDRAM,则尾地址为0x01ff ffff;
1.如何配置EBIU的寄存器
首先,在所使用的SDRAM的手册中,找到时序参数,如下图所示:

假设SCLK=135M,即7.4ns:
a.配置EBIU_SDRRC:SDRAM刷新率控制器;

- fsclk=135M=135*10^6 Hz----------系统总线频率;
- 查上表得,tREF=64 ms= 0.064 s;-------SDRAM行刷新时间;
- NRA为refresh cycles:NRA=8192----行数
- tRAS=从存储体激活到预充电之间的时间,以时钟周期为单位:44 /7.4=6;
- tRP=存储体从预充电到再次被激活之间的最小时间,以时钟周期为单位:20/7.4=3
RDIV = (135*10^6*0.064)/8192-(6+3)=0x415;
b.配置SDBCTL:存储体控制寄存器

c.配置SDGCTL:SDRAM全局控制器
TWR位:存储器手册上要求1clk+7.5ns,所以需要3个clk;其它位的计算相同;
最后,得到的各个寄存器的值如下:
void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000415; // *pEBIU_SDBCTL = 0x0025; //64 MB,10bit width
*pEBIU_SDBCTL = 0x0013; //32 MB,9bit width *pEBIU_SDGCTL = 0x0099998d; // 0x0091998d;
ssync();
}
为了对SDRAM进行测试,可以用下面的函数对其进行遍历,具体的使用方法如下:
#define pADDR (volatile unsigned short *)0x1000
#define SDRAM_START 0x00000000 // start address of SDRAM
//#define SDRAM_SIZE 0x04000000 // 64 MB
#define SDRAM_SIZE 0x02000000 // 32 MB void ezTurnOnLED(uint16_t led);
int TEST_SDRAM(void);
void main(void)
{
int i; Set_PLL(,); //cclk = 27*22=594M,sclk=594/5=118M
Init_EBIU();
Init_SDRAM();
*pADDR = 0x1234;
i = *pADDR;
printf("addr is %x\n",pADDR);
printf("data is %x\n",i);
*pADDR = 0xaa55;
i = *pADDR;
printf("addr is %x\n",pADDR);
printf("data is %x\n",i); if( == TEST_SDRAM())
{
printf("Test Failed!\r\n");
}
else printf("Test Successed!\r\n"); while(); } /*************************************************************************
*函数功能:测试SDRAM;
*入口参数:无;
*出口参数: 测试正常,返回1,否则返回0
*注意:根据SDRAM的位宽修改nIndex和pDst的类型;
************************************************************************/
int TEST_SDRAM(void)
{
volatile unsigned short *pDst;
unsigned short nIndex = 0xFFFF; //16位位宽
int bPass = ; // returning 1 indicates a pass, anything else is a fail // write all FFFF's
for(pDst = (unsigned short *)SDRAM_START; pDst < (unsigned short *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{
*pDst = nIndex;
} // verify all FFFF's
for(pDst = (unsigned short *)SDRAM_START; pDst < (unsigned short *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{
if( nIndex != (*pDst) )
{
bPass = ;
return false;
}
} // write all AAAAAA's
for(nIndex = 0xAAAA, pDst = (unsigned short *)SDRAM_START; pDst < (unsigned short *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{
*pDst = nIndex;
} // verify all AAAAA's
for(nIndex = 0xAAAA, pDst = (unsigned short *)SDRAM_START; pDst < (unsigned short *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{
if( nIndex != *pDst )
{
bPass = ;
return false;
}
} // write all 555555's
for(nIndex = 0x5555, pDst = (unsigned short *)SDRAM_START; pDst < (unsigned short *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{
*pDst = nIndex;
} // verify all 55555's
for(nIndex = 0x5555, pDst = (unsigned short *)SDRAM_START; pDst < (unsigned short *)(SDRAM_START + SDRAM_SIZE); pDst++ )
{
if( nIndex != *pDst )
{
bPass = ;
return false;
}
} return true;
}
Blackfin DSP(四):BF533 EBIU之SDRAM的更多相关文章
- Blackfin DSP(八):1D DMA与音频处理模板
1.DMA产生的背景 在许多需要使用DSP 的场合,一般都需要大量的数据搬移工作,而如果每次数据搬移都由DSP 内核来参与完成,将大大占用DSP 内核的处理时间,从而严重影响其信号处理能力.因此,Bl ...
- Blackfin DSP(二):寄存器操作与GPIO
BlackfinDSP的寄存器是通过指针操作的,与51.ARM等MCU一样,通过“或”操作来置1,通过“与”操作清零. 在DSP上最简单的外设非IO口莫属,但是由于其功能强大,远非一般IO口可比,因此 ...
- Blackfin DSP(三):BF533 的EBIU接口之flash
上一节谈了GPIO问题,是用BF561 ezkit进行说明的,这是因为561 ezkit上的GPIO是与LED直连的,讲解GPIO时不会涉及到其它问题,降低了复杂性.对于533,也采取同样的操作即可. ...
- Blackfin DSP(五):BF533的SPI接口
533SPI的特性 最高速度可达SCLK/4: 支持主模式和从模式: 可使用8个GPIO口作为从选择线: 1 slave select input pins 7 slave select output ...
- Blackfin DSP(六):BF533的SPORT接口
1.特性 bf533有两个SPORT口(synchronous serial Port),即同步串行接口.完全独立的接收和发送通道,且每个通道都具有缓冲,最高速度可达SCLK/2.最大支持32bit字 ...
- Blackfin DSP(八):BF533的DMA
#include <cdefBF533.h> #include <sys\exception.h> #define POLC 0x00004000 #define PORT_C ...
- TI C66x DSP 四种内存保护问题 -之- CPU訪问corePac内部资源时的内存保护问题
CPU訪问corePac内部资源(L1.L2)时的内存保护(通过设置内存的訪问权限实现)等问题请參考以下两个blog.已经叙述的非常具体. "TI C66x DSP 系统events及其应用 ...
- TI C66x DSP 四种内存保护问题 -之- 针对CPU訪问外存(DDR3 or MSM)时的内存保护问题 - 举例
在代码维护中遇到过这种问题,CPU訪问了corePac的外部内存空间0x75510C55地址,即CPU向corePac的L2内存控制器发起了对该内存的訪问,然后L2内存控制器将该请求发给corePac ...
- TI C66x DSP 四种内存保护问题 -之- 外设訪问corePac内部资源时的内存保护问题
外设訪问corePac内部资源(L1,L2)时的内存保护等问题请參考以下两个blog.已经叙述的非常具体. "TI C66x DSP 系统events及其应用 - 2"," ...
随机推荐
- PHP 缓存扩展opcache
opcache (全程 zend opcache): 从php5.5开始,默认提供的php脚本缓存扩展,编译php5.5时加上参数--enable-opcache就可以编译opcache了,只是要启用 ...
- Josephu--Java链表实现
public class Josephu { public static void main(String[] args) { Cyclink cyclink=new Cyclink(); cycli ...
- JDK1.5新特性
静态导入 import static java.util.Collections.*; import static java.lang.System.out; 1.如果静态导入的成员与本类的成员存在同 ...
- C语言基础--数组及相关
概念: 一堆相同类型的数据的有序集合 格式: 元素类型 数组名称[ 元素个数 ] 定义数组: // 定义了一个名称叫做scores的数组, 数组中可以存放3个int类型的数据 ]; // 只要定义一 ...
- 使用UISegmentedControl的一个注意事项
NSArray* array = [[NSArray alloc]initWithObjects:@"机会",@"联系人", nil]; //先确定segmen ...
- 分析器错误 MvcApplication 找不到
<%@ Application Codebehind="Global.asax.cs" Inherits="test.MvcApplication" La ...
- sql datetime操作
Sql Server中的日期与时间函数 SQL中的时间函数非常有用,特别是在我们进行初始赋值.复杂查询的时候,就显得特别方便. 1.获得系统当前时间 select getdate() 2.DateN ...
- Web页中table导出到execl(带模板)
1.将excel另存为html,将其复制到aspx文件中 2.输出格式为excel InitData(); Response.Clear(); Response.Buffer = true; Resp ...
- tar.gz file installation
1. tar xzvf filename.tar.gz 2. cd filename 3. ./configure ./configure --prefix="path" 4. ...
- 【Windows批处理II】类C语言的学习和思考
0)@不显示该行 1)随时删除qq下所有gif文件(a.bat),只要能达到目的死循环也可以: @echo off \Tencent\AD\*.gif del C:\Progra~\Tencent\A ...