微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 德州仪器DSP开发常见问题宝典

德州仪器DSP开发常见问题宝典

时间:04-22 来源:本站整理 点击:

请教。前几天自制的DSP板引导成功,早就打算写写这方面的东西。我用的DSP是 5416,以其为核心,做了一个相对独立的子系统(硬件、软件、算法),目前都已基本做好。下面把在FLASH引导方面做的工作向大家汇报一下,希望能对大家有所帮助。本人经验和文笔都有限,写的不好请大家谅解。

  硬件环境:

  DSP:TMS320VC5416PGE160

  FLASH:SST39VF400A-70-4C-EK 都是贴片的,FLASH映射在DSP数据空间的0x8000-0xFFFF

  软件环境: CCS v2.12.01

  主程序(要烧入FLASH的程序): DEBUG版,程序占用空间0x28000-0x2FFFF(片内SARAM),中断向量表在0x0080-0x00FF(片内DARAM),数据空间使用0x0100-0x7FFF(片内DARAM)。因为FLASH是贴片的,所以需要自己编一个数据搬移程序,把要主程序搬移到FLASH中。在写入 FLASH数据时,还应写入引导表的格式数据。最后在数据空间的0xFFFF处写入引导表的起始地址(这里为0x8000)。

  搬移程序: DEBUG版,程序空间0x38000-0x3FFFF(片内SARAM),中断向量表在0x7800-0x78FF(片内DARAM),数据空间使用 0x5000-0x77FF(片内DARAM)。搬移程序不能使用与主程序的程序空间和中断向量表重合的物理空间,以免覆盖。烧写时,同时打开主程序和搬移程序的PROJECT,先LOAD主程序,再LOAD搬移程序,然后执行搬移程序,烧写OK! 附:搬移程序(仅供参考)

  volatile unsigned int *pTemp=(unsigned int *)0x7e00; unsigned int iFlashAddr;

  int iLoop;

  iFlashAddr=0x8000;

  WriteFlash(iFlashAddr,0x10aa);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x7e00);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x8006);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x0002);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x8085);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x7f00);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x0002);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x8000);

  iFlashAddr++;

  for (iLoop=0;iLoop《0x7f00;iLoop++)

  {

  asm(" pshm al");

  asm(" pshm ah");

  asm(" rsbx cpl");

  asm(" ld #00fch,dp");

  asm(" stm #0000h, ah");

  asm(" MVDM _iLoop, al");

  asm(" add #2800h,4,a");

  asm(" reada 0h");

  asm(" popm ah");

  asm(" popm al");

  asm(" ssbx cpl");

  WriteFlash(iFlashAddr,*pTemp);

  iFlashAddr++; }

  WriteFlash(iFlashAddr,0x0080);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x0000);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x0080);

  iFlashAddr++;

  for (iLoop=0;iLoop《0x0080;iLoop++) {

  asm(" pshm al");

  asm(" pshm ah");

  asm(" rsbx cpl");

  asm(" ld #00fch,dp");

  asm(" stm #0000h, ah");

  asm(" MVDM _iLoop, al");

  asm(" add #0080h,0,a");

  asm(" reada 0h");

  asm(" popm ah");

  asm(" popm al");

  asm(" ssbx cpl");

  WriteFlash(iFlashAddr,*pTemp);

  iFlashAddr++;

  }

  WriteFlash(iFlashAddr,0x0000);

  iFlashAddr++;

  WriteFlash(iFlashAddr,0x0000);

  iFlashAddr=0xffff;

  WriteFlash(iFlashAddr,0x8000);

  四十七.c54x的外部中断是电平响应还是沿响应?

  是沿响应,准确的说,它要检测到100(一个clk的高和两个clk的低)的变化才可以。

  四十八。参考程序,里面好象都要 disable wachdog,不知道为什么?

  watchdog是一个计数器,溢出时会复位你的DSP,不disable的话,你的系统会动不动就reset。

  四.关于DSP一些技术性问题

  问:我有二个关于C2000的问题:1、C240或C2407的RS复位引脚既可输入,也可输出,直接用CMOS门电路(如74ACT04)驱动是否合适,还是应该用OC门(集电极开路)驱动?2、大程序有时运行异常,但加一两条空指令就正常,是何原因?

  答:1、OC门(集电极开路)驱动。2、是流水线的问题。

  问:1.DSP芯片内是否有单个的随机函数指令?2.DSP内的计算速度是快的,但是它的I/O

  口的交换速度有多快呢?SP如何配合EPLD或FPGA工作呢?

答:1.没有。2.取决于你所用的I/O。对于HPI,传输速率(字节)大约为CPU的1/4,对McBSP,位速率(kbps)大约为CPU的1/2。3.你可以级联仿真接口和一个EPLD/FPGA在一起。请参考下面的应用手册: http://www.ti.com/sc/docs/psheets/abstract/apps/spra

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top