[转帖] F2812外部扩展RAM经验

2019-07-31 19:55发布

本帖最后由 thf2008 于 2009-12-7 00:32 编辑

怎么附件添加不了WORD?郁闷,那我就贴上来吧

最近在写一个比较大的程序,突然发现2812内部RAM不够用,无奈之下只好在外部扩展RAM。为了彻底够用,一口气扩展了块512KSRAM于区域ZONE2,型号为IS61LV51216-10T。现在将具体内容介绍下,仅供大家参考。
1.
连接电路图


   布线时数据线和地址线应该尽量等长,RAM尽量靠近DSP,减小外部干扰。地址线没必要一一对应,为了方便布线可以适当颠倒顺序。在上图中RAMA18DSPXA15相连,而RAMA15DSPXA16连接,并不会影响正常工作。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
thf2008
2019-07-31 20:41
2.
软件部分
软件部分主要是编写两个文件:DSP281x_Xintf.c(时序配置)和CMD
2.1
时序配置文件
当与特定外部设备连接时,需要调整XINTF信号的时序,如读写操作的建立和保持时序。这些时序参数可以通过每个区域的XTIMING寄存器独立配置,每个区域也可以选择是否使用XREADY信号进行采样,用户可以根据访问的存储器,最大程度的提高XINTF的效率。
(1)
如果XREADY信号被屏蔽(USEREADY=0),需要满足下列条件:
引导部分:LR>=tc(xtim)

LW>=tc(xtim)

注:tc(xtim)为周期时间,XTIMING
(2)
如果XREADY信号设置为同步采样模式(USEREADY=1READYMODE=0),需要满足下列条件:
引导部分:LR>=tc(xtim)

LW>=tc(xtim)

       激活部分:AR>=2×tc(xtim)

AW>=2
×tc(xtim)

(3)
如果XREADY信号设置为异步采样方式时(USEREADY=1READYMODE=1),需要满足下列条件:
引导部分:LR>=tc(xtim)

LW>=tc(xtim)

激活部分:AR>=2×tc(xtim)

AW>=2
×tc(xtim)

       引导+激活:LR+AR>=4×tc(xtim)

LW+RW>=4
×tc(xtim)

具体介绍请参考图书TMS320F2812原理及其C语言程序开发(作者孙丽明,清华大学出版社)的128~129页。
以下是我写的DSP281x_Xintf.c
#include "DSP281x_Device.h"
// DSP281x Headerfile Include File

#include "DSP281x_Examples.h"
// DSP281x Examples Include File


//---------------------------------------------------------------------------
void InitXintf(void)
{
#if DSP28_F2812

// All Zones---------------------------------


// Timing for all zones based on XTIMCLK = 1/2 SYSCLKOUT


XintfRegs.XINTCNF2.bit.XTIMCLK = 1;


// No write buffering


XintfRegs.XINTCNF2.bit.WRBUFF = 0;


// XCLKOUT is enabled


XintfRegs.XINTCNF2.bit.CLKOFF = 0;


// XCLKOUT = XTIMCLK/2


XintfRegs.XINTCNF2.bit.CLKMODE = 1;


// Zone 2------------------------------------


// When using ready, ACTIVE must be 1 or greater


// Lead must always be 1 or greater


// Zone write timing



XintfRegs.XTIMING2.bit.XWRLEAD = 3;
//minimum value is 1


XintfRegs.XTIMING2.bit.XWRACTIVE = 7;
//minimum value is 0


XintfRegs.XTIMING2.bit.XWRTRAIL = 3;
//minimum value is 0


// Zone read timing


XintfRegs.XTIMING2.bit.XRDLEAD = 3;
//minimum value is 1


XintfRegs.XTIMING2.bit.XRDACTIVE = 7;
//minimum value is 0


XintfRegs.XTIMING2.bit.XRDTRAIL = 3;
//minimum value is 0



// double all Zone read/write lead/active/trail timing


XintfRegs.XTIMING2.bit.X2TIMING = 1;



// Zone will sample XREADY signal


XintfRegs.XTIMING2.bit.USEREADY = 1;


XintfRegs.XTIMING2.bit.READYMODE = 1;
// sample asynchronous


// Size must be 1,1 - other values are reserved


XintfRegs.XTIMING2.bit.XSIZE = 3;


XintfRegs.XBANK.bit.BANK = 2;


XintfRegs.XBANK.bit.BCYC = 7;


//Force a pipeline flush to ensure that the write to


//the last register configured occurs before returning.


asm(" RPT #7 || NOP");


#endif

}

一周热门 更多>