0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

dsp tms320c6000基本作用的认识

ss 作者:工程师谭军 2018-09-07 10:16 次阅读

本文主要是关于dsp和tms320c6000的相关介绍,并着重对dsp和tms320c6000进行了详尽的阐述。

DSP

DSP是Digital Siginal Processor的简称。

(1)相对于PC等上的高端处理器,具有更低的功耗

(2)相对于PC等上的高端处理器,具有更低的价格

因此,在考虑价格、机械尺寸、低功耗以及“高频”处理时使用DSP是较好的选择。

相对于嵌入式ARM而言,DSP在信号处理上具有更大的优势,ARM偏向于控制。

在大部分的DSP算法中,乘积和(sum of product, SOP)是最基本的单元。

dsp tms320c6000基本作用的认识

DSP TMS320C6000的基本特性

TMS320C6000产品是美国TI公司于1997年推出的dsp芯片,该DSP芯片定点、浮点兼容,其中,定点系列是TMS320C62xx系列,浮点系列是TMS320C67xx系列,2000年3月,TI发布新的C64xx内核,主频为1.1GHz,处理速度9000MIPS,在图像处理和流媒体领域得到了广泛的应用。

C6000片内有8个并行的处理单元,分为相同的两组。DSP的体系结构采用超长指令字(vliw)结构,单指令字长为32位,指令包里有8条指令,总字长达到256位。执行指令的功能单元已经在编译时分配好,程序运行时通过专门的指令分配模块,可以将每个256为的指令包同时分配到8个处理单元,并有8个单元同时运行。芯片最高时钟频率为300MHz(67xx系列),且内部8个处理单元并行运行时,其最大处理能力可达到1600MIPS。

dsp tms320c6000与gel文件

什么是gel文件?gel文件能干什么?

gel全称General Extended Language,即通用扩展语言文件,gel文件中由类似C语言的代码构成,gel语言是一种解释性语言,gel文件扩展名为.gel;

gel文件用于(1)扩展CCS功能,比如菜单选项等,(2)通过gel可以访问目标板的存储器。

1. gel基本语法——类C

gel函数和gel参数不需要在DSP程序中定义。gel具有C语言的很多相似的东西:函数、return语句、if-else语句、while语句、与C一样的注释方式、#define,这些函数或语句的用法也与C中的非常类似。

GEL函数

funcName(param1 “discription” [,param2 “discription”, param3 “discription”,。。.])

{

statements;

}

gel函数中不用声明返回类型和参数类型,但函数中可以使用return语句返回;

参数使用“参数+字符串类型的描述”组成,参数不需要定义,可以是以下的任意一种:实际/仿真的DSP目标板的符号值;数字常量(表达式或常值);字符串常量。

GEL函数调用:通常可以在输入C表达式的任意地方调用GEL函数,也可以在另一个GEL函数中调用GEL函数。GEL函数无法递归调用。

GEL语句

返回语句:

return [expression];

条件语句:

if (exp)

statements 1;

else

statements 2;

循环语句:

while (exp) {

statements;

}

GEL预处理

#define identifier(arguments list) token-expression

GEL注释

// 注释

/* 注释 */

2. gel特有关键字

menuitem/hotmenu

在CCS v4.2中测试,menuitem添加Scripts菜单下的子菜单项,hotmenu添加menuitem定义菜单项的子菜单项,参考本文后面的例子。

这两个关键字声明的函数都不需要参数,比如

menuitem “Addressing Modes”;

hotmenu C27x_Mode()

{

AMODE = 0;

OBJMODE = 0;

}

hotmenu C28x_Mode()

{

AMODE = 0;

OBJMODE = 1;

}

hotmenu C2xLP_Mode()

{

AMODE = 1;

OBJMODE = 1;

}

上面代码将产生如下的菜单结构,

Scripts

- Addressing Modes

- C27x_Mode

- C28x_Mode

- C2xLP_MODE

dialog

向menuitem定义的菜单中添加一个入口子菜单,并在点击子菜单时弹出对话框。

menuitem “MyFunc”

dialog InitTarget(StartAddr “Starting Address”, EndAddr “Ending Address”)

{

statements;

}

dialog RefreshTarget()

{

statements;

}

slider

添加滑动条,每次移动滑动条都用滑动条上的新值重新调用GEL文件,定义格式如下,

slider param_def(minVal, maxVal, increment, pageIncrement, paramName)

{

statements;

}

3. gel文件的例子

/*

* This GEL file (DSP621x_671x.gel) provides example code on how to

* reset the C6x DSP and initialize the External Memory Interface.

*

* You will have to edit settings in emif_init() to your own

* specifications as the example is applicable to the C6711 DSK.

*

* This file is has minimal functionality and is designed to be used

* as a starting point for custom GEL files.

*

* Refer to CCS Help for detailed information on GEL commands.

*

*/

/*

* The StartUp() function is called every time you start Code Composer.

* It should only include functions that do not “touch the hardware” -

* Hardware initialization should be invoked from the OnTargetConnect()

* function or the GEL menu.

*/

StartUp()

{

/* setMemoryMap;

this should be a function to initialize the mem map based

on the particular hardware that is used

*/

}

/*--------------------------------------------------------------*/

/* OnTargetConnect() -- this function is called after a target */

/* connect. */

/*--------------------------------------------------------------*/

OnTargetConnect()

{

/* GEL_Reset is used to deal with the worst case senario of

unknown target state. If for some reason a reset is not

desired upon target connection, GEL_Reset may be removed

and replaced with something “less brutal” like a cache

initialization function

GEL_Reset();

*/

}

OnReset(int nErrorCode){

/* emif_init(); */

}

/*

* OnPreFileLoaded()

* This function is called automatically when the ‘Load Program’

* Menu item is selected 。。.。。

*/

OnPreFileLoaded()

{

CleanCache();

}

/*

* CleanCache()

* Actually Invalidate L1D, L1P, and L2

*/

CleanCache() {

*(int *)0x01845004 = 1;

}

emif_init()

{

/*---------------------------------------------------------------------------*/

/* EMIF REGISTERS */

/*---------------------------------------------------------------------------*/

#define EMIF_GCTL 0x01800000

#define EMIF_CE1 0x01800004

#define EMIF_CE0 0x01800008

#define EMIF_CE2 0x01800010

#define EMIF_CE3 0x01800014

#define EMIF_SDRAMCTL 0x01800018

#define EMIF_SDRAMTIMING 0x0180001C

#define EMIF_SDRAMEXT 0x01800020

/*---------------------------------------------------------------------------*/

/* EMIF REGISTER VALUES - these should be modified to match TARGET hardware */

/*---------------------------------------------------------------------------*/

*(int *)EMIF_GCTL = 0x00003040;/* EMIF global control register */

*(int *)EMIF_CE1 = 0xFFFFFF23; /* CE1 - 32-bit asynch access after boot*/

*(int *)EMIF_CE0 = 0xFFFFFF30; /* CE0 - SDRAM */

*(int *)EMIF_CE2 = 0xFFFFFF23; /* CE2 - 32-bit asynch on daughterboard */

*(int *)EMIF_CE3 = 0xFFFFFF23; /* CE3 - 32-bit asynch on daughterboard */

*(int *)EMIF_SDRAMCTL = 0x07117000; /* SDRAM control register (100 MHz)*/

*(int *)EMIF_SDRAMTIMING = 0x0000061A; /* SDRAM Timing register */

}

上面的gel来自于CCS v4安装目录下ccsv4\emulation\gel\DSP621x_671x.gel文件,上面不仅使用了#define定义寄存器地址,还使用了类似C中的指针对EMIF(外部存储器接口)进行配置。

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

/* Code Composer Studio supports five reserved GEL functions that */

/* automatically get executed if they are defined. They are: */

/* */

/* StartUp() - Executed whenever CCS is invoked */

/* OnReset() - Executed after Debug-》Reset CPU */

/* OnRestart() - Executed after Debug-》Restart */

/* OnPreFileLoaded() - Executed before File-》Load Program */

/* OnFileLoaded() - Executed after File-》Load Program */

/* */

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

StartUp()

{

/* Initialize F2812 memory map */

GEL_Reset();

F2812_Memory_Map();

/* Enable_DFT(); */

GEL_TextOut(“Gel StartUp Complete.\n”);

}

OnReset(int nErrorCode)

{

Enable_DFT();

}

/* commented out to avoid execution

OnRestart(int nErrorCode)

{

}

OnPreFileLoaded()

{

}

OnFileLoaded(int nErrorCode, int bSymbolsOnly)

{

}

*/

menuitem “Initialize Memory Map”;

/*------------------- F2812 Memory Map, MPNMC=0 --------------------*/

/* */

/* Note: M0M1MAP and VMAP signals tied high on F2812 core */

/* */

/* 0x000000 - 0x0007ff M0/M1 SARAM (Prog and Data) */

/* 0x000800 - 0x000fff Peripheral Frame0 (PF0) (Data only) */

/* 0x002000 - 0x003fff XINTF ZONE 0 (Prog and Data) */

/* 0x004000 - 0x005fff XINTF ZONE 1 (Prog and Data) */

/* 0x006000 - 0x006fff Peripheral Frame1 (PF1) (Data only) */

/* 0x007000 - 0x007fff Peripheral Frame2 (PF2) (Data only) */

/* 0x008000 - 0x009fff L0/L1 SARAM (Prog and Data) */

/* 0x080000 - 0x0fffff XINTF ZONE 2 (Prog and Data) */

/* 0x100000 - 0x17ffff XINTF ZONE 6 (Prog and Data) */

/* 0x3d7800 - 0x3d7fff OTP (Prog and Data) */

/* 0x3d8000 - 0x3f7fff FLASH (Prog and Data) */

/* 0x3f8000 - 0x3f9fff H0 SARAM (Prog and Data) */

/* 0x3fc000 - 0x3fffff XINTF ZONE 7 (MPNMC=1) (Prog and Data) */

/* 0x3ff000 - 0x3fffff BOOT ROM (MPNMC=0) (Prog and Data) */

/*------------------------------------------------------------------*/

hotmenu F2812_Memory_Map()

{

GEL_MapReset();

GEL_MapOn();

/* Program memory maps */

GEL_MapAdd(0x0,0,0x800,1,1); /* M0/M1 SARAM */

GEL_MapAdd(0x2000,0,0x2000,1,1); /* XINTF ZONE 0 */

GEL_MapAdd(0x4000,0,0x2000,1,1); /* XINTF ZONE 1 */

GEL_MapAdd(0x8000,0,0x2000,1,1); /* L0/L1 SARAM */

GEL_MapAdd(0x80000,0,0x80000,1,1); /* XINTF ZONE 2 */

GEL_MapAdd(0x100000,0,0x80000,1,1); /* XINTF ZONE 6 */

GEL_MapAdd(0x3d7800,0,0x800,1,0); /* OTP */

GEL_MapAdd(0x3d8000,0,0x20000,1,0); /* FLASH */

GEL_MapAdd(0x3f8000,0,0x2000,1,1); /* H0 SARAM */

/* Data memory maps */

GEL_MapAdd(0x0,1,0x800,1,1); /* M0/M1 SARAM */

GEL_MapAdd(0x800,1,0x800,1,1); /* PF0 */

GEL_MapAdd(0x2000,1,0x2000,1,1); /* XINTF ZONE 0 */

GEL_MapAdd(0x4000,1,0x2000,1,1); /* XINTF ZONE 1 */

GEL_MapAdd(0x6000,1,0x1000,1,1); /* PF1 */

GEL_MapAddStr(0x7000,1,0x1000,“R|W|AS2”,0); /* PF2 */

GEL_MapAdd(0x8000,1,0x2000,1,1); /* L0/L1 SARAM */

GEL_MapAdd(0x80000,1,0x80000,1,1); /* XINTF ZONE 2 */

GEL_MapAdd(0x100000,1,0x80000,1,1); /* XINTF ZONE 6 */

GEL_MapAdd(0x3d7800,1,0x800,1,0); /* OTP */

GEL_MapAdd(0x3d8000,1,0x20000,1,0); /* FLASH */

GEL_MapAdd(0x3f8000,1,0x2000,1,1); /* H0 SARAM */

/* Uncomment the map that corresponds to the MPNMC value. */

F2812_Boot_ROM_Map();

/* F2812_XINTF_Zone7_Map(); */

}

/* Map Boot ROM if MPNMC = 0 */

F2812_Boot_ROM_Map()

{

GEL_MapAdd(0x3ff000,0,0x1000,1,0); /* BOOT ROM */

GEL_MapAdd(0x3ff000,1,0x1000,1,0); /* BOOT ROM */

}

/* Map External Interface Zone 7 if MPNMC = 1 */

F2812_XINTF_Zone7_Map()

{

GEL_MapAdd(0x3fc000,0,0x4000,1,1); /* XINTF ZONE 7 */

GEL_MapAdd(0x3fc000,1,0x4000,1,1); /* XINTF ZONE 7 */

}

/* Enable DFT read/write for SARAM blocks */

Enable_DFT()

{

*0x950 = 0x0300; /* M0 */

*0x951 = 0x0300; /* M1 */

*0x952 = 0x0300; /* L0 */

*0x953 = 0x0300; /* L1 */

*0x954 = 0x0300; /* H0 */

}

menuitem “Watchdog”;

hotmenu Disable_WD()

{

/* Enable WD override */

*0x7029 = *0x7029 | 0x0068;

*0x7025 = 0x0055;

*0x7025 = 0x00AA;

}

menuitem “Code Security Module”

hotmenu Unlock_CSM()

{

/* Assumes flash is erased */

*0xAE0 = 0xFFFF;

*0xAE1 = 0xFFFF;

*0xAE2 = 0xFFFF;

*0xAE3 = 0xFFFF;

*0xAE4 = 0xFFFF;

*0xAE5 = 0xFFFF;

*0xAE6 = 0xFFFF;

*0xAE7 = 0xFFFF;

/* Read the password locations */

XAR0 = *0x3F7FF8;

XAR0 = *0x3F7FF9;

XAR0 = *0x3F7FFA;

XAR0 = *0x3F7FFB;

XAR0 = *0x3F7FFC;

XAR0 = *0x3F7FFD;

XAR0 = *0x3F7FFE;

XAR0 = *0x3F7FFF;

}

menuitem “Addressing Modes”;

hotmenu C27x_Mode()

{

AMODE = 0;

OBJMODE = 0;

}

hotmenu C28x_Mode()

{

AMODE = 0;

OBJMODE = 1;

}

hotmenu C2xLP_Mode()

{

AMODE = 1;

OBJMODE = 1;

}

上面的代码是DSP320F2812的一个GEL文件,上面添加了许多菜单项:

Scripts

- Initialize Memory Map

- F2812_Memory_Map

- Watchdog

- Disable_WD

- Code Security Module

- Unlock_CSM

- Addressing Modes

- C27x_Mode

- C28x_Mode

- C2xLP_Mode

结果的一个截图如下,

dsp tms320c6000基本作用的认识

4. 关于GEL文件中的一些函数

StartUp

启动CCS时执行该函数,此时目标板可能还没有连接,该调用如果有对目标板的操作则会出错。

OnTargetConnect

连接目标板(点击Connect Target时)时执行。

OnReset

执行Reset命令时执行。

OnRestart

执行Restart命令时执行。

OnFileLoaded

执行Load File.。.命令时执行。

结语

关于dsp和tms320c6000的相关介绍就到这了,如有不足之处欢迎指正。

相关阅读推荐:TMS320C6000 DSP的编程实现

相关阅读推荐:DSP芯片的特点与分类

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    544

    文章

    7682

    浏览量

    344348
  • TMS320C6000
    +关注

    关注

    0

    文章

    66

    浏览量

    15671
收藏 人收藏

    评论

    相关推荐

    基于TMS320C6000的串行通信扩展方法

    基于TMS320C6000的串行通信扩展方法 from hellodsp
    发表于 09-08 21:03

    急求TMS320C6000系列DSP的书

    麻烦大神们推荐本TMS320C6000系列DSP的书,要里面程序多些的应用书籍,之前学过只有理论的。还有有关DSP汇编编程的书,谢谢各位了
    发表于 11-09 23:42

    TMS320C6000扩展总线与MPC860微处理器接口

    本应用指南描述了实现德克萨斯仪器TMS320C6000 DSP扩展总线与摩托罗拉MPC860微处理器接口的方法。
    发表于 09-23 17:04

    TMS320C6000系列DSP的CPU与外设

    介绍TMS320C6000系列DSP的CPU与外设,一共有3个部分
    发表于 05-15 09:00

    TMS320C6000 DSP高级技术以及应用

    该课程是我在华清远见学习而来的,因为华清远见还是很权威的,所以我想分享给你们一些学习资料,可以帮助那些不会不懂的人来学习。这个资料主要有:TMS320C6000的关键技术ccs的使用bios核心技术dma关键外设使用现场编程演示可以下载学一学,而且我听说咨询客服可以得到更多学习资料。
    发表于 05-16 11:51

    请问TMS320C6000系列dsp的未使用管脚如何处理?

    TMS320C6000系列的dsp(比如TMS320C6416)的未使用管脚如何处理?
    发表于 01-14 08:08

    TMS320C6000资料

    TMS320C6000资料
    发表于 03-25 16:00 76次下载

    基于TMS320C6000和同步FIFO的多DSP系统设计与

    处理器间的通信能力不足是制约TMS320C6000 DSP实现多节点并行处理的主要原因,因此如何实现DSP间的高速通信是设计基于TMS32OC6000的多
    发表于 05-09 14:23 30次下载

    TMS320C6000 系列DSP 的C 代码优化方法

    TMS320C6000 系列DSP 的C 代码优化方法
    发表于 05-15 14:36 31次下载

    TMs320C6000系列DSPs原理与应用

    TMs320C6000系列DSPs原理与应用
    发表于 05-09 10:59 48次下载

    TMS320C6000 Optimizing Compiler

    TMS320C6000 Optimizing Compiler v7.4
    发表于 08-08 18:27 18次下载

    TMS320C6000 Programmer’s Guide

    TMS320C6000 Programmer’s Guide
    发表于 08-08 18:27 33次下载

    基于TMS320C6000系列DSP的Flash编程方法

    基于TMS320C6000系列DSP的Flash编程方法
    发表于 10-19 11:37 7次下载
    基于<b class='flag-5'>TMS320C6000</b>系列<b class='flag-5'>DSP</b>的Flash编程方法

    TMS320C6000系列DSP主机引导方式的实现

    TMS320C6000系列DSP主机引导方式的实现
    发表于 10-20 09:19 16次下载
    <b class='flag-5'>TMS320C6000</b>系列<b class='flag-5'>DSP</b>主机引导方式的实现

    基于TMS320C6000的优化策略分享

    分享到:标签:TMS320C6000 优化编程 DSP 1 TMS320C6000的硬件设计和指令系统 TMS320C6000系列DSP(数
    发表于 10-25 11:48 2次下载
    基于<b class='flag-5'>TMS320C6000</b>的优化策略分享