DSP实验报告
实验一 CCS的安装与CCS操作界面的熟悉实验二、CCS操作
学院:信息工程学院
班级:2008级电子信息工程(2)班 姓名:肖 秀
学号:2008550503
联系方式:151xxxxxxxx
指导老师:姚志强
完成日期:20xx年10月21日
实验一CCS的安装与CCS操作界面的熟悉
1
一、实验目的
1.学会安装与设置Code Composer Studio;
2.熟悉CCS 软件的操作界面。
二、实验设备
CCS 安装光盘(本次安装程序在D:\DSP\ccs2.0ForC5000)
装有Windows 98 以上操作系统的PC 机
三、实验内容及步骤
1.CCS 的安装
安装前需要卸载系统原来的C5000,进入控制面板进行卸载完毕后,再开始下面的步骤。
(1)找到CCS 的安装软件,点击安装程序setup.exe,双击启动安装。安装完成后在桌面上会有“CCS 2 C5000”和“SETUP CCS 2 C5000”两个快捷方式图标,分别对应CCS 应用程序和CCS 配置程序。
(2)双击运行“SETUP CCS 2 C5000”配置程序,配置驱动程序。本次实验没有用到实验箱,只需配置软件驱动程序。在弹出的“Import Configurantions”对话框中,先点击“Clear”键,清除以前的配置,然后选择“C5402 Simulator”,点击“Import”,最后点击“Save and Quit”按钮,完成配置。
2.CCS 操作界面的熟悉
(1)在桌面上双击“CCS 2 C5000”,弹出一个TI 仿真器并行调试管理器窗口。
(2)在管理器窗口的“open”菜单下选择“C54xx(C5402) Simulator”命令,将弹出一个CCS 运行主窗口(如果直接弹出CCS 运行主窗口,此步可略)。
(3)点击Help_>Contents 打开TMS320C54x Code Composer Stdio Help,在左边Contents 列表中点击最后一个TMS320C5402 DSK,浏览了解其下所有子列表的内容,熟悉DSK 板的基本硬件、配置及功能。
(4)对照教材介绍CCS 的地方,逐一熟悉CCS 中的12 项菜单的功能,包括File、Edit、View、Project、Debug、Profiler、Option、GEL、Tools 等菜单(结合实验二建立项目熟悉更好)。
(5)对照教材,逐一熟悉CCS 的五种工具栏:Standard Toolbar、GEL Toolbar、Project Toolbar、Debug Toolbar、Edit Toolbar(结合实验二建立项目熟悉更好)。
实验心得:
这是我第一次接触到DSP实验,也是我向DSP开发环境迈向了一步,在做实验之前,自己就熟悉了一些菜单和简单的操作。这次试验我主要掌握了
MS320C5400系列汇编语言程序的基本,程序编译、连接、运行和调试的基本过程,以及熟悉Code Composer Studio的使用格式。这个CCS软件我更是安装了三四次,因为我还安装了CCS3.3版。通过实验一掌握了CCS软件的安装与卸载以及一些基本操作流程。
总之,这次试验收获颇丰。
2
实验二、CCS操作
一、实验目的
1. 掌握TMS320C5400系列汇编语言程序的基本格式,
2. 掌握程序编译、连接、运行和调试的基本过程
3. 熟悉Code Composer Studio的使用
二、实验设备
1. 集成开发环境Code Composer Studio(以下简称CCS)
2. 实验代码ccs_basic.s54、ccs_basic.cmd和ccs_basic.gel
三、实验内容 结果及提示
1.基本操作:
1). 建立项目,并加入文件
a) 运行CCS setup,选择C5402 Simulator,选择Project→New菜单项,建立一个新的项目ccs_basic.pjt(注意建立路径),并选择Project→add files to new project 菜单项,加入文件ccs_basic.s54和ccs_basic.cmd;
b) 在工程视图中选中GEL files文件夹,单击鼠标右键,在弹出的菜单中选择Load GEL选项,载入ccs_basic.gel;
2). 编译和连接
a) 编译:选择Project-->Build Option,在Compile表单的Category列表中,选择Basic选项,并设置Generate debug info为full symbolic debug选项,选择Files选项,并在设置Asm File Ext 中写入“s54”为汇编语言扩展名; 如图2-1 2-2所示;
b) 连接:选择Project-->Build Option,在linker表单中的Autoinit mode选项中选择no autointialization模式,Output Filename中输入.\debug\ ccs_basic.out,Code Entry Point 中输 3
入main,Map Filename中输入ccs_basic.map,然后保存选项设置,如图2-3所示类似。
图2-1 编译选项的选择
图2-2 自定义文件扩展名
4
图2-3 连接选项的选择
c) 选择Project→Build构建整个项目,产生可执行文件ccs_basic.out; d) 选择File->Load Program,装载可执行文件ccs_basic.out。
2.练习
1) 观察存储器映象文件ccs_basic.Map,理解存储器的配置情况;
2) 观察和修改存储器单元的内容
1). 观察存储器映象Map文件
选择File→Open打开ccs_basic.Map文件,可观察
a) 存储器的配置情况:页面0为程序空间,页面1为数据空间;
b) 程序文本段:起始地址0x1000,存储区长度为0x0021;
c) 数据段:其中需初始化数据段.data起始地址0x2005,存储区长度为4; d) 不需初始化数据段.bss起始地址0x2000,存储区长度为5;
e) 堆栈段:起始地址0x0100,存储区长度为0x0400;
f) 向量段:起始地址0x0080,存储区长度为0x0080;
g) 全局符号在存储器中的位置:共14个符号,如符号.bss在存储器中的位置为0x2000。
5
将上述信息与cmd文件中的设置比较,理解cmd文件和连接器的关系如下: cmd 文件为配置文件,配置文件在连接的过程中将定义DSP 的RAM 空间,
也就是对存储空间起一个配置作用。DSP 在程序中引入了各个段的概念,相应的连接时就需要进行各个段的分配。配置文件ccs.basic.cmd 内容如下:
可以发现以上信息基本与存储器映象文件ccs_basic.Map 中相同。memory 部分说明了存储空间的页数、长度、起始点和名称。Section 部分是对段的 配置说明:.text 段和向量段固定的连接至程序空间;.bss 段和.stack 段固定的
连接至数据空间,存储类型为RAM。连接后的配置结果为向量段从第0 页
的0x0080 地址开始存放,代码段从第0 页的0x1000 地址开始存放,堆栈段 从第1 页的0x100 地址开始存放,数据段从第1 页的0x2000 地址开始存放。
2). 输出文件ccs_basic.out的运行和调试
6
a) 运行程序:将可执行文件装载到simulator中,选择Debug→Run 或按F5键运行程序,按shift F5键可中止程序的运行;选择Debug→Step into或按F8键可实现程序的单步执行。
b) 设置断点:把光标移到某一行,按F9键,这一行将会以红色高亮显示,表示在该行加了一个断点. 断点如图所示
:
3). 观察和修改存储器单元的内容
a) 点击CCS操作界面左侧调试工具栏图标,出现寄存器窗口,在该窗口查看存储器的地址
b) 选择View→memory 或点击CCS操作界面左侧调试工具栏图标,在弹出的菜单中输入存储器地址,可观察存储器的内容。如存储器地址为0x2005中内容为0x000A。
c) 修改源汇编程序中数据段内容,如下图
,可查看存储器单元内容的变化。在数据表格复制到数组a[]后,如果把a[0]的值由10改为1(修改文件时注意去掉其只读属性,后面类似),那么求和的结果将为0x0026。如图所示: 7
由图可知,实验结果如预期所示。
实验心得:
实验二让我学会了怎么建立一个工程及新建文件,如何添加配置文件到工程中。虽然老师给了我们实验代码,但是我幻想要是有一天能够自己写代码那就好了。接下来是一些基本工程配置,如编译和链接等。还有让我们自己学会看DSP程序以及修改程序,如上面修改a的值。这一课感觉至为重要,因为是跨进CCS软件开发的入门,是以后实验的铺垫。个人将继续DSP的学习。期待下一次的实验。
8
实 验 报 告
实验课程: DSP原理与应用技术
实验内容: 液晶显示屏(LCD)实验
学生姓名: 郑婷婷
专业班级: 电子与通信工程
20##年 6 月 12 日
液晶显示屏(LCD)实验
一、 实验目的:
(1)掌握液晶的使用方法;
(2)掌握液晶信号之间时序的正确识别和引入。
二、 实验设备:
(1)装有CCS2000软件的计算机;
(2)插上2812主控板的DSP实验箱;
(3)DSP硬件仿真器
三、 实验原理:
本实验箱采用的液晶接口在DSP的数据总线上,由于DSP是十六位总线,液晶是八位总线,所以DSP的高八位悬空。液晶的结构框图如下,
四、 实验步骤:
1) 把2812模块小板插到大板上,打开液晶模块的电源开关;
2) 在CCS2000环境中打开本实验的工程编译Example_lcd.pjt,成输出文件,通过仿真器把执行代码下载到DSP芯片;
3) 运行程序,液晶上会循环显示预定内容;
4) 参考源代码,自行修改程序,实现不同的显示模式。
五、 实验程序:
#include "include/DSP281x_Device.h" // DSP281x Headerfile Include File
#include "include/DSP281x_Examples.h" // DSP281x Examples Include File
#include "ASCII.h"
// ------------------ 汉字字模的数据结构定义 ------------------------ //
typedef struct typFNT_GB16 // 汉字字模数据结构
{
signed char Index[2]; // 汉字内码索引
char Msk[32]; // 点阵码数据
}aa;
/////////////////////////////////////////////////////////////////////////
// 汉字字模表 //
// 汉字库: 宋体16.dot 纵向取模上高位,数据排列:从左到右从上到下 //
/////////////////////////////////////////////////////////////////////////
struct typFNT_GB16 GB_16[] = // 数据表
{/*-- 文字: 欢 --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x00,0x80,0xFC,0x80,0x05,0xFE,0x85,0x04,0x4A,0x48,0x28,0x40,0x10,0x40,
0x18,0x40,0x18,0x60,0x24,0xA0,0x24,0x90,0x41,0x18,0x86,0x0E,0x38,0x04,0x00,0x00
/*-- 文字: 迎 --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x00,0x21,0x80,0x36,0x7C,0x24,0x44,0x04,0x44,0x04,0x44,0xE4,0x44,0x24,0x44,
0x25,0x44,0x26,0x54,0x24,0x48,0x20,0x40,0x20,0x40,0x50,0x00,0x8F,0xFE,0x00,0x00
/*-- 文字: 使 --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x40,0x0C,0x40,0x1B,0xFE,0x10,0x40,0x37,0xFC,0x64,0x44,0xA4,0x44,0x27,0xFC,
0x24,0x44,0x22,0x40,0x21,0x80,0x20,0x80,0x21,0x70,0x22,0x1E,0x2C,0x04,0x00,0x00
/*-- 文字: 用 --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x1F,0xFC,0x10,0x84,0x10,0x84,0x10,0x84,0x1F,0xFC,0x10,0x84,0x10,0x84,
0x10,0x84,0x1F,0xFC,0x10,0x84,0x10,0x84,0x20,0x84,0x20,0x84,0x40,0x94,0x80,0x88
};
// Prototype statements for functions found within this file.
/*************************************************/
//延时N毫秒
/*************************************************/
void delay(int time)
{
int i,j;
for(i=0;i<time;i++)
for(j=0;j<1200;j++);
}
/*************************************************/
//写命令
/*************************************************/
void wcom(unsigned char com)
{
Reg08=com;
}
/*************************************************/
//写数据
/*************************************************/
void wdata(unsigned char dat)
{
Reg07=dat;
}
/*************************************************/
//初始化LCD
/*************************************************/
void lcdinit(void)
{
wcom(0xa4);
wcom(0xad);
wcom(0x03);
wcom(0xac);
wcom(0xe2); //initialize interal function
delay(10);
wcom(0xa2); //set nomal display
wcom(0xa0); //ADC select SEG1 to SEG132
wcom(0xc8); //set SHL COM1 to COM64 start page setup
wcom(0x2c); //power control(VB,VR,VF=1,1,1)
wcom(0x2e); //power control(VB,VR,VF=1,1,1)
wcom(0x2f); //power control(VB,VR,VF=1,1,1)
wcom(0x25); //
wcom(0x81); //set reference voltage mode
wcom(0x20); //set reference voltage
wcom(0x40); //Initial Display Line was first line
wcom(0xa6); //set nomal display
wcom(0xa4); //set nomal display
wcom(0xaf); //display on
}
/*************************************************/
//清屏
/*************************************************/
void clear(void)
{
unsigned char page;
unsigned char seg;
for(page=0xb0;page<0xb9;page++) //写页地址共8页 0xb0----0xb8
{
wcom(page);
wcom(0x10);
wcom(0x00);
for(seg=0;seg<128;seg++)
{
wdata(0x00);
}
}
}
/*************************************************/
//写显示字符
/*************************************************/
void lcdwritechar(char codenum ,char y ,char x )
{
unsigned char seg;
unsigned int coden;
codenum-=0x20;
coden=codenum<<4;
wcom(0xb0|(y&0x0f));//
wcom(0x10|((x>>1)&0x0f));
wcom(0x00|((x<<3)&0x0f));
for(seg=0;seg<8;seg++)
wdata(nAsciiDot[coden++]);
wcom(0xb0|((y+1)&0x0f));
wcom(0x10|((x>>1)&0x0f));
wcom(0x00|((x<<3)&0x0f));
for(seg=0;seg<8;seg++)
wdata(nAsciiDot[coden++]);
}
/*************************************************/
//写显示汉字
/*************************************************/
void lcdwritehz(char hznum ,char y ,char x )
{
unsigned char seg,hz;
unsigned char coden=0;
hz=hznum;
wcom(0xb0|(y&0x0f));
wcom(0x10|((x>>1)&0x0f));
wcom(0x00|((x<<3)&0x0f));
for(seg=0;seg<16;seg++)wdata(GB_16[hz].Msk[coden++]);
wcom(0xb0|((y+1)&0x0f));
wcom(0x10|((x>>1)&0x0f));
wcom(0x00|((x<<3)&0x0f));
for(seg=0;seg<16;seg++)wdata(GB_16[hz].Msk[coden++]);
}
main()
{
short i;
InitSysCtrl();
EALLOW;
EDIS;
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
InitXintf(); // For this example, init the Xintf
lcdinit();
clear();
while(1)
{
//lcdinit();
lcdwritehz(0,1,4);
lcdwritehz(1,1,6);
lcdwritehz(2,1,8);
lcdwritehz(3,1,10);
lcdwritechar('D',4,3);
lcdwritechar('S',4,4);
lcdwritechar('P',4,5);
lcdwritechar(' ',4,6);
lcdwritechar('2',4,9);
lcdwritechar('8',4,10);
lcdwritechar('1',4,11);
lcdwritechar('2',4,12);
for(i=0;i<16;i++)lcdwritechar('=',6,i);
for(i=0;i<16;i++)
{
lcdwritechar('>',6,i);
delay(100);
}
clear();
}
}
六、 实验现象:
实验现象如下图所示:
七、 实验总结:
通过本次CCS环境下LCD12864液晶模块显示的仿真实验,让我了解并熟悉了CCS软件的安装和调试方法,DSP实验箱下载调试的步骤以及CCS环境下的DSP的C语言程序编写方法,对于12864液晶模块控制程序的编写也有了更深的认识,对今后DSP的进一步学习奠定了应用基础。
早就打算在过年前要老公陪我到医院检查一次因为自从知道怀孕以来还没有去过医院呢没想到湖南却遇上了百年难遇的冰冻天气老公一直在单位加班…
第一次产检包括哪些项目每个医院或不同医师的操作程序可能会与另一位有着小小的差别一般来说第一次孕检项目都包括1量体重和血压2进行问诊…
第一次产检包括哪些项目每个医院或不同医师的操作程序可能会与另一位有着小小的差别一般来说第一次孕检项目都包括1量体重和血压2进行问诊…
第一次产检的时间一般在孕期第11或12周时正式开始进行第1次产检通常是选择一家你信赖的并准备在此分娩的医院进行产检由于此时已经进入…
第一次产检和办理孕妇保健手册1建完围产卡之后就要考虑去准备生宝宝的医院办理孕妇保健手册了也就是建档2所需证件准生证围产卡保偿卡自愿…
20xx年工作总结在岁末寒风中我们又迎来了新的一年,你好20xx!时光荏苒不动声色的掠过地平线,再见20xx!过去的一年辛勤与成绩…
大一两个月的生活已经过去了,在这一年里,我担任着班上的就业信息委员这一职务。首先感谢当初竞选的时候同学们对我的支持。在这两个月的工…
教研室在教育局党工委、局长室的领导下,积极工作,求真务实,充分发挥了全县教学参谋部指挥部的作用,教研室逐步形成了规范、廉洁、高效、…
工作总结一、政治思想与工作态度积极参加政治学习,拥护党的各项方针政策,自觉遵守各项法规;认真负责,有较好的组织能力,有较强的团队合…
按照省、市委的统一部署,我镇积极稳妥做好第七届村级组织换届选举工作,及早研究,周密部署,广泛宣传,精心组织,自20xx年x月x日开…