打印

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

[复制链接]
9641|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thf2008|  楼主 | 2009-12-7 00:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 thf2008 于 2009-12-7 00:32 编辑

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

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


   布线时数据线和地址线应该尽量等长,RAM尽量靠近DSP,减小外部干扰。地址线没必要一一对应,为了方便布线可以适当颠倒顺序。在上图中RAMA18DSPXA15相连,而RAMA15DSPXA16连接,并不会影响正常工作。

11.jpg (36.33 KB )

11.jpg

相关帖子

沙发
thf2008|  楼主 | 2009-12-7 00:33 | 只看该作者
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

}

使用特权

评论回复
板凳
thf2008|  楼主 | 2009-12-7 00:33 | 只看该作者
调试时可以将读写时间设为最大,然后一点一点降低,直到能稳定读写的最小时间。记得在main函数里调用InitXintf(),如:
void main(void)
{
  InitSysCtrl();
  InitXintf();
  ……..
}
2.2  CMD文件的编写
上述步骤完成之后,就可以编写CMD,写法请参考其他资料。以下是我写的CMD文件,可以根据个人爱好适当更改。同时该CMD文件一定要跟DSP281x_Headers_nonBIOS.cmd(可以在TI网站上下载)配合使用,即两个CMD都要加入工程里面。
MEMORY
{
    PAGE 0 :
                 RAMM0           : origin = 0x000000, length = 0x000400            
                 PRAMH0          : origin = 0x3F8002, length = 0x000FFE
                 BEGIN            : origin = 0x3F8000, length = 0x000002
                 BOOTROM (RW)   : origin = 0x3ff000, length = 0x000fc0
                 VECTORS (RW)    : origin = 0x3fffc2, length = 0x00003e
                 RESET            : origin = 0x3FFFC0, length = 0x000002   
                 ZONE2            : origin = 0x080000, length = 0x03ffff
     PAGE 1 :
                 RAMM1           : origin = 0x000400, length = 0x000400
                 DRAMH0          : origin = 0x3f9000, length = 0x001000  
                 ZONE2            : origin = 0x0C0000, length = 0x03ffff        
}

SECTIONS
{
              codestart        : > BEGIN,       PAGE = 0
              ramfuncs        : > PRAMH0,    PAGE = 0  
              .text            : > ZONE2,       PAGE = 0
              .cinit           : > ZONE2,       PAGE = 0
              .pinit           : > ZONE2,       PAGE = 0
              .switch         : > RAMM0,     PAGE = 0      
              .reset           : > RESET,       PAGE = 0, TYPE = DSECT
                 .stack           : > RAMM1,       PAGE = 1      
                 .ebss            : > ZONE2,        PAGE = 1  
                 .econst          : > DRAMH0,      PAGE = 1      
                 .esysmem        : > DRAMH0,      PAGE = 1      
   
   IQmathTables  : load = BOOTROM, type = NOLOAD, PAGE = 0
   
   IQmath        : load = PRAMH0,   PAGE = 0
}

使用特权

评论回复
地板
linhai2009| | 2009-12-7 00:36 | 只看该作者
不错,好东西

使用特权

评论回复
5
linhai2009| | 2009-12-7 00:36 | 只看该作者
:)谢谢LZ

使用特权

评论回复
6
god_like| | 2009-12-7 01:08 | 只看该作者
不错,好东西

使用特权

评论回复
7
love_life| | 2009-12-7 01:13 | 只看该作者
顶一个

使用特权

评论回复
8
午夜粪车| | 2009-12-7 21:41 | 只看该作者
还没完吧?

使用特权

评论回复
9
god_like| | 2009-12-7 22:06 | 只看该作者
还没完?内容都包括了了啊

使用特权

评论回复
10
love_life| | 2009-12-7 22:31 | 只看该作者
学习了

使用特权

评论回复
11
thf2008|  楼主 | 2009-12-7 22:38 | 只看该作者
没完?我去核对一下

使用特权

评论回复
12
thf2008|  楼主 | 2009-12-7 22:39 | 只看该作者
查过了,原文就包括这几部分内容

使用特权

评论回复
13
linhai2009| | 2009-12-7 23:09 | 只看该作者
应该是完了

使用特权

评论回复
14
dewlife| | 2009-12-7 23:13 | 只看该作者
好东西,顶一下

使用特权

评论回复
15
zhpt2008| | 2010-3-14 21:57 | 只看该作者
你好,我可以借鉴下吗?

使用特权

评论回复
16
xiaoxin1986| | 2010-3-14 22:32 | 只看该作者
不错,谢谢LZ分享

使用特权

评论回复
17
xiaoxin1986| | 2010-3-14 22:32 | 只看该作者
15# zhpt2008

呵呵,发在论坛上的好像都是共分享和借鉴的吧

使用特权

评论回复
18
寂寞男孩| | 2010-3-14 23:34 | 只看该作者
好东西,学习了

使用特权

评论回复
19
thf2008|  楼主 | 2010-3-14 23:44 | 只看该作者
15# zhpt2008

当然可以啊

使用特权

评论回复
20
贾君鹏子| | 2010-3-15 00:33 | 只看该作者
不错不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

221

主题

2024

帖子

2

粉丝