77范文网 - 专业文章范例文档资料分享平台

2812DSP实验指导书

来源:网络收集 时间:2018-12-01 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

DSP实验

在打开实验箱电源的前提下: 1、 打开CCSStudio3.3

2、 选择debug,选择connect,如果在左下角显示connecting,表示与仿真器连接正常。 实验一、存储器实验。

该实验不用改变硬件,实验内容为在数据存储器的指定地址写上特定数据如0xAAAA,然后将该数据搬移到其他位置。 源程序:(example_dsp281x_mem.c) void main(void) {

int i;

volatile unsigned int *room = (volatile unsigned int *)0x3f9020; volatile unsigned int *room2= (volatile unsigned int *)0x3f902F; 建立可变数据类型的两个指针,指向两个地址。

// Initialize System Control:

// PLL, WatchDog, enable Peripheral Clocks InitSysCtrl();

对看门狗,系统等进行初始化 // Disable CPU interrupts DINT; 禁止中断

// Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; 禁止中断

IFR = 0x0000; 清所有中断标记。

/*将0xAAAA写入从数据空间的地址0x3f9020开始的8个单元中*/ for(i=0;i<8;i++) {

*room=0xAAAA;

room指针的地址内填上0xAAAA room++; }

/*从0x3f9020开始的8个空间读出数据依次写入从0x3f9028开始的8个单元中*/

for(i=0;i<8;i++) {

*room2=*(room-1);

将room指针减一,然后将其内容填到room2指针的地址内。 room--; room2--; }

}

InitSysCtrl()函数,在DSP281x_SysCtrl.c中定义。

其定义如下:

void InitSysCtrl(void) {

// On F2812/F2810 TMX samples prior to rev C this initialization was // required. For Rev C and after this is no longer required // Disable the watchdog DisableDog();

// Initialize the PLLCR to 0xA InitPll(0xa);

// Initialize the peripheral clocks InitPeripheralClocks(); }

以上程序完成关看门狗,初始化时钟,初始化外设时钟。(外设时钟是片内外设的时钟,分高速和低速)

——————————————————————————————————————— 其中

void InitPeripheralClocks(void) {

EALLOW;

// HISPCP/LOSPCP prescale register settings, normally it will be set to default values SysCtrlRegs.HISPCP.all = 0x0001; SysCtrlRegs.LOSPCP.all = 0x0002;

// Peripheral clock enables set for the selected peripherals. SysCtrlRegs.PCLKCR.bit.EVAENCLK=1; SysCtrlRegs.PCLKCR.bit.EVBENCLK=1; SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1; SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1; SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1; SysCtrlRegs.PCLKCR.bit.SPIENCLK=1; SysCtrlRegs.PCLKCR.bit.ECANENCLK=1; SysCtrlRegs.PCLKCR.bit.ADCENCLK=1; EDIS; }

以上程序完成外设时钟的设置,寄存器的含义见教材或参考书,其中EALLOW表示开保护,EDIS为启动保护,这些是在寄存器操作时必须的。其中:SysCtrlRegs是一个结构体,PCLKCR是一个结构体,bit和All是一个联合体。

—————————————————————————————————————— void InitPll(Uint16 val) {

volatile Uint16 iVol;

if (SysCtrlRegs.PLLCR.bit.DIV != val) {

EALLOW;

SysCtrlRegs.PLLCR.bit.DIV = val; EDIS;

设置PLL时钟,在此后Cpu等待PLL锁死,在PLL没有锁死前,CPU将工作在晶振时钟的0.5倍。当PLL稳定后,CPU才工作于新频率。软件可以再PLL锁死前继续运行。但如果对运行时间要求严的话,可以在此加上等待。在锁相环稳定前,看门狗是不工作的。

DisableDog();

for(iVol= 0; iVol< ( (131072/2)/12 ); iVol++) { } 等待。 } }

观看实验结果方法:

1、 在CCS环境中,进行编译,选择project中的build。如果没有错,进行下一步。 2、 在file中选择load program。在文件的目录下寻找对应得 .Out文件。 3、 在view中选择memory。选择数据,在对话框中输入0x3f9010。 4、 在debug目录下选择run,可观察到数据变化。

实验内容:

通过修改上述源程序,

实现在0x3f9020开始的位置放置8个数,0x3211。 在0x3f902f开始的位置放置8个数,0x1111。

将0x3f9020位置开始的8个数和0x3f902f位置开始放置的8个数相加,放到0x3f9010开始的8个地址中。

实验二 拨码开关实验 硬件不用调整。

该程序完成将拨码开关的信息读入DSP,然后再将该信息回写,控制led灯。 关键问题:读入的地址和输出的地址用的同一个地址。为什么呢?

其拨码开关是通过74LS244和总线相连,灯是通过74LS273相连总线。读时将273设为无效,244有效,拨码开关的数据上总线。写时,244无效,273有效,将数据发送出,同时锁存。需要3根控制线。按时序操作。对于本试验箱来讲,DSP将控制信号发给CPLD,在对一个特定地址进行读写时(0x2200),CPLD内部通过编程,实现对读写信号的不同操作。在DSP读0x2200时,CPLD将244有效。当DSP写0x2200时,CPLD将244无效,同时273有效,同时开关锁存一次,同时保持锁存。

主要程序如下:

/*******************************头文件****************************/ #include \ // DSP281x Headerfile Include File #include \ // DSP281x Examples Include File

/****************************主程序*******************************/ void main(void) {

unsigned int temp; temp = 0;

InitSysCtrl();//初始化PLL,WatchDog,使能外围时钟,该初始化文件在\中

DINT;//关闭CPU中断

// Initialize PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. InitPieCtrl();

IER = 0x0000;//关闭中断和清除所有中断标志 IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). InitPieVectTable();

for(;;) { asm(\ temp = *(int *)0x2200&0x00ff; //读入0x2200地址的开关量值并赋给temp asm(\ * (int *)0x2200 = temp; //temp值输出0x2200地址的LED灯 asm(\

} }

其中InitPieVectTable()在文件DSP281x_PieVect.c中。 void InitPieVectTable(void) { int16 i; Uint32 *Source = (void *) &PieVectTableInit; 在这里取PieVectableInit的地址, Uint32 *Dest = (void *) &PieVectTable; 在这里取PieVectTable的地址 他们都应该是全局变量。 EALLOW; for(i=0; i < 128; i++) *Dest++ = *Source++; EDIS; // Enable the PIE Vector Table PieCtrlRegs.PIECRTL.bit.ENPIE = 1;

变量pieVectTableInit在文件DSP281x_PieVect.c中。PieVectTable在DSP281x_PieVect.h中定义,在最后2行。

他们的具体地址可以由.cmd文件来确定。

实验内容:

通过修改以上程序实现1号开关动作时,2号灯亮,2号开关动作时,3号灯亮,*****,等。在第8号开关动作时,第1号灯亮。

需要判断是高电平亮,还是低电平亮,可以使用中断调试。在运行状态,在需要设置断点的位置的右边,双击,就可以产生红点。表明设置了断点。在view目录下,打开watch window,输入需要观察的变量,就可看到其变化,然后,在debug目录下点run,在断点处,程序会停下来,可以观察temp变量来判断。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库2812DSP实验指导书在线全文阅读。

2812DSP实验指导书.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/328541.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: