⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 成功烧写tms320f2812经验.txt

📁 DSP2812的CMD详细说明,内容非常完整,包括CMD文件编写以及实例.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
   PRAMH0     : origin = 0x3d8000, length = 0x004000   /*   */
   RESET      : origin = 0x3FFFC0, length = 0x000002           
   
         
PAGE 1 : 

   /* For this example, H0 is split between PAGE 0 and PAGE 1 */

   LSARAM     : origin = 0x3de000, length = 0x008000 /*   */
   RAMM1      : origin = 0x000400, length = 0x000400
   DRAMH0     : origin = 0x3f8000, length = 0x001000 /*   */
   BUFA       : origin = 0x8000,   length=0x1000
   BUFB       : origin = 0x9000,   length=0x1000
   BUFC       : origin = 0x3f9000, length=0x1000
   RECORDDATA : origin = 0x80020,  length=0x700
   PARAMETER  : origin = 0x80725,  length=0x20
   PASSWORD   : origin = 0x80005,  length=0x08
}


SECTIONS
{
   /* Setup for "boot to H0" mode: 
      The codestart section (found in DSP28_CodeStartBranch.asm)
      re-directs execution to the start of user code.  
      Place this section at the start of H0  */

   codestart        : > BEGIN,        PAGE = 0
   ramfuncs         : > PRAMH0        PAGE = 0  
   .text            : > PRAMH0,       PAGE = 0
   .cinit           : > PRAMH0,       PAGE = 0
   .pinit           : > PRAMH0,       PAGE = 0
   .switch          : > RAMM0,        PAGE = 0
   .reset           : > RESET,        PAGE = 0, TYPE = DSECT /* not used, */
   
   .stack           : > RAMM1,        PAGE = 1
   .ebss            : > DRAMH0,       PAGE = 1
   .econst          : > LSARAM,       PAGE = 1      
   .esysmem         : > DRAMH0,       PAGE = 1
   .bufferA         : {}>BUFA         PAGE 1 
   .bufferB         : {}>BUFB         PAGE 1  
   .bufferC         : {}>BUFC         PAGE 1  
   .RecordData      : {}>RECORDDATA   PAGE 1
   .parameter       : {}>PARAMETER    PAGE 1
   .password        : {}>PASSWORD     PAGE 1
}

2007.8.13 19:04 作者:wind 收藏 | 评论:0
于DDS的简单介绍
分类:默认栏目DDS同DSP(数字信号处理)一样,是一项关键的数字化技术。DDS是直接数字式频率合成器(Direct Digital 
Synthesizer)的英文缩写。与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。 

  
一块DDS芯片中主要包括频率控制寄存器、高速相位累加器和正弦计算器三个部分(如Q2220)。频率控制寄存器可以串行或并行的方式装载并寄存用户输入的频率控制码;而相位累加器根据频率控制码在每个时钟周期内进行相位累加,得到一个相位值;正弦计算器则对该相位值计算数字化正弦波幅度(芯片一般通过查表得到)。DDS芯片输出的一般是数字化的正弦波,因此还需经过高速D/A转换器和低通滤波器才能得到一个可用的模拟频率信号。 

 
 另外,有些DDS芯片还具有调幅、调频和调相等调制功能及片内D/A变换器(如AD7008)。 
 
DDS有如下优点:⑴ 频率分辨率高,输出频点多;⑵频率切换速度快,可达us量级;⑶ 频率切换时相位连续;⑷ 可以输出宽带正交信号;⑸ 
输出相位噪声低,对参考频率源的相位噪声有改善作用;⑹可以产生任意波形;⑺ 
全数字化实现,便于集成,体积小,重量轻,因此八十年代以来各国都在研制和发展各自的DDS产品,如美国QUALCOMM公司的Q2334,Q2220;STANFORD公司的STEL-1175,STEL-1180;AD公司的AD7008,AD9850,AD9854等。这些DDS芯片的时钟频率从几十兆赫兹到几百兆赫兹不等,芯片从一般功能到集成有D/A转换器和正交调制器。
2007.8.13 18:44 作者:wind 收藏 | 评论:0
使用C/C 语言编写基于DSP程序的注意事项
分类:默认栏目 1、 
不影响执行速度的情况下,可以使用c或c/c++语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师”优化处理,例如:进行绝对值运算,可以调用fabs()或abs()函数,也可以使用if...else...判断语句来替代。 

    2、 要非常谨慎地使用局部变量,根据自己项目开发的需要,应尽可能多地使用全局变量和静态变量。
    3、 
一定要非常重视中断向量表的问题,很多朋友对中断向量表的调用方式不清楚。其实中断向量表中的中断名是任意取定的,dsp是不认名字的,它只认地址!!中断向量表要重新定位。这一点很重要。
    4、 
要明确dsp软件开发的第一步是对可用存储空间的分析,存储空间分配好坏关系到一个dsp程序员的水平。对于dsp,我们有两种名称的存储空间,一种是物理空间,另一种是映射空间。物理空间是dsp上可以存放数据和程序的实际空间(包括外部存储器),我们的数据和程序最终放到物理空间上,但我们并不能直接访问它们。我们要访问物理空间,必须借助于映射空间才行!!但是映射空间本身是个“虚”空间,是个不存在的空间。所以,往往是映射空间远远大于实际的物理空间,有些映射空间,如io映射空间,它本身还代表了一种接口。只有那些物理空间映射到的映射空间才是我们真正可访问(读或写)的存储空间。
    5、 尽可能地减少除法运算,而尽可能多地使用乘法和加法运算代替。
    6、 
如果ti公司或第三方软件合作商提供了dsplib或其他的合法子程序库供调用,应尽可能地调用使用。这些子程序均使用用汇编写成,更为重要之处是通过了tms320算法标准测试。而且,常用的数字信号处理算法均有包括!!
    7、 尽可能地采用内联函数!!而不用一般的函数!!可以提高代码的集成度。
    8、 编程风格力求简炼!!尽可能用c语言而不用c++语言。我个人感到虽然c++终代码长了一些,好象对执行速度没有影响。
    9、 
因为在c5000中double型和float型均占有2个字,所以都可以使用,而且,可以直接将int型赋给float型或double型,但,尽可能地多使用int数据类型代替!这一点需要注意!!
    10、 程序最后至少要加上一个空行,编译器当这个空行为结尾提示符。
    11、 大胆使用位运算符,非常好用!!
2007.8.13 18:09 作者:wind 收藏 | 评论:0
CMD文件的作用
分类:默认栏目在DSP里,程序执行过程中也有好多地方需要跳转,所以需要跳转的目标地址。如果你在编程序时知道你所要跳转的地址,那就更好的,但实际上,这是很不好控制的。所以就产生了.CMD。它有一个最大的好处,可以把每个段分配地址,所以比如你想从一个段跳到另一个段的时候,就很方便的知道这个段的起始地址。 

CMD 
它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的rom和ram.放用户程序的地方也不尽相同.所以要根据你的芯片进行修改.cmd文件分两部分.MEMORY和SECTIONS. 

MEMORY 
{ 
  PAGE 0 .......... 
  PAGE 1......... 
} 
SECTIONS 
{SECTIONS 
{ 
.vectors ................. 
.reset ................. 
................ 
} 

MEMORY是用来指定芯片的rom和ram的大小和划分出几个区间. 
PAGE 0 对应rom;PAGE 1对应ram 
PAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址和长度. 
如: PAGE 0 : VECS(区间名字): origin(起始地址) = 0h , length (长度)=040h /*VECTORS*/ 
SECTIONS:(在程序里添加下面的段名如.vectors.用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。 

如引用字段名“.vectors ”的程序或数据将被放到VECS ,VECS是PAGE0即是ROM空间 00H至40H的地方 
SECTIONS 
{ 
.vectors : { } > VECS PAGE 0 /* Interrupt vector table */ 
.reset :   { } > VECS PAGE 0 /* Reset code */ 
............ 
} 
.vectors,.reset都是段名。  加不加“.”随你便,即.vectors表示名为  “.vectors”的段。 
{}表示段的全部,{}> VECS PAGE 0表示将段的全部放入名为 VECS PAGE 0的内存区。 
example: 
/****************************************************************************/ 

/******** Specify the memory configuration **********************************/ 

/****************************************************************************/ 

MEMORY 
{ 
PAGE 0: VECS: origin = 00000h, length = 00040h 
         LOW: origin = 00040h, length = 03FC0h 
       SARAM: origin = 04000h, length = 00800h 
          B0: origin = 0FF00h, length = 00100h 
PAGE 1: B0: origin = 00200h, length = 00100h 
        B1: origin = 00300h, length = 00100h 
        B2: origin = 00060h, length = 00020h 
     SARAM: origin = 08000h, length = 00800h 
} 
/*--------------------------------------------------------------------------*/ 
/* SECTIONS ALLOCATION  */ 
/*--------------------------------------------------------------------------*/ 
SECTIONS 
{ 
.text : { } > LOW PAGE 0 
.cinit : { } > LOW PAGE 0 
.switch : { } > LOW PAGE 0 
.const : { } > SARAM PAGE 1 
.data : { } > SARAM PAGE 1 
.bss : { } > SARAM PAGE 1 
.stack : { } > SARAM PAGE 1 
.sysmem : { } > SARAM PAGE 1 
} 
1,系统定义: 
.cinit 存放C程序中的变量初值和常量; 
.const 存放C程序中的字符常量、浮点常量和用const声明的常量; 
.switch 存放C程序中switch语句的跳针表; 
.text 存放C程序的代码; 
.bss 为C程序中的全局和静态变量保留存储空间; 
.far 为C程序中用far声明的全局和静态变量保留空间; 
.stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果; 
.sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间 
2,用户定义: 
#pragma CODE_SECTION (symbol, "section name"; 
#pragma DATA_SECTION (symbol, "section name" 



DSP的C语言的特殊性 
大家在使用51系列C语言时已经注意到,控制器的C语言和PC机上使用的C有一个显著的特点:经常要对硬件操作,程序中有大量针对控制器内部资源进行操作的语句。所以,开发者要明白怎样用C语言来操纵控制器的内部资源,既怎样用C语句操作寄存器和内部存储器等。 

举个例子,在51汇编中我们写 MOV A,#20H,汇编程序能够识别A是指累加器,而在51 C程序中我们写 
ACC=32;,编译器能够识别ACC是指累加器而不是一般的变量。即每一个寄存器都有一个专有名字供开发者使用,它们定义在一个头文件reg51.h 
中,程序员只需在程序的开始部分用#include“reg51.h”语句将该文件包含进来即可。注意:这些寄存器的名字不能用做变量名。 
同样,在TMS320F240的C语言中也有一个头文件C240.H定义各个寄存器的名称,这里摘录几条语句进行介绍。 
比如:#define IMR ((PORT)0x0004) 
#define XINT1_CR ((PORT)0x07070) 
IMR 
、XINT1_CR就对应两个寄存器,实际是寄存器的地址,用高级语言的说法是指针。我们也在程序的开始部分用#include“c240.h”语句将该文件包含进来。这样,在DSP的C语言中使用它们只需在前面加一个星号(*),例如, 

*IMR=0X1010;/* 将16进制数1010H赋给IMR寄存器 */ 
*XINT1_CR=0X0A0B0;/*将16进制数A0B0H赋给XINT1_CR寄存器 */ 

最好将c240.h这个文件打印出来,弄清楚各个寄存器的定义名称。 
TMS320F240芯片的C语言开发过程 
简单地说,整个过程包括以下五个步骤: 
1、编辑C语言源程序 
2、编译源程序(注意编译参数) 
3、链接目标文件(注意用CMD文件) 
4、在线仿真 
5、固化程序
2007.8.13 17:06 作者:wind 收藏 | 评论:0
电容的作用
分类:默认栏目1.电容器主要用于交流电路及脉冲电路中,在直流电路中电容器一般起隔断直流的作用。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -