本帖最后由 thf2008 于 2009-12-7 00:32 编辑
怎么附件添加不了WORD?郁闷,那我就贴上来吧
最近在写一个比较大的程序,突然发现2812内部RAM不够用,无奈之下只好在外部扩展RAM。为了彻底够用,一口气扩展了块512K的SRAM于区域ZONE2,型号为IS61LV51216-10T。现在将具体内容介绍下,仅供大家参考。
1.
连接电路图
布线时数据线和地址线应该尽量等长,RAM尽量靠近DSP,减小外部干扰。地址线没必要一一对应,为了方便布线可以适当颠倒顺序。在上图中RAM的A18与DSP的XA15相连,而RAM的A15与DSP的XA16连接,并不会影响正常工作。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
软件部分软件部分主要是编写两个文件: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=1,READYMODE=0),需要满足下列条件:
引导部分:LR>=tc(xtim)
LW>=tc(xtim)
激活部分:AR>=2×tc(xtim)
AW>=2×tc(xtim)
(3)
如果XREADY信号设置为异步采样方式时(USEREADY=1,READYMODE=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
}
一周热门 更多>