DSP2812-实验要求以及参考程序 下载本文

内容发布更新时间 : 2024/9/29 6:17:39星期一 下面是文章的全部内容请认真阅读。

实验一 DSP数据存取实验

实验要求:

1、 找到main函数入口地址

2、 修改数据区存储区数据如下表所示 地址 数据 0x80000 0x80001 0x80002 0x80003 0x80004 0x80005 0x80006 0x80007 0x0100 0x0007 0x0100 0x0005 0x0100 0x0003 0x0100 0x0001 3、 单步运行,利用watch window观察程序中地址变量和数据变量 4、 观察从地址0x80000到0x80007的存储内容 操作步骤:

1、 打开Setup CCStudio v3.3 ,系统配置为F2812 Device Simultor

2、 打开CCStudio v3.3,打开工程F2812\\DSP281x_examples\\Lab0201-Memory\\Memory.pjt 3、 在main函数处设断点(F9),运行程序 4、 打开反汇编窗口(View>Disassembly),观察入口地址 5、 修改Memory.c中程序,完成存储区数据修改 6、 编译通过,加载.out 文件

7、 设置在变量定义处设置断点,点击运行(F5),单步运行(F11)

8、 打开观察窗(View>Watch Window)观察自己所设变量在单步运行时变化

9、 打开存储区窗口(View>Memory)观察地址为0x80000到0x80007的数据变化

实验二 指示灯与拨码开关实验

实验要求:

1、 熟悉板上指示灯控制寄存器、开关控制寄存器 2、 指示灯点亮规则:

只闭合拨码开关1:全灭; 只闭合拨码开关2:全亮;

只闭合拨码开关3: 顺序依次点亮; 只闭合拨码开关4:反向顺序依次点亮; 开关的其它状态:全灭; 操作步骤:

1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_1

2、打开CCStudio v3.3,打开工程F2812\\DSP281x_examples\\Lab0201-Memory\\led.pjt 3、修改led.c,注意板上DIP开关控制寄存器地址为C0001h,板上指示灯控制寄存器地址为:C0000h。这两个寄存器都是低四位有效。 4、观察实验现象

实验三 DSP定时器

实验要求:

1、 利用定时器中断代替软件延时函数控制指示灯显示频率,要求1秒闪烁一次 2、 实物仿真时,通过CCS中的Clock功能统计延时函数的延时时间,与设定值进行比

操作步骤:

1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_1

2、打开CCStudio v3.3,打开工程F2812\\DSP281x_examples\\Lab0201-Memory\\time.pjt

3、 修改time.c程序,写一个由定时器中断产生的以1s为单位的延时函数void delay

(int time);

4、 在菜单中选择profile>Enable\\View 5、 在延时函数前后各设置一个断点 6、 清零时钟计数器(双击清零),点击Run运行程序

7、 计算时间t=测得值/150000000(假如系统的时钟工作在150MHZ),与设定值进行比

实验四 事件管理器实验

实验要求

1、 利用事件管理器中的16路中的PWM1,输出一段连续变化的PWM波 2、 驱动扬声器蜂鸣器播放一段音乐声(声音频率文件参考Speaker.pjt) 操作步骤

1、打开Setup CCStudio v3.3 ,系统配置为F2812 XDS510 Emulator_1

2、打开CCStudio v3.3,打开工程F2812\\DSP281x_examples\\Lab0201-Memory\\PWM.pjt和F2812\\DSP281x_examples\\Lab0201-Memory\\Speaker.pjt

3、在例程Speaker.c中是使用通用定时器TIME0来连续输出频率的方波,这里要求改为用EVA中的PWM1代替之。

4、比较通过普通GPIO口输出和外设PWM口驱动的音乐声的不同。

实验参考程序(已验证运行)

实验一参考程序 main()

{// 在此加软件断点 int i; unsigned int * pz; pz=(unsigned int *)0x80000; for ( i=8;i>0;i--,pz++ )// 在此加软件断点 (*pz)=i;//指针取值

pz=(unsigned int *)0x80000; for ( i=0;i<4;pz=pz+2,i++ )

(*pz)=0x0100;

while(1) {

} // 在此加软件断点 }

实验二参考程序

#include \ // DSP281x Headerfile Include File #include \ // DSP281x Examples Include File #include \

#define LBDS (*((unsigned int *)0xc0000))// 定义指示灯寄存器地址和寄存器类型 #define DIPS (*(unsigned int *)0xc0001)// 定义DIP开关寄存器地址和寄存器类型 // 子程序接口

void Delay(unsigned int nDelay); // 延时子程序

main() {

unsigned int uLED[6]={1,2,4,8,15,0}; 0000B 1111B LBDS 是4bit的寄存器 int i,j;

// 控制字,逐位置1: 0001B 0010B 0100B 1000B

InitSysCtrl(); // 初始化DSP运行时钟 while ( 1 ) { j=DIPS; switch(j) { case 1: LBDS=uLED[5]; // 全灭 break; case 2:

LBDS=uLED[4]; //全亮 break; case 4:

for ( i=0;i<4;i++ ) { LBDS=uLED[i]; // 正向顺序送控制字