实验一 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  ti
me);
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_Device.h"    // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"  // DSP281x Examples Include File
#include "f2812a.h"
#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};    // 控制字,逐位置1: 0001B 0010B 0100B 1000B  0000B 1111B LBDS 是4bit的寄存器
    int i,j;
   
    InitSysCtrl();                    // 初始化DSP运行时钟
   
    while ( 1 )
    {
    j=DIPS%16;
    switch(j)
    {
   
    case 1:
          LBDS=uLED[5];      // 全灭
        break;
    case 2:
        LBDS=uLED[4];      //全亮
        break;
    case 4:
        for ( i=0;i<4;i++ )
            {timeout on t2 timer
                LBDS=uLED[i];        // 正向顺序送控制字
                Delay(100);            // 延时
            }
        break;
    case 8:
          for ( i=3;i>=0;i-- )
            {
                LBDS=uLED[i];        // 反向顺序送控制字
                Delay(100);            // 延时
            }
        break;
    default:
        LBDS=uLED[5];
        break;
    }
    }
}
void Delay(unsigned int nDelay)
{
    int ii,jj,kk=0;
    for ( ii=0;ii<nDelay;ii++ )
    {
        for ( jj=0;jj<512;jj++ )
        {
            kk++;
        }
    }
}
实验三参考程序
#include "DSP281x_Device.h"    // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"  // DSP281x Examples Include File
// Prototype statements for functions found within this file.
interrupt void cpu_timer0_is(void);
void delay(int time);
#define LEDS *(int *)0xc0000
int i=0,nCount=0,time;
unsigned int uLBD;
void main(void)
   
  InitSysCtrl();//初始化cpu
  DINT;//关中断
  InitPieCtrl();//初始化pie寄存器
 
  IER = 0x0000;//禁止所有的中断
  IFR = 0x0000;
  InitPieVectTable();//初始化pie中断向量表
  EALLOW;  // This is needed to write to EALLOW protected registers
  PieVectTable.TINT0 = &cpu_timer0_is;//指定中断服务子程序,中断向量表就是设置中断服务程序入口地址
  EDIS;    // This is needed to disable write to EALLOW protected registers
    InitCpuTimers();
    ConfigCpuTimer(&CpuTimer0,150,1000000);//150MHZ,1000000us
  StartCpuTimer0();//启动定时器0
// Enable CPU INT1 which is connected to CPU-Timer 0:
  IER |= M_INT1;
// Enable TINT0 in the PIE: Group 1 interrupt 7
  PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//定时器TINT0就是INT1.7,使能信号
// Enable global Interrupts and higher priority real-time debug events:
  EINT;  // Enable Global interrupt INTM
  ERTM;  // Enable Global realtime interrupt DBGM
      LEDS=0x0001;
    while ( 1 )
    {
     
        delay(2);
        LEDS=~LEDS;
    }
}
void delay(time)
{
    int i;
    while(nCount<time);
    nCount=0;
}
interrupt void cpu_timer0_is(void)
{
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//允许继续相应中断
  nCount++;
 
}
//===========================================================================

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。