内容发布更新时间 : 2025/1/7 12:01:21星期一 下面是文章的全部内容请认真阅读。
实验一 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]; // 正向顺序送控制字