CCS程序设计与DSP硬件实验

更新时间:2023-11-15 09:31:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验项目5、CCS程序设计与DSP硬件实验

一、实验目的

(1)掌握CCS环境下程序编辑、编译、运行、下载、调试的过程。 (2)掌握DSP处理器的汇编、C语言程序设计方法。 (3)掌握DSP的硬件访问。

二、 实验原理及知识点

第一部分 DSP实验箱简介与CCS 第二部分 CCS 软件安装

第三部分 TDS510USB仿真器安装与CCS设置测试

三、实验内容及步骤

一、实验原理和方法

开发 TMS320C6xxx 应用系统一般需要以下几个调试工具来完成:

1.软件集成开发环境(CCS):完成程序编译、目标文件产生、下载,进行程序和硬件的联合仿真调试。

2.仿真器:实现硬件仿真调试时与硬件系统的通信、控制和读取硬件系统的状态和数据。 CCS 通过工程来管理文件,一般包括以下几种文件:

1) 源程序文件:C 语言或汇编语言文件(*.c 或*.asm),所编写的代码都写在各个源文件中;包含了所有要实现功能的代码,是工程的核心。

2) 头文件(*.h):主要定义了芯片内部寄存器结构、中断服务程序等内容。

3) 链接命令文件(*.cmd):分配RAM空间,用来将下载到RAM中的程序进行调试,是因为DSP编译器编译结果是未定位的,DSP也没有相应系统来执行代码,DSP系统的配置需求也不尽相同,因此需要定义代码的存储位置。

4) 库文件(*.lib,*.obj):包含了寄存器的地址和对应标示符的定义,还包含标准C/C++运行支持的库函数。

二.汇编语言DSP程序设计实验 (一)实验原理与方法

1.汇编语言程序在执行时直接从用户指定入口开始。 2.由于CCS的代码链接器默认支持C 语言,在编制汇编语言程序时,需要设置链接参数,选择非自动初始化,注明汇编程序的入口地址。 (二)实验步骤与内容

1.运行 CCS Setup

连接实验箱与PC机,打开电源给实验箱供电,点击setup code composer studio v3.3,运行 CCS Setup,设置CCS,就是建立CCS与用户的目标板或软仿真器之间的通信。

保存配置。

2.启动 CCS

3. 在C:\\CCStudio_v3.3\\MyProjects下新建一个文件夹:myasm。

创建工程

4. 设置工程编译选项

选择CCS菜单project->Build Options,点击Linker页,设置Autoinit Model为:No Autoinitialization(这点是与C语言程序设计不同) 注意:若省略这一步,也不影响程序建立,只不过会出现警告:warning: entry point symbol _c_int00 undefined

5. 输入源程序 1)输入汇编源程序

选择File->New->Source File或使用工具条的快捷按钮,进入文件编辑窗口。 录入汇编源程序:

;********************************** ; 输入数据存放在:x,y ; 本例程完成运算:x+y ; 结果存放:z

; 其中:x,y,z都占32位

;********************************* .bss x, 4 ;排版要空一格,下同 .bss y, 4 .bss z, 4 ;.def start ;.def x, y, z

.text

start: ;排版要顶格

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 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 ; 将A2的值存入B2所指地址单元 b $ ;一直在这里跳转,注意:b后有一个空格

注意:汇编语句前需要留出空格,标号顶格输入,否则编译有错误提示。 保存源程序到工程目录下,保存文件为:myasm.asm

2)输入链接命令文件

点击“File/New/Source File”或使用工具条的快捷按钮,进入文件编辑窗口。输入链接命令文件内容:

-stack 400 -heap 400 MEMORY {

ISRAM : origin = 0x0, len = 0x1000000 }

SECTIONS {

.vectors > ISRAM .text > ISRAM

.bss > ISRAM .cinit > ISRAM .const > ISRAM .far > ISRAM .stack > ISRAM .cio > ISRAM .sysmem > ISRAM }

保存源程序到工程目录下,命名为myasm.cmd。

6. 将上述编辑的源程序myasm.asm和链接命令文件myasm.cmd加入工程myasm.pjt。

11.关闭工程

点击Project->Close。 12. 退出CCS

四、GPIO实验

(一)实验原理和方法

GPIO 作为通用输入/输出接口,有着广泛的应用。简单配置后,即可用来控制和 接口各种外设。

对于和别的管脚复用的GPIO,首先需要使能GPIO 功能,然后配置成输入或输出 方向后,才能对其控制。

DM642 DSP 的McASP 寄存器的AHCLKX 引脚驱动DS6 灯,PFUNC、PDIR、 PDOT 如下表所示:

本实验中,使用了AHCLKX, 对其置1 或置0 可以点亮或熄灭DS6 灯。其连接电路如下图所示:

(二)实验内容与步骤

1. 运行 CCS Setup,选择设置实际的实验室硬件仿真器,即platform选“TDS510USB PLUS Emulator”,Family选“C64xx”,available factory boars选“C64xx Rev 1.1 TDS510USB plus emulator-WintechDigital”

2.启动 CCS

3.新建gpio文件夹,路径为:C:\\CCStudio_v3.3\\MyProjects\\gpio,创建工程 建立工程 gpio.pjt

4.准备 1)设置

Project --> Build Options --> Preprocessor,在include search path中加入:C:\\CCStudio_v3.3\\MyProjects\\gpio\\gpio,在Pre-define Symbols 中加入:_DEBUG;CHIP_DM642。如图:

2)复制库文件

复制C:\TS-DM64X\TS-DM64xexperimentccs3.3\TS-DM64x_examples\lib下的文件evmdm642bsl.lib到当前工程gpio目录下,并添加到工程中。或者直接在工程的lib上点击添加C:\TS-DM64X\TS-DM64xexperimentccs3.3\TS-DM64x_examples\lib下的库文件evmdm642bsl.lib到工程中。

5. 输入程序

1)输入源程序gpio.c,选择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

/**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; //熄灭

for(i = 0; i < 0xffffff; i++){}; };

}

2)选择File->New->Source File,新建包含文件evmdm642.h,其内容如下: #ifndef EVMDM642_ #define EVMDM642_

#ifdef __cplusplus extern \#endif

#include #include #include /*

* Note: Bit definitions for each register field * needs to be supplied here for the CPLD * and other board periperals. */

/* Compatability definitions */ #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 #define 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 // DS1~3 address when using EPLD #define EVMDM642_LED4 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 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 configuration 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.

* All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclose this code are * granted through contract. */

/*-l ..\\lib\\rts6400.lib*/

-l cslDM642.lib -l rts6400.lib -stack 0x400 -heap 0x400 MEMORY {

ISRAM : origin = 0x0, len = 0x1000000 }

SECTIONS {

.vectors > ISRAM .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.out

8.调用编程可执行程序

选择File->Load Program,选择\\gpio\\debug\\gpio.out。 9.调试

用菜单debug->Step Into或F11可以单步运行。10.观察实验结果

能够点亮火熄灭DS6发光二极管。 11. 退出CCS

四、实验仪器与软件

(1) PC计算机 (2) 多媒体通信实验箱 (3) DSP仿真器 (4) 音视频连线、耳麦

本文来源:https://www.bwwdw.com/article/avjv.html

Top