ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:112.25KB ,
资源ID:4993332      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4993332.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP实验指导.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DSP实验指导.docx

1、DSP实验指导DSP实验报告在打开实验箱电源的前提下:1、打开CCSStudio3.32、选择debug,选择connect,如果在左下角显示connecting,表示与仿真器连接正常。实验一、存储器实验。实验目的:了解F2812的内部存储器空间的分配,掌握外扩RAM或FLASH存储器的方法, 掌握从外部存储器写入读取数据的方法。实验过程:该实验不用改变硬件,实验内容为在数据存储器的指定地址写上特定数据如0xAAAA,然后将该数据搬移到其他位置。源程序:(example_dsp281x_mem.c)void main(void) int i; volatile unsigned int *ro

2、om = (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

3、interrupt flags: IER = 0x0000; 禁止中断 IFR = 0x0000; 清所有中断标记。 /*将0xAAAA写入从数据空间的地址0x3f9020开始的8个单元中*/ for(i=0;i8;i+) *room=0xAAAA;room指针的地址内填上0xAAAA room+; /*从0x3f9020开始的8个空间读出数据依次写入从0x3f9028开始的8个单元中*/ for(i=0;i8;i+) *room2=*(room-1); 将room指针减一,然后将其内容填到room2指针的地址内。 room-; room2-; InitSysCtrl()函数,在DSP281x

4、_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 InitPeripheral

5、Clocks();以上程序完成关看门狗,初始化时钟,初始化外设时钟。(外设时钟是片内外设的时钟,分高速和低速)其中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 peri

6、pherals. 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;以

7、上程序完成外设时钟的设置,寄存器的含义见教材或参考书,其中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稳定

8、后,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,可观察到数据变化。实验内容:通过修

9、改上述源程序,实现在0x3f9020开始的位置放置8个数,0x3211。在0x3f902f开始的位置放置8个数,0x1111。将0x3f9020位置开始的8个数和0x3f902f位置开始放置的8个数相加,放到0x3f9010开始的8个地址中。实验二 拨码开关实验实验目的:了解GPIO的初始化原理,掌握GPIO的基本操作,掌握如何设定GPIO为通用数字I/O口或是功能引脚,掌握GPIO的相关寄存器的配置方法。实验过程:该程序完成将拨码开关的信息读入DSP,然后再将该信息回写,控制led灯。关键问题:读入的地址和输出的地址用的同一个地址。为什么呢?其拨码开关是通过74LS244和总线相连,灯是通过

10、74LS273相连总线。读时将273设为无效,244有效,拨码开关的数据上总线。写时,244无效,273有效,将数据发送出,同时锁存。需要3根控制线。按时序操作。对于本试验箱来讲,DSP将控制信号发给CPLD,在对一个特定地址进行读写时(0x2200),CPLD内部通过编程,实现对读写信号的不同操作。在DSP读0x2200时,CPLD将244有效。当DSP写0x2200时,CPLD将244无效,同时273有效,同时开关锁存一次,同时保持锁存。主要程序如下:/*头文件*/#include DSP281x_Device.h / DSP281x Headerfile Include File#inc

11、lude DSP281x_Examples.h / DSP281x Examples Include File/*主程序*/void main(void) unsigned int temp; temp = 0; InitSysCtrl();/初始化PLL,WatchDog,使能外围时钟,该初始化文件在DSP281x_SysCtrl.c中 DINT;/关闭CPU中断/ Initialize PIE control registers to their default state./ The default state is all PIE interrupts disabled and fla

12、gs/ are cleared. InitPieCtrl(); IER = 0x0000;/关闭中断和清除所有中断标志 IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt / Service Routines (ISR). InitPieVectTable(); for(;) asm( nop ); temp = *(int *)0x2200&0x00ff; /读入0x2200地址的开关量值并赋给temp asm( nop ); * (int *)0x2200 = temp; /

13、temp值输出0x2200地址的LED灯 asm( nop ); 其中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+; EDI

14、S; / 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目

15、录下,打开watch window,输入需要观察的变量,就可看到其变化,然后,在debug目录下点run,在断点处,程序会停下来,可以观察temp变量来判断。实验三、cpu定时器实验实验目的:了解CPU定时器的工作原理,掌握F2812的定时器的控制方法,掌握F2812的中断结构以及对中断的处理流程,学会利用C语言设计中断程序。实验过程:该实验以中断的方式,标记定时器中断的次数,根据不同的次数,点亮不同的灯。原程序如下:/*头文件*/#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Exampl

16、es.h / DSP281x Examples Include File/*定义函数说明*/ Prototype statements for functions found within this file.interrupt void cpu_timer0_isr(void);void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period);该函数在DSp281x_cputimers.c中定义CpuTimer0也在该文件中定义。/*主程序*/CpuTimer0是CPUTIMER_VARS的一个对象,CPUT

17、IMER_VARS是一个结构体。void main(void) InitSysCtrl(); DINT; 关中断 InitPieCtrl(); / Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt InitPieVectTable(); EALLOW; / This is needed to write to EALLOW protec

18、ted registers PieVectTable.TINT0 = &cpu_timer0_isr; 将外设中断向量表中的int0,设置为cpu定时器中断服务程序的地址。 EDIS; / This is needed to disable write to EALLOW protected registers InitCpuTimers(); / For this example, only initialize the Cpu Timers/ Configure CPU-Timer 0 to interrupt every second:/ 100MHz CPU Freq, 1 secon

19、d Period (in uSeconds) ConfigCpuTimer(&CpuTimer0, 100, 1000000); StartCpuTimer0();/ 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;/ Enable global Interrupts and higher priority real-time debug events:

20、 EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM for(;) if(CpuTimer0.InterruptCount1) asm( nop ); asm( nop ); *(int *)0x2200=0x0081; else if(CpuTimer0.InterruptCount2) asm( nop ); asm( nop ); *(int *)0x2200=0x0042; else if(CpuTimer0.InterruptCount3) asm( nop ); asm

21、( nop ); *(int *)0x2200=0x0024; else if(CpuTimer0.InterruptCount4) asm( nop ); asm( nop ); *(int *)0x2200=0x0018; else if(CpuTimer0.InterruptCount5) asm( nop ); asm( nop ); *(int *)0x2200=0x0024; else if(CpuTimer0.InterruptCount6) asm( nop ); asm( nop ); *(int *)0x2200=0x0042; else if(CpuTimer0.Inte

22、rruptCount7) asm( nop ); asm( nop ); *(int *)0x2200=0x0081; else CpuTimer0.InterruptCount = 0; 以下为中断服务程序。interrupt void cpu_timer0_isr(void) CpuTimer0.InterruptCount+; / Acknowledge this interrupt to receive more interrupts from group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;void InitCpuTimers(void)

23、 / CPU Timer 0 / Initialize address pointers to respective timer registers: CpuTimer0.RegsAddr = &CpuTimer0Regs;CpuTimer0Regs在dsp281x_Cputimers.h中定义。 以下初始化PRD到最大值。 CpuTimer0Regs.PRD.all = 0xFFFFFFFF; 设置定时的时钟源的分频系数。 CpuTimer0Regs.TPR.all = 0; CpuTimer0Regs.TPRH.all = 0;以下停止定时器的运行。 CpuTimer0Regs.TCR.b

24、it.TSS = 1; / Reload all counter register with period value: CpuTimer0Regs.TCR.bit.TRB = 1; / Reset interrupt counters: CpuTimer0.InterruptCount = 0; ConfigCpuTimer(&CpuTimer0, 100, 1000000)定义在实验内容:运行该程序,观察灯的变化。将定时器时间延时一倍。进一步实验可以完成奇数灯和偶数灯的轮流点亮。实验四、AD实验实验目的:掌握ADC模块顺序采样的运行模式,掌握ADC模块单序列发生器的运行模式,掌握利用软件置

25、位的方式来实现AD采样。实验过程:通过信号发生器,产生方波和正玄波,通过DSP自带AD将数据采集到DSP内,通过CCS自带的graph功能,观察采集来的数据。 1. 2812CPU板JUMP1的1和2脚短接,拨码开关SW1的第二位置ON; 2. E300板上的开关SW4的第二位置ON,其余OFF.SW7全部置ON。其余开关全部置OFF。3. 用导线连接E300底板“Signal expansion unit”的2号孔接口“SIN”到“Signal expansion unit”的2号孔“AIN0”;“SQU”到“AIN1” .SIN输出正弦波。SQU输出方波。4. 运行Code Compose

26、r Studio (CCS3.1);(ccs3.1需要“DEBUGConnect” )5.用“ProjectOpen”打开系统项目文件 e300.test normal DSP281x_examples e300_07_ad Example_281x_e300_AD.pjt。6. 编译全部文件并装载 “Debug Example_281x_AD.out”文件;7. 在加软件断点处加软件断点。单击“DebugRUN”运行程序,程序运行到断8. 用下拉菜单中的View / Graph的“Time/Frequency”打开一个图形观察窗口;设置该图形观察窗口的参数设置如下:观察起始地址为input1

27、和input2,长度为256的存储器单元内的数据,该数据为输入信号经A/D转换之后的数据,数据类型为16位整型; 9.单击“Debug Animate”运行程序,在图形观察窗口观察A/D转换后的数据波形变化,input1:输入通道AIN1孔的方波,input2:输入通道AIN0孔的正弦波单击“Debug Halt”暂停程序运行。 10 实验结束程序如下:/*头文件*/#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include F

28、ile/ Prototype statements for functions found within this file.interrupt void adc_isr(void);采用中断方式来处理AD转换,也就是在AD转换完后可以产生中断,然后由DSP处理。/ Global variables used in this example:Uint16 LoopCount;Uint16 ConversionCount; AD转换的次数Uint16 input1256;Uint16 input2256;Uint16 Mixing256;void main(void) InitSysCtrl(); EALLOW; SysCtrlRegs.PLLCR.all=0x8; SysCtrlRegs.HISPCP.all = 0x3; / HSPCLK = SYSCLKOUT/6 EDIS; 以上程序将高速外设速度设置为系统时钟的6分之1。AD采用的是高速外设时钟。禁止中断 DINT;初始化外设中断控制器 InitPieCtrl();禁止中断,同时清中断标记和中断允许。 IER = 0x0000; IFR = 0x0000;初始化外设中断控制器向量表。 InitPieVectTable(); 将中断服务程序地址填入中

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1