1、CCS程序设计和DSP硬件实验实验项目5、CCS程序设计与DSP硬件实验一、实验目的(1)掌握CCS环境下程序编辑、编译、运行、下载、调试的过程。(2)掌握DSP处理器的汇编、C语言程序设计方法。(3)掌握DSP的硬件访问。二、 实验原理及知识点第一部分 DSP实验箱简介与CCS第二部分 CCS 软件安装第三部分 TDS510USB仿真器安装与CCS设置测试三、实验内容及步骤一、实验原理和方法开发 TMS320C6xxx 应用系统一般需要以下几个调试工具来完成:1.软件集成开发环境(CCS):完成程序编译、目标文件产生、下载,进行程序和硬件的联合仿真调试。2.仿真器:实现硬件仿真调试时与硬件系
2、统的通信、控制和读取硬件系统的状态和数据。CCS 通过工程来管理文件,一般包括以下几种文件:1) 源程序文件:C 语言或汇编语言文件(*.c 或*.asm),所编写的代码都写在各个源文件中;包含了所有要实现功能的代码,是工程的核心。2) 头文件(*.h):主要定义了芯片内部寄存器结构、中断服务程序等内容。3) 链接命令文件(*.cmd):分配RAM空间,用来将下载到RAM中的程序进行调试,是因为DSP编译器编译结果是未定位的,DSP也没有相应系统来执行代码,DSP系统的配置需求也不尽相同,因此需要定义代码的存储位置。4) 库文件(*.lib,*.obj):包含了寄存器的地址和对应标示符的定义,
3、还包含标准C/C+运行支持的库函数。二汇编语言DSP程序设计实验(一)实验原理与方法 1.汇编语言程序在执行时直接从用户指定入口开始。 2.由于CCS的代码链接器默认支持C 语言,在编制汇编语言程序时,需要设置链接参数,选择非自动初始化,注明汇编程序的入口地址。(二)实验步骤与内容1.运行 CCS Setup连接实验箱与PC机,打开电源给实验箱供电,点击setup code composer studio v3.3,运行 CCS Setup,设置CCS,就是建立CCS与用户的目标板或软仿真器之间的通信。保存配置。2.启动 CCS3. 在C:CCStudio_v3.3MyProjects下新建一
4、个文件夹:myasm。创建工程4. 设置工程编译选项 选择CCS菜单project-Build Options,点击Linker页,设置Autoinit Model为:No Autoinitialization(这点是与C语言程序设计不同)注意:若省略这一步,也不影响程序建立,只不过会出现警告:warning: entry point symbol _c_int00 undefined5. 输入源程序1)输入汇编源程序 选择File-New-Source File或使用工具条的快捷按钮,进入文件编辑窗口。录入汇编源程序: ;* ; 输入数据存放在:x,y ; 本例程完成运算:x+y ; 结果存
5、放:z ; 其中:x,y,z都占32位 ;* .bss x, 4 ;排版要空一格,下同 .bss y, 4 .bss z, 4 ;.def start ;.def x, y, z .textstart: ;排版要顶格 mvkl x, A0;立即寻址,将变量x 的值放到寄存器A0 mvkh x, A0;立即寻址,将变量x 的值放到寄存器A0 mvkl y, B0;立即寻址,将变量y 的值放到寄存器B0 mvkh y, B0;立即寻址,将变量y 的值放到寄存器B0 mvkl z, B2;立即寻址,将变量z 的值放到寄存器B2 mvkh z, B2;立即寻址,将变量z 的值放到寄存器B2 mvkl
6、0x010a0f2a, A4;给A4 低16位赋值 mvkh 0x010a0f2a, A4;给A4 高16位赋值 mvkl 0x1ab31211, B4;给B4 低16位赋值 mvkh 0x1ab31211, B4;给B4 高16位赋值 stw A4, *A0;A4存入A0所指地址单元 nop 5 stw B4, *B0;B4存入B0所指地址单元 nop 5 ldw *A0, B1 ;将A0寻址单元的值读入B1 nop 5 ;避免流水线冲突 ldw *B0, A1;将B0寻址单元的值读入A1 nop 5 add A1, B1, A2 ;加法运算:A1+B1-A2 stw A2, *B2 ; 将
7、A2的值存入B2所指地址单元 b $ ;一直在这里跳转,注意:b后有一个空格注意:汇编语句前需要留出空格,标号顶格输入,否则编译有错误提示。保存源程序到工程目录下,保存文件为:myasm.asm2)输入链接命令文件点击“File/New/Source File”或使用工具条的快捷按钮,进入文件编辑窗口。输入链接命令文件内容:-stack 400-heap 400MEMORY ISRAM : origin = 0x0, len = 0x1000000SECTIONS .vectors ISRAM .text ISRAM .bss ISRAM .cinit ISRAM .const ISRAM .
8、far ISRAM .stack ISRAM .cio ISRAM .sysmem ISRAM保存源程序到工程目录下,命名为myasm.cmd。6. 将上述编辑的源程序myasm.asm和链接命令文件myasm.cmd加入工程myasm.pjt。7. 编译源文件、建立目标文件(.out)点击菜单project-compile file,可以对文件进行编译再点击菜单Project-Build,建立目标文件成功建立的文件应该是错误和警告都为0. 8调用目标文件(调用编程可执行程序) 1)连接仿真器与目标板点击: Debug-connect,连接成功后,CCS左下角有提示。 Connect连接之后,
9、选择File-Load Program,选择myasmdebugmyasm.out,点击Debug-Restart后PC此时指向00000000 00000000地址。9.调试1)goto main2)设置断点在需要设置断点的行前双击鼠标,则在行前出现红色的原点,表示设置了断点;若在已经设置了断点的行前双击鼠标,则可以取消该断点。3)单步运行 用菜单debug-Step Into或F11可以单步运行。10. 观察开启CPU寄存器观察窗口:单击菜单ViewRegisterscore。使用单步运行,查看相应寄存器的值的变化。还可开启Watch window,Memory窗口,进行变量、存储空间的观
10、察。点击view-watch window,则打开观察窗口11. 退出CCS三C语言DSP程序设计实验(一)实验原理与方法1. 标准C 语言程序CCS 支持使用标准C 语言开发DSP 应用程序。C源程序文件名的后缀应为.c。CCS 在编译标准C 语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP 的可执行代码。最后生成的是COFF 格式的可下载到DSP 中运行的文件,其文件名后缀为.out。由于使用C 语言编制程序,其中调用的标准C 的库函数由专门的库提供,在编译链接时编译系统还负责构建C 运行环境。所以用户工程中需要注明使用C 的支持库。2. 命令文件的作用命令文件(文件名
11、后缀为cmd)为链接程序提供程序和数据在具体DSP 硬件中的位置分配信息。通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP 所管理的内存中。命令文件也为链接程序提供了DSP 外扩存储器的描述。在程序中使用CMD 文件描述硬件存储区,可以只说明使用部分,但只要是说明的,必须和硬件匹配,也就是只要说明的存储区必须是存在的和可用的。3. 内存映射(map)文件的作用为了更精确地使用ROM 空间,我们就需要知道程序的大小和位置,通过建立目标程序的map 文件可以了解DSP 代码的确切信息。当需要更改程序和数据的大小和位置时,就要适当修改cmd 文件和源程序,再重新生成map
12、文件来观察结果。另外,通过观察map文件,可以掌握DSP 存储器的使用和利用情况,以便进行存储器方面的优化工作。(二)实验步骤与内容1. 准备将DSP实验设备与硬件仿真器相连接,连接电源线,打开电源开关。2设置CCS 在硬件仿真(Emulator)方式下运行,选择实际的仿真器。3.启动CCS环境4创建工程。 选择菜单Project-New,创建ctest.pjt工程5建立源文件1)建立C语言源程序文件。选择FILE-New-Source,输入下列C代码,保存到文件ctest.c。int sel_max(int a, int b);void main() int x; int y; int z;
13、 x = 21; y = 98; while(1) z=sel_max(x,y); /函数调用 int sel_max(int a, int b) return(a=b)?a:b);2)建立链接命令文件点击“File/New/Source File”或使用工具条的快捷按钮,打开编辑窗,建立ctest.cmd文件,内容如下:-stack 400-heap 400MEMORY ISRAM : origin = 0x0, len = 0x1000000SECTIONS .vectors ISRAM .text ISRAM .bss ISRAM .cinit ISRAM .const ISRAM .f
14、ar ISRAM .stack ISRAM .cio ISRAM .sysmem ISRAM6.工程添加文件 点击菜单Project-Add Files to project,分别加入ctest.c,ctest.cmd文件,再向工程添加C:CCStudio_v3.3C6000cgtoolslib下的文件rts6400.lib(这点与汇编程序设计不同)(注意:若不添加,则链接时会出现警告:warning: entry point symbol _c_int00 undefined)7编译、建立目标文件 产生ctest.out8.调用编程可执行程序1)连接仿真器与目标板点击: Debug-conn
15、ect,连接成功后,CCS左下角有提示。2)选择File-Load Program,选择ctestdebugctest.out。9.调试 1)执行至C语言主程序入口点击Debug-go main。2)设置断点在需要设置断点的行前双击鼠标,则在行前出现红色的原点,表示设置了断点;若在已经设置了断点的行前双击鼠标,则可以取消该断点。3)单步运行 用菜单debug-Step Into或F11可以单步运行。 4)全速运行 用菜单debug-Run或F5可以全速运行。10. 观察开启CPU寄存器观察窗口:单击菜单ViewRegisterscore。使用单步运行,查看相应寄存器的值的变化。还可开启Watc
16、h window,Memory窗口,进行变量、存储空间的观察11.关闭工程 点击Project-Close。12. 退出CCS四、GPIO实验(一)实验原理和方法GPIO 作为通用输入/输出接口,有着广泛的应用。简单配置后,即可用来控制和接口各种外设。对于和别的管脚复用的GPIO,首先需要使能GPIO 功能,然后配置成输入或输出方向后,才能对其控制。DM642 DSP 的McASP 寄存器的AHCLKX 引脚驱动DS6 灯,PFUNC、PDIR、PDOT 如下表所示:本实验中,使用了AHCLKX, 对其置1 或置0 可以点亮或熄灭DS6 灯。其连接电路如下图所示:(二)实验内容与步骤1. 运行
17、 CCS Setup,选择设置实际的实验室硬件仿真器,即platform选“TDS510USB PLUS Emulator”,Family选“C64xx”,available factory boars选“C64xx Rev 1.1 TDS510USB plus emulator-WintechDigital”2.启动 CCS3.新建gpio文件夹,路径为:C:CCStudio_v3.3MyProjectsgpio,创建工程建立工程 gpio.pjt 4.准备1)设置 Project - Build Options - Preprocessor,在include search path中加入:
18、C:CCStudio_v3.3MyProjectsgpiogpio,在Pre-define Symbols 中加入:_DEBUG;CHIP_DM642。如图:2)复制库文件复制C:TS-DM64XTS-DM64xexperimentccs3.3TS-DM64x_exampleslib下的文件evmdm642bsl.lib到当前工程gpio目录下,并添加到工程中。或者直接在工程的lib上点击添加C:TS-DM64XTS-DM64xexperimentccs3.3TS-DM64x_exampleslib下的库文件evmdm642bsl.lib到工程中。5. 输入程序1)输入源程序gpio.c,选择
19、File-New-Source File或使用工具条的快捷按钮,进入文件编辑窗口。录入源程序:#include #include #include#include #define GPEN *(volatile unsigned int *)0x01b4c010 / MCASP PFUNC Register#define GPDIR *(volatile unsigned int *)0x01b4c014 / MCASP PDIR Register#define GPVAL *(volatile unsigned int *)0x01b4c018 / MCASP PDOUT Register/
20、*mcasp ahclkx-DS6 */main() unsigned int i; EVMDM642_init(); /*- 初始化GPIO -*/ GPEN = 0x8000000; /使能 GPDIR = 0x8000000; /设置输出 /*- 置MCASP PDOUT Registe为0或1 -*/ GPVAL = 0x00000; /设置GP0的值0,能够将DS6熄灭 for (i = 0; i 0xfffff; i+); while(1) GPVAL = 0x8000000; /点亮 for(i = 0; i 0xffffff; i+); /延时 GPVAL = 0x00000;
21、 /熄灭 for(i = 0; i New-Source File,新建包含文件evmdm642.h,其内容如下:#ifndef EVMDM642_#define EVMDM642_#ifdef _cplusplusextern C #endif#include #include #include /* * Note: Bit definitions for each register field * needs to be supplied here for the CPLD * and other board periperals. */* Compatability definition
22、s */#define NULL 0/* CPLD address definitions */#define EVMDM642_CPLD_BASE 0x90080000#define EVMDM642_SYNC_BASE 0xb0000000#define EVMDM642_FPGAFLASH_BASE 0x90040000#define EVMDM642_FPGASDRAM_BASE 0x80000000/* CPLD Register Indices */*#define EVMDM642_OSDCTRL 0x10#define EVMDM642_THRESHLSB 0x11#defin
23、e EVMDM642_THRESHMSB 0x12#define EVMDM642_ISR 0x13#define EVMDM642_IER 0x14#define EVMDM642_GPIODIR 0x15#define EVMDM642_GPIOSTAT 0x16#define EVMDM642_LED 0x17#define EVMDM642_FLASHPAGE 0x18#define EVMDM642_REVISION 0x1F*/#define EVMDM642_LED1 0x28 / DS13 address when using EPLD#define EVMDM642_LED4
24、 0x38 / DS4 address when using EPLD/* FPGA definitions */#define EVMDM642_FPGALEN 0x393d8/* I2C handle */extern I2C_Handle EVMDM642_I2C_hI2C;/* GPIO handle */extern GPIO_Handle EVMDM642_GPIO_hGPIO;/* Initialize all board APIs */void EVMDM642_init();/* Read an 8-bit value from a CPLD register */Uint8
25、 EVMDM642_rget(Int16 regnum);/* Write an 8-bit value to a CPLD register */void EVMDM642_rset(Int16 regnum, Uint8 regval);/* Spin in a delay loop for delay iterations */void EVMDM642_wait(Uint32 delay);/* Spin in a delay loop for delay microseconds */void EVMDM642_waitusec(Uint32 delay);/* Send a con
26、figuration file to the FPGA */void EVMDM642_loadFpga(Uint32 fpgaaddr);/* Initialize keyboard */int keyboard_init(void);#ifdef _cplusplus#endif#endif保存到工程gpio.prt所在文件夹下,名为evmdm642.h。3)输入链接命令文件点击“File/New/Source File”或使用工具条的快捷按钮,进入文件编辑窗口。输入链接命令文件内容:/* * Copyright 2001 by Texas Instruments Incorporated
27、. * All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclose this code are * granted through contract. */*-l .librts6400.lib*/-l cslDM642.lib-l rts6400.lib-stack 0x400-heap 0x400MEMORY ISRAM : origin = 0x0, len = 0x1000000SECTIONS .vectors IS
28、RAM .text ISRAM .bss ISRAM .cinit ISRAM .const ISRAM .far ISRAM .stack ISRAM .cio ISRAM .sysmem ISRAM保存源程序到工程目录下,命名为gpio.cmd。6向工程添加文件将源程序gpio.C,链接命令文件gpio.cmd, evmdm642.h加入工程gpio.pjt。7. 编译源文件、建立目标文件(.out),连接connect产生gpio.out8调用编程可执行程序 选择File-Load Program,选择gpiodebuggpio.out。9.调试 用菜单debug-Step Into或F11可以单步运行。10.观察实验结果能够点亮火熄灭DS6发光二极管。11. 退出CCS四、实验仪器与软件(1) PC计算机(2) 多媒体通信实验箱(3) DSP仿真器(4) 音视频连线、耳麦
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1