用定时器实现数字振荡器(DSP实验报告)

合集下载

汕头大学电子系DSP实验报告4(精)

汕头大学电子系DSP实验报告4(精)

汕头大学实验报告学院: 工学院系:电子工程系专业:电子信息工程年级:09 成绩:实验五定时器及中断实验一、实验目的1. 熟悉CCS开发环境2. 熟悉DSP 54X EVM板的硬件环境3. 了解DSP 54X定时器工作原理4. 了解DSP 54X中断原理及中断向量表建立5. 了解数码LED显示原理(动态扫描)6. 掌握键盘扫描原理7. 掌握DSP 54X I/O寻址方式8. 掌握长整型数的运算9. 掌握中断优先级设置10. 掌握全局变量、局部变量的概念二、实验原理1、定时器及中断实验用行扫描法,读取键值;定时器进行不断地刷新LED的显示;使用外部中断来实现功能的切换(正计数,倒计数,复位)。

2、AD/DA实验采用DSP McBSP串口原理设置,TLV2544ID为I/O模式,位操作控制。

构建SPI 协议进行传输。

三、实验内容与基本要求1、定时器及中断实验1 实验内容DSP初始化定时器0初始化中断寄存器初始化中断向量表定时器中断服务程序(LED扫描驱动程序键盘扫描驱动程序外部中断1中断服务程序2 基本要求通过定时器启动中断,在中断服务程序中扫描数码LED显示,由扫描键盘得到不同的键值,根据不同的键值完成正计数、倒计数、停止、复位等功能。

外部中断可终止计数。

2、A/D-D/A 实验实验内容DSP初始化LCD初始化LCD显示驱动A/D 芯片TLV2544初始化;D/A 芯片TLV5638初始化;DSP McBSP串口2初始化为I/O模式;按A/D、D/A芯片时序,用DSP构建SPI协议;基本要求设置串口2为I/O模式,用DSP构建SPI协议:输入直流信号,启动A/D采样,将采样数据显示在LCD上,比较采样数据与计算值应一致;(在EVM板上有3个按键,可分别产生0.8V,1.2V,1.6V直流电压),并修改原来程序,使扩展到可以在CCS观看波形。

四、实验程序框图1、定时器及中断实验初始化主程序DSP初始化调初始化程序定时器0初始化定时器0,外部中断1使能读键值并延时(100ms)消抖是空键?YLCD初始化、设置LCD显示N数码LED显示使能由不同的键值调不同的子程序结束EXIT1中断程序T0中断程序清标志寄存器调LED显示库函数设置LCD显示位码计数器+1结束N计数值=6?Y位码计数器=0结束正计数子程序调延时程序长型计数器+1NN标志寄存器=0?计数值=1000000?YY结束长型计数器=0长型数转换为BCD送显示缓存器2、A/D-D/A 实验主程序初始化程序调初始化程序DSP初始化Mcbsp2初始化读键值并延时(100ms)消抖AD/DA 初始化是空键?YNLCD初始化、设置LCD显示外部中断1使能由不同的键值调不同的子程序结束ADC程序DAC程序调LCD显示库函数调LCD显示库函数清DA输出值=0,启动ADC, 采样4次, 取平均值启动DAC结果转换为浮点数送显示缓存器调延时子程序设置LCD显示DA输出值+1调延时子程序N输出值=4096N标志寄存器=0?Y标志寄存器=0?YNY结束结束注:当输入为直流信号时:EXIT1中断程序AI=VCC*R0/(R0+RZ其中RZ=R1+R2+R3+R4S1按键:RZ=R1,AI= VCC*R0/(R0+R1清标志寄存器S2按键:RZ=R1+ R2,AI= VCC*R0/(R0+R1+R2设置LCD显示S3按键:RZ=R1+ R2+R3,AI= VCC*R0/(R0+R1+R2+R3结束五、问题1.请解释C54定时器初始化步骤,并解释定时器中断在该实验中的作用。

DSP 用定时器实现数字振荡器程序详解1

DSP 用定时器实现数字振荡器程序详解1

汇编源程序====================================================================== ======*/;/* Copyright (C) 2004 YINXING TECHNOLOGY CO., LTD */;/* All Rights Reserved. */ ;/* ----------------------------------------------------------------------------*/;/*======================================================================.title "for test INT service program ...(25 us) ".mmregs 定义存储器影响寄存器,这样就可以用AR0,PMST等助记符替换实际的存储器地址.global_c_int00,_tint,vector标明一个或多个全局符号OFF_INTIMER .set 04Ch ; TIMER的向量初始化入口地址VECTOR+OFF_INTIMERINIT_A .set 079bch ; A/2=0.9510498INIT_B .set 0c000h ; B/2=-0.5INIT_C .set 013c7h ; C/2=0.1545105.bss y0,1 ;为结果y0分配一个存储单元.bss y1,1.bss y2,1.bss temp,1.bss AA,1.bss BB,1.bss CC,1.text ;定义可可执行代码段_c_int00:ld #0,dp;设置DP页指针ssbx intm ; 关闭所有中断st #1fffh,spld #vector, a ; 读出中断向量地址and #0FF80h, a ;保留高9位(IPTR:中断向量指针andm #007Fh, pmst ;保留pmst的低7位or pmst, astlm a, pmst ; 设置IPTRstm #10h,TCR ; 初始化定时器TCR为定时器控制寄存器stm #2499,PRD ; f=100M/(2499+1)=40kHz PRD 为计数器周期寄存器stm #20h,TCR ; 重新装入TIM和PSC,然后启动定时器ldm IMR,a ; 重新返回中断屏蔽寄存器or #08h,a ; 启动定时器中断stlm a,IMR ; 设置中断屏蔽寄存器ld #temp,dp ; 设置DP页指针ssbx FRCT ; prepare for fraction mpy FRCT为ST1中的小数方式位;(Ssbx 状态寄存器复位,即对状态寄存器ST0,ST1特定位置1)st #INIT_A,AA ; init AA,BB,CC 即初始化AA BB CCst #INIT_B,BB ;将常数B装入变量BBst #INIT_C,CC ;pshd CC ;将变量CC压入堆栈popd y2 ; init y2,y2=CCld AA,T ; T=AA装载AA到T寄存器mpy y2,a ; y2*AA放入a中sth a,y1 ; y2*AA -> y1(将A寄存器的高十六位放入变量y1)stm #0h,TCR ; 定时器复位noprsbx intm ;复位所有的中断(状态寄存器复位STN (SBIT)=0)again:nopb againnopnopnopnopnopnop;-------------------------------------------------------------; interrupt for INT_TIMER ! 中断服务程序;-------------------------------------------------------------_tint:ld#BB,DPld BB,T ; T=BBmpy y2,a ; a=y2*BBltd y1 ; T=y1,y2=y1mac AA,a ; a=a+y1*AAsth a,1,y1 ; new cos data -> y1sth a,1,y0 ; new cos data -> y0nop ; set breakpoint in CCS !!!int1_end:noprete.end连接命令文件/*====================================================================== ======*//* Copyright (C) 2004 YINXING TECHNOLOGY CO., LTD *//* All Rights Reserved. */ /* ----------------------------------------------------------------------------*//*====================================================================== ======*/MEMORY;描述系统的硬件资源,用来定义用户设计的系统中所包含的的各种形式的存储器{PAGE 1:INT_D : ORIGIN=80h, LENGTH=1F80hPAGE 0:EXT_P : ORIGIN=2000h, LENGTH=2000h}SECTIONS ;描述段如何定位到家当的硬件资源上,将输出段定位到所定义的存储器中{.text : > EXT_P PAGE 0.int_table : > (EXT_P ALIGN (128) PAGE (0)).data : > INT_D PAGE 1}中断向量表:;/*====================================================================== ======*/;/* Copyright (C) 2004 YINXING TECHNOLOGY CO., LTD;/* All Rights Reserved. */ ;/* ----------------------------------------------------------------------------*/;/*====================================================================== ======*/.mmregs ;.ref _ret ;.ref 在当前段中使用,在其他段中定义.ref _c_int00.ref _tint.global vector.sect ".int_table" ;.建立包含代码和数据的定义段;--------------------------------------------------------------------; interrupte vector table !;--------------------------------------------------------------------vector:rs b _c_int00 ;复位nopnopnmi b __ret ;非屏蔽中断nopnopsint17 b __ret ;软件中断sint17nopnopsint18 b __retnopnopsint19 b __retnopnopsint20 b __ret.word 0,0sint21 b __ret.word 0,0sint22 .word 01000h.word 0,0,0sint23 .word 0ff80h /*TMS320C54x中,中断向量地址由PMST寄存器中的9 .word 0,0,0 位向量地址指针IPTR和左移2位后的中断向量序号组sint24 .word 01000h 成,复位时,IPTR全为1,因此中断向量地址为FF80H.*/ .word 0,0,0.word 0,0,0sint26 .word 01000h ;word用来设置一个或多个16位带符号整型常数.word 0,0,0sint27 .word 0ff80h.word 0,0,0sint28 .word 01000h.word 0,0,0sint29 .word 0ff80h.word 0,0,0sint30 .word 01000h.word 0,0,0int0 b __ret ;外部中断0,软中断0nopnopint1 b __ret ;外部中断1,软中断1nopnopint2 b __ret ;外部中断2,软中断2nopnoptint b _tint ;定时中断,软中断3nopnopbrint0 b __ret ;McBSP(串行口)0接收中断nopnopbxint0 b __ret ;McBSP(串行口)0发送中断nopnoptrint b __retnopnopdmac1 b __ret ;McBSP2发送中断(默认)/DMA通道中断,软中断7 nopnopint3 b __ret ;外部中断3,软中断8nopnophpint b __ret ;HPI中断,软中断9nopnopq26 .word 0ff80h.word 0,0,0.word 0,0,0dmac4 b __retnopnopdmac5 b __retnopnopq30 .word 0ff80h.word 0,0,0q31 .word 01000h.word 0,0,0;--------------------------------------------------------------------------; end of interrupte vector table !;-------------------------------------------------------------------------__ret rete ;开中断,从中断快速返回说明:中断向量表是用来装载不同类型的中断服务程序的入口!。

dsp实验:定时器

dsp实验:定时器

实验三:定时器一、实验原理1.定时器的结构2.定时器中断周期3.实验功能:通过XF管脚控制LED闪动以一定规律进行闪烁。

二、硬件资源及在片外围电路硬件资源:DSP芯片、CPU、LED、蜂鸣器、电阻、电容等在片外围电路:时钟发生器、定时器、通用输入/输出口等三、参数设置CPU工作时钟:*clkmd =0x21b3;0010000110110011CLKOUT=18M中断频率:9 /* PRSC 4bit*/18M/9000=2KHZ 四、实验流程图五、程序#include <stdio.h>#include <csl.h>#include <csl_irq.h>#include <csl_timer.h>#include <csl_chiphal.h>extern void VECSTART(void);#define TIMER_CTRL TIMER_TCR_RMK(\TIMER_TCR_IDLEEN_DEFAULT, /* IDLEEN == 0 */ \TIMER_TCR_FUNC_OF(0), /* FUNC == 0 */ \TIMER_TCR_TLB_RESET, /* TLB == 1 */ \TIMER_TCR_SOFT_BRKPTNOW, /* SOFT == 0 */ \TIMER_TCR_FREE_WITHSOFT, /* FREE == 0 */ \TIMER_TCR_PWID_OF(0), /* PWID == 0 */ \TIMER_TCR_ARB_RESET, /* ARB == 1 */ \TIMER_TCR_TSS_START, /* TSS== 0 */ \TIMER_TCR_CP_PULSE, /* CP== 0 */ \TIMER_TCR_POLAR_LOW, /* POLAR == 0 */ \TIMER_TCR_DATOUT_0 /* DATOUT == 0 */ \)/* Create a TIMER configuration structure that can be passed *//* to TIMER_config CSL function for initialization of Timer *//* control registers. */ TIMER_Config timCfg0 = {TIMER_CTRL, /* TCR0 */// 0x3400u, /* PRD0 0x3400=13312*/ 14400, /* PRD0 16bit0x3400=144000=14400*10*/9 /* PRSC 4bit*/}; //中断频率=Fcpu/(9000*1)=144MHz/13312=1kHzUint16 eventId0;/* Create a TIMER_Handle object for use with TIMER_open */ TIMER_Handle mhTimer0;volatile Uint16 timer0_cnt = 0;/* Function/ISR prototypes */interrupt void timer0Isr(void);int old_intm;Uint16 tim_val;Uint16 xfchange = 0;Uint16 ms,f;void main(void){/* Initialize CSL library - This is REQUIRED !!! *//*CLS库的初始化,这是必需的*/CSL_init();/* Set IVPH/IVPD to start of interrupt vector table *//*修改寄存器IVPH,IVPD,重新定义中断向量表*/IRQ_setVecs((Uint32)(&VECSTART));/* Temporarily disable all maskable interrupts *//*禁止所有可屏蔽的中断源*/old_intm = IRQ_globalDisable();/* Open Timer 0, set registers to power on defaults *//*打开定时器0,设置其为上电的的默认值,并返回其句柄*/ mhTimer0 = TIMER_open(TIMER_DEV0, TIMER_OPEN_RESET);/* Get Event Id associated with Timer 0, for use with *//* CSL interrupt enable functions. *//*获取定时器0的中断ID号*/eventId0 = TIMER_getEventId(mhTimer0);/* Clear any pending Timer interrupts *//*清除定时器0的中断状态位*/IRQ_clear(eventId0);/* Place interrupt service routine address at *//* associated vector location *//*为定时器0设置中断服务程序*/IRQ_plug(eventId0,&timer0Isr);/* Write configuration structure values to Timer control regs */ /*设置定时器0的控制与周期寄存器*/TIMER_config(mhTimer0, &timCfg0);/* Enable Timer interrupt *//*使能定时器的中断*/IRQ_enable(eventId0);/* Enable all maskable interrupts *//*设置寄存器ST1的INTM位,使能所有的中断*/IRQ_globalEnable();/* Start Timer *//*启动定时器0*/TIMER_start(mhTimer0);ms=0;for(;;){// Wait for at least 10 timer periods//等待10个定时周期if(xfchange == 0){//点亮XF的LEDCHIP_FSET(ST1_55,XF,1);}else{//关掉XF的LEDCHIP_FSET(ST1_55,XF,0);}}/* Restore old value of INTM *//*恢复INTM旧的值*/IRQ_globalRestore(old_intm);/* We are through with timer, so close it */ /*关掉定时器0*/TIMER_close(mhTimer0);}/*定时器0的中断程序*/interrupt void timer0Isr(void){ms++;++timer0_cnt;if(timer0_cnt == 500){xfchange = 1;}if(timer0_cnt == 1000){timer0_cnt = 0;xfchange = 0;}}。

DSP实验报告

DSP实验报告

实验一:CPU 定时器实验一:实验目的1、熟悉F2812 的CPU 定时器;2、掌握F2812 的CPU 定时器的控制方法;3、学会使用CPU 定时器中断方式控制程序流程。

二:实验设备计算机,CCS 3.1 版软件,DSP 硬件仿真器,E300 实验箱,2812CPU 板。

三:实验原理样例实验是采用CPU 定时器来定时使LED 亮灭的。

F2812 的CPU 定时器不同于事件管理器模块(EVA、EVB)中的通用定时器(GP)。

F2812 的CPU共有三个定时器,其中,CPU 定时器 1 和 2 被保留用作实时操作系统OS(例如DSPBIOS),CPU 定时器0 可以供用户使用。

定时器的一般操作如下:将周期寄存器PRDH:PRD 中的值装入32 为计数器寄存器TIMH:TIM。

然后计数器寄存器以F281x 的SYSCLKOUT 速率递减。

当计数器减到0 时,就会产生一个定时器中断输出信号(一个中断脉冲)。

下图为CPU 定时器的内部结构:四:实验步骤1 、F2812CPU 板的JUMP1 的1 和2 脚短接,拨码开关SW1 的第二位置ON;其余置OFF。

2 、E300 底板的开关SW4 的第2 位置ON,其余位置OFF。

其余开关设置为OFF。

3 、运行CCS 软件,调入样例程序,装载并运行;(进入CCS 界面后需要点“Debug--Connect”)4 、加载“..\ e300_03_cpu_timer\Debug\Example_281x_cpu_timer.out”;5 、单击“Debug \ Animate”运行,可观察到灯LED1~LED8 的变化规律:6 、单击“Debug \ Halt”,暂停程序运行,LED 灯停止闪烁;单击“Debug \ Run”,运行程序,LED 灯又开始按上述规律变化;五:实验程序及结果修改后程序如下:/*;**************************************************************;* 北京达盛科技有限公司;* 研发部;*;* ;*************************************************************//*----------------------- 文件信息----------------------------;*;* 文件名称: Example_DSP281x_e300_switch.c;* 适用平台: DSP E300 实验箱;;* CPU类型: DSP TMS320F2812;* 软件环境: CCS3.1;* 试验接线: 1、F2812CPU板上:JUMP1的1和2脚短接,拨码开关SW1的第二位置ON;;* 2、E300底板的开关SW4的第2位置ON,其余置OFF。

[整理]DSP定时器实验.

[整理]DSP定时器实验.
-------------
-------------
}
interrupt void ISRTimer2(void)
{
CpuTimer2.InterruptCount++;
if(Led_Flag==1)
{ LED1_ON;
*LED3=0;
Led_Flag=0;}
else
{LED1_OFF;
*LED3=1;
(2)用 C 语言编程对频率为 400Hz、幅度为 1V 的三角波;利用通道 1=〉ADCINA4 口实现不同采样频率(8KHz、 44KHz 、 96KHz )下的 ADC 转换,采样长度 1024 点。
四、 小结与体会
通过本次实验,我学习了将 TMS320F2812 片上外设 AD,也了解了片上 AD 的 使用及通道的选择,学会了如何利用片上 AD 进行数据采集。
acc=0; y0=0; for (i=0;i<n;i++) {
if(i+j>=m) break;
else {
y0=(long)(h[i]*x[j+i]); acc=acc+y0; } } *y++=(short)(acc>>s); } 3、波形
噪声正弦 300Hz 1v 通道 0 滤波前时域
-------------
一、 实验目的
1、掌握数字滤波器的设计过程 2、了解 FIR 的原理和特性 3、熟悉设计 FIR 数字滤波器的原理和方法
二、实验原理
1、有限冲击响应数字滤波器(FIR)的基础理论: FIR 数字滤波器是一种非递归系统,其冲激响应 h(n)是有限长序列其差分
方程表达式为:

用定时器实现数字振荡器(DSP实验报告)

用定时器实现数字振荡器(DSP实验报告)

用定时器实现数字振荡器一、 实验目的在数字信号处理中,会经常使用到正弦/余弦信号。

通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP 工作时仅作查表运算即可。

在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。

本实验除了学习数字振荡器的 DSP 实现原理外,同时还学习 C54X 定时器使用以及中断服务程序编写。

另外,在本实验中我们将使用汇编语言和 C 语言分别完成源程序的编写。

二、 实验原理1) 数字振荡器原理设一个传递函数为正弦序列 sinkωT ,其 z 变换为2111)(-----=BzAz Cz z H 其中,A=2cosωT, B=-1, C=sinωT 。

设初始条件为 0,求出上式的反 Z 变换得:y[k]=Ay[k-1]+By[k-2]+Cx[k-1]这是一个二阶差分方程, 其单位冲击响应即为 sinkωT 。

利用单位冲击函数 x[k-1]的性质,即仅当 k=1时,x[k-1]=1,代入上式得: k=0 y[0] = Ay[-1] + By[-2] + 0 = 0k=1 y[1] = Ay[0] + By[-2] + c = ck=2 y[2] = Ay[1] + By[0] + 0 = Ay[1]k=3 y[3] = Ay[2] + By[1] .…… .k=n y[n]= Ay[n-1] + By[n-2]在 k>2 以后,y[k]能用 y[k-1]和 y[k-2]算出,这是一个递归的差分方程。

根据上面的说明,我们可以开始数字振荡器的设计。

设该振荡器的频率为 2kHz ,采样率为 40kHz (通过定时器设置,每隔 25us 中断一次,即产生一个 y[n]) ,则递归的差分方程系数为:A=2cosωT=2cos (2 x PI x 2000 / 40000)=2 x 0.95105652B=-1C=sinωT=sin (2 x PI x 2000 / 40000)=0.30901699BC A 792215=⨯ 0002215C B =⨯ 7132215C C =⨯ 为了便于定点 DSP 处理,我们将所有的系数除以 2,然后用 16 位定点格式表示为:这便是本实验中产生 2KHz 正弦信号的三个系数。

DSP定时器实验报告之lml

DSP定时器实验报告之lml

DSP定时器实验报告姓名 6666666班级 66666666学号 **********专业通信工程2013 年 5月一、实验目的1. 通过实验熟悉VC5509A的定时器;2. 掌握VC5509A定时器的控制方法;3. 掌握 VC5509A 的中断结构和对中断的处理流程;4. 学会 C 语言中断程序设计,以及运用中断程序控制程序流程。

二、实验器材计算机,ICETEK-VC5509-A 实验箱(或 ICETEK 仿真器+ICETEK–VC5509-A 系统板+ 相关连线及电源)。

三、实验原理1. 通用定时器介绍及其控制方法TMS320VC5509A 内部有两个 20 位通用定时器(GP):*每个通用定时器包括:- 一个 16 位的减计数的计数器 TIM;- 一个 16 位的定时器周期寄存器 PRD;- 一个 16 位的定时器控制寄存器 TCR;- 一个 16 位的定时器预定标寄存器 PSCR;*PSCR寄存器说明:图1 PSCR寄存器PSCR: 4 位的预定标值,与TIM 共同组成 20 位的定时计数器。

TDDR: 预定标周期寄存器(在需要时重装入 PSC 的值)。

TCR 寄存器说明。

2.中断响应过程外设事件要引起 CPU 中断,必须保证:IER 中相应使能位被使能,IFR 相应中断也被使能。

在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器 1 会引起 TINT 中断),程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。

3. 中断程序设计- 程序中应包含中断向量表,VC5509A默认向量表从程序区 0 地址开始存放,根据IPVD 和IPVH 的值确定向量表的实际地址。

- 注意观察程序中 INTR_init()函数的定义部分,其中 IPVD 和 IPVH 的值都为0x0d0;同时观察配置文件 ICETEK–VC5509-AE.cmd 中的 VECT 段描述中o=0x0d000。

定时器dsp实验报告

定时器dsp实验报告

实验四定时器实验实验目的与要求:1、熟悉C54的定时器;2、掌握C54定时器的控制方法;3、学会使用定时器中断方式控制程序流程。

一.实验设备计算机,CCS2.0版软件,DSP硬件仿真器,实验箱。

二.实验步骤和内容1、运行CCS软件,调入样例程序,装载并运行;2、定时器试验通过数字量输入输出单元的LED6~LED13来显示;3、启动CCS2.0,并打开工程exp04.pjt,编译,加载,运行。

启动CCS 2.0,并加载“exp04.out”;单击“Run”运行,可观察到LED灯(LED6~LED13)以一定的间隔时间不停摆动;单击“Halt”,暂停程序运行,LED灯停止闪烁;单击“Run”,运行程序,LED灯又开始闪烁;关闭所有窗口,本实验完毕。

三.问题及流程图一:在程序initial.asm 中:1、第12行中,注释为“set C5402 DSP clock to 10MHz”,为什么?如果: 要求“set C5402 DSP clock to 150MHz”,怎么修改。

答:软件可编程PLL受时钟方式寄存器CLKMD的控制,CLKMD用来定义PLL时钟模块中的时钟配置。

0xF7FF中第11位为0,PLLMUL即第15~12位为15,选择了PLL乘系数为1,芯片的工作频率等于输入时钟CLKIN乘以PLL的乘系数,即10M*1=10M。

设置PLL的乘系数为15,PLLMUL=14,PLLDIV=0,即E7FF,可使得频率为150M。

2、第13行中,STM 0x3FA0, PMST ; 注释为:vectors at 3F80h,是指什么?中断向量地址是多少?答:中断向量地址是由PMST寄存器中的IPTR(9位中断向量指针)和左移2位后的中断向量序号所组成。

0x3FA0h的高9位为0011 1111 1,后7位补0即为0x3F80h。

内部定时器0中断的中断序号为19,即001 0011,左移2位后为100 1100,中断向量地址是0011 1111 1100 1100,即为0x3FCCh。

DSP 定时器实验

DSP 定时器实验

实验三CPU定时器实验一、实验目的1、通过实验掌握TMS320F2812DSP的CPU定时器的控制方法2、掌握TMS320F2812DSP的中断结构和中断服务流程3、了解音乐发生方法二、预习要求TMS320F2812内部有3个32位的通用定时器(Timer0/1/2),这3个定时器具有完全相同的控制结构。

其中Timer1和Timer2被保留给DSP BIOS或实时操作系统(RTOS),只有定时器0可以提供给用户使用,其结构如图所示。

若处理器采用30MHz的外部时钟,经过锁相环10/2倍频后,系统的工作时钟在150MHz。

一旦定时器被使能,定时器时钟通过预定标计数器(PSCH:PSC)递减计数,预定标计数器产生下溢后项定时器的32位计数器(TIMH:TIM)借位。

最后当定时器计数器(TIMH:TIM)产生溢出使定时器向CPU发送中断。

定时器中断结构如下图所示:三、实验原理与参考电路ICETEK-CTR板上有一个蜂鸣器直接受DSP的GPIO控制,电路原理图如下图所示。

图中GPIO1指的是TMS320F2812的PWM1管脚,如果要蜂鸣器发出声音,需要在GPIO1上输出高电平,如果输出低电平,则蜂鸣器不响。

也可以控制PWM2管脚按一定的频率改变高低状态,输出方波,蜂鸣器便发出与之对应的音乐声。

下表为C调中7个音对应的频率(Hz)。

1(dao)2(re)3(mi)4(fa)5(sao)6(la)7(xi)低音262286311349392440494中音523587659698784880987高音1046117413181396156717601975四、实验内容1、配置CCS工作环境:⑴双击桌面上图标:,进入CCS 设置窗口。

⑵在出现的窗口中按标号顺序进行如下设置:(3)在出现的窗口中按标号顺序进行如下设置:(4)在出现的窗口中按标号顺序进行如下设置:②鼠标左键单击删除此配置①单击选择C28XX②单击选择ICETEK emulator(5)在下面出现的窗口中选择“是(Y)”。

DSP原理与应用实验报告

DSP原理与应用实验报告

DSP原理与应用定时器姓名班级 0120808 专业电子信息工程2011 年 12 月DSP的定时器实验报告一、实验目的1. 通过实验熟悉VC5509A的定时器;2. 掌握VC5509A定时器的控制方法;3. 掌握 VC5509A 的中断结构和对中断的处理流程;4. 学会 C 语言中断程序设计,以及运用中断程序控制程序流程。

二、实验设备计算机,ICETEK-VC5509-A 实验箱(或 ICETEK 仿真器+ICETEK–VC5509-A 系统板+相关连线及电源)。

三、实验原理1.通用定时器介绍及其控制方法TMS320VC5509A 部有两个 20 位通用定时器(GP):*每个通用定时器包括:- 一个 16 位的减计数的计数器 TIM;- 一个 16 位的定时器周期寄存器 PRD;- 一个 16 位的定时器控制寄存器 TCR;- 一个 16 位的定时器预定标寄存器 PSCR;2.中断响应过程外设事件要引起 CPU 中断,必须保证:IER 中相应使能位被使能,IFR 相应中断也被使能。

在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器 1 会引起 TINT中断),程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。

3. 中断程序设计- 程序中应包含中断向量表,VC5509A默认向量表从程序区 0 地址开始存放,根据 IPVD 和IPVH 的值确定向量表的实际地址。

- 注意观察程序中 INTR_init()函数的定义部分,其中 IPVD 和 IPVH 的值都为0x0d0;同时观察配置文件 ICETEK–VC5509-AE.cmd 中的 VECT 段描述中 o=0x0d000。

- 向量表中每项为 8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址。

第一个向量表的首项为复位向量,即 CPU复位操作完成后自动进入执行的程序入口。

DSP实验十七 DSP实现数字振荡器

DSP实验十七  DSP实现数字振荡器

实验十七DSP实现数字振荡器一、实验目的l、掌握数字振荡器的设计过程;2、了解数字振荡器的原理和特性;3、熟悉设计数字振荡器的几种方法--递归法、泰勒展开法等。

二、实验内容1、给定参数,设计出振荡器;2、观察设计的振荡器波形。

三、实验原理以及源代码分析最常见的振荡器如正弦波、余弦波既可以由CCS程序本身产生,也可以由其它工具如MA TLAB、TC等先产生数据文件(.dat),然后由DSP主程序导入,用于调制解调滤波等程序应用中。

由DSP本身产生正、余弦波也有多种方式,如递归法,泰勒公式展开法等,也可以直接在CCS中用C语言调用库函数double sin(double x)和double cos(double x)用一个循环语句产生正余弦波序列,因此,要产生振荡波有多种方法可供选择,选择哪一种还要看具体应用的要求。

下面概要介绍汇编语言实现的泰勒法和递归法程序:1、泰勒法:此程序的主要思想是通过定时器每隔一定时间产生中断,迫使主程序进入中断服务程序,这儿是“B sine_isr”,sine_isr子程序产生一个正弦波抽样值,放到sinwave缓冲区。

值得注意的是,本程序利用泰勒级数展开的方法首先在sin_initial和cos_initial子程序中获得正、余弦波的头两个初始值,为了达到程序的实时性,在接下来的过程中,不再用泰勒级数计算其它正弦波抽样值,而用三角递归公式计算新的正弦波值:sin_n_theta=2*cos_theta*(sin_n-1_theta)-(sin_n-2_theta),这样就大大减少了处理器的运算量,从而加快了计算速度。

另外,taylor.asm是主文件,需要在工程中设置entry point为此文件START作为入口。

;*******************************************************;CLKOUT=100MHz,Fs=16kHz,fd=10kHz;theta=2*pi*fd/Fs=0.39269908=0x3243;pi/2=1.57079632,pi/4=0.785398163=0x6487;sin_n_theta=2*cos_theta*(sin_n-1_theta)-(sin_n-2_theta);*******************************************************.mmregs.def start.global sine_isr,sin_init,cos_init.global theta.bss sinwave,256Y0 .usect "y",1Y1 .usect "y",1Y2 .usect "y",1Y_COS .usect "y",1PERIOD .set 8000hK_THETA .set 0x 2162.textstart: B timervector: .align 0x80.space 4*16*19 ;定时中断入口地址B sine_isrNOPNOP.space 4*16*12 ;保留其他中断入口地址timer:LD #0, DPSSBX SXMSSBX FRCTLD #vector, AAND #0FF80h, AANDM #007Fh, PMSTOR PMST, ASTLM A, PMST ;设置IPTRSTM #sinwave,AR5RPTZ A,#255STL A,*AR5+STM #sinwave,AR5STM #Y0,AR1ST #0,*AR5+ST #0,*AR1+LD #K_THETA,ACALL sin_initSTL A,*AR5+STL A,*AR1+LD #K_THETA,ACALL cos_initSTM #Y_COS,AR3STL A,*AR3STM #PERIOD, PRDSTM #0010h, TCR ;TDDR=0STM #0020h, TCR ;TRB=1STM #0FFFFh, IFR ;清除所有中断STM #8h, IMR ;打开时钟中断RSBX INTM ;开中断NOPNOPB $******************************************** 时钟中断处理程序*******************************************sine_isr:STM #Y2,AR2STM #Y1,AR3MVDD *AR3,*AR2STM #Y_COS,AR4LD *AR3-,TMPY *AR4-,ASFTA A,-15,ASUB *AR3+,ASTL A,*AR3-STL A,*AR5+MVDD *AR2,*AR3RETE.end文件taysin.asm,用来计算sin(θ)值。

dsp实验报告哈工大实验一定时器实验

dsp实验报告哈工大实验一定时器实验

dsp实验报告哈工大实验一定时器实验实验一定时器实验一. 实验目的1. 通过实验熟悉LF2407A 的定时器;2. 掌握LF2407A 定时器的控制方法;3. 掌握LF2407A 的中断结构和对中断的处理流程;4. 学会运用中断程序控制程序流程。

二. 实验设备计算机,ICETEK-LF2407-EDU 实验箱(或ICETEK 仿真器+ICETEK-LF2407-A系统板+ 相关连线及电源)。

三. 实验原理1. 通用定时器介绍及其控制方法⑴.事件管理器模块(EV)TMS320LF2407A DSP 片内包括两个事件管理模块EVA 和EVB ,每个事件管理器模块包括通用定时器(GP)、比较单元以及正交编码脉冲电路。

每个事件管理模块都包含两个通用定时器,用以完成计数、同步、定时启动ADC、定时中断等功能。

⑵.通用定时器(GP)每个通用定时器包括:一个16 位的定时器增/减计数的计数器TxCNT,可读写;一个16 位的定时器比较寄存器(双缓冲,带影子寄存器)TxCMPR,可读写;一个16 位的定时器周期寄存器(双缓冲,带影子寄存器)TxPR,可读写;一个16 位的定时器控制寄存器TxCON,可读写;可选择的内部或外部输入时钟;用于内部或外部时钟输入的可编程的预定标器(Prescaler);控制和中断逻辑,用于4 个可屏蔽中断—下溢、溢出、定时器比较和周期中断;可选择方向的输入引脚TDIRx,用于双向计数方式时选择向上或向下计数。

通用定时器之间可以彼此独立工作或相互同步工作,完成复杂的任务。

通用定时器在中断标志寄存器EVAIFRA,EVAIFRB,EVBIFRA 和EVBIFRB中有12 个中断标志位。

每个通用定时器可根据以下事件产生4 个中断:上溢—TxOFINF(x=1,2,3 或4);下溢—TxUFINF(x=1,2,3 或4);比较匹配--TxCINT(x=1,2,3 或4);周期匹配--TxPINT(x=1,2,3 或4)。

DSP控制器原理及技术实验报告

DSP控制器原理及技术实验报告

实验二定时器一.实验目的1. 熟悉如何编写28335 的中断服务程序;2. 掌握长时间间隔的定时器的处理。

3. 掌握片内外设的设置方法。

二.实验内容1. 系统初始化;2. DSP 的初始设置;3. 定时中断的编写;三.实验要求1. 通过本实验,熟悉中断的结构及用中断程序控制程序流程,掌握定时器的应用;2. 分析给定程序代码功能,并在实验报告中给出程序流程图和必要的注释;3. 改变定时时间,下载运行,观察结果,在报告中计算出运行时间。

四.实验背景知识TMS320F28335 片上有3 个32-位CPU 定时器,分别被称为CPU 定时器0、1 和2。

每个定时器中均有一个32-位减计数器,当计数器减到0 时,产生一个中断。

其中,CPU 定时器0 的中断TINT0 为PIE 中断,CPU 定时器1 的中断TINT1 直接连到CPU中断的INT13,CPU 定时器 2 的中断TINT2 直接连到CPU 中断的INT14。

如下图所示。

CPU 定时器2 保留为实时操作系统(如DSP BIOS)使用,而CPU 定时器0、1 则可被用户使用,SEED-DEC28335 未使用CPU 定时器0,用户可以根据应用的需要灵活使用。

CPU 定时器的原理框图和定时中断如下图所示。

定时器在工作过程中,首先用32 位计数寄存器(TIMH:TIM)装载周期寄存器(PRDH:PRD)内部的值。

计数寄存器根据SYSCLKOUT 时钟递减计数。

当计数寄存器等于0 时,定时器中断输出产生一个中断脉冲。

定时器计数器(TIMH:TIM):TIM 寄存器保存当前32 位定时器计数值的低16 位,TIMH 寄存器保存高16 位。

每隔(TDDRH:TDDR+1)个时钟周期TIMH:TIM 减1,当TIMH:TIM 递减到0 时,TIMH:TIM 寄存器重新装载PRDH:PRD 寄存器保存的周期值,并产生定时器中断TINT信号。

定时器周期寄存器(PRDH:PRD):PRD 寄存器保存32 位周期值的低16 位,PRDH 保存高16 位。

实验五 数字振荡器实验

实验五 数字振荡器实验

实验五 数字振荡器实验一、实验目的本实验属于综合性实验,在项目开发中,我们经常要用产生某一频率的正弦振荡信号,比如在电话通信中,用两个不同频率的正弦信号的叠加来代表按键。

正弦信号的生成方法有三种,计算法、查表法和数字振荡器。

用计算法求正弦波的离散序列值程序设计容易,但实际应用时会占用计算时间,使系统运行速度变慢。

查表法是先通过matlab 将正弦波的序列值计算出来并寄存在存储器中,运行时只要按顺序和一定的速度取出便可。

这种方法要占用较多的存储空间,但是速度快。

第三种方法是利用数字振荡器来实现不同频率信号的叠加,这种方法通过迭代的方法计算出不同频率的正弦信号序列,结构简单,运算速度快,节省内存,因此在DSP 实际应用中我们选择这种方法。

数字振荡器的本质是,使用一个IIR (Infinite Impulse Response )滤波器,通过把它的极点放在单位圆上面来产生振荡。

利用正弦波sinx 的指数形式)(21sin jx jxe e j x --=可以得到正弦序列x(n)的Z 变换为)(21)sin(][jnwT jnwTe e j T n n x --==ϖ110011[()]()(X )2z 2jnwT jnwT n jwT n jwT nn n e e z e z e z j j ∞∞-----==⎡⎤-=-⎣⎦=∑∑() 12jwT jwT z z j z e z e -⎡⎤=-⎢⎥--⎣⎦222122cos()1jwT jwT z ze z ze j z z wT -⎡⎤--+=⎢⎥-+⎣⎦22sin()2cos()1z wT Czz z wT z Az B==-+--,此式在|z|>1时成立,且)sin(,1),cos(2wT C B wT A =-==。

根据Z 变换的基本原理和性质,序列x[n]及其Z 变换X (z )之间存在一一对应的关系,即对于给定的X (z ),可以通过反Z 变换,唯一地确定x[n]。

DSP实验4实验报告

DSP实验4实验报告

实验4 C54xDSP定时器及中断使用一、实验目的1、学会通过TI公司的片上支持库来调用片上外围设备;2、学会使用C54x系列DSP的定时器;3、学会使用C54x系列DSP的中断系统;二、实验原理C54xDSP片上支持库CSL的详细使用方法及步骤见“TMS320C54x CSL.pdf”。

1、定时器的使用(a)C语言部分(1)在预编译处包含CSL库及对应的定时器库;#include<stdio.h>#include<csl.h>#include<csl_timer.h>#include<csl_irq.h>(2)定义定时器的配置结构及句柄;TIMER_Config timerCfg1={0x0000,0x0080u};TIMER_Handle hTimer1;(3)在运行程序的开始调用“CSL初始化函数”;CSL_init();(4)在运行程序内调用“定时器打开函数”和“定时器配置函数”;hTimer1=TIMER_open(TIMER_DEV0,TIMER_OPEN_RESET);TIMER_config(hTimer1,&timerCfg1);(5)在需要开始计时的时候调用“定时器开始函数”;TIMER_start(hTimer1);(6)不再需要计时的时候调用“定时器停止函数”;TIMER_stop (hTimer1);(b)CCS Project Build Option部分(1)Compiler 下 Preprocessor 设置;(2)Linker 下 Libraries 设置;三、实验内容1、利用TI公司已定义的片上支持库,正确配置及使用定时器和中断,使能定时器中断;#include<stdio.h>#include<csl.h>#include<csl_timer.h>#include<csl_irq.h>TIMER_Config timerCfg1={0x0000,0x0080u};TIMER_Handle hTimer1;interrupt void timerIsr();int temp,timer_int_cnt;void main(){int temp=0;CSL_init();IRQ_plug (IRQ_EVT_TINT0,&timerIsr);IRQ_enable(IRQ_EVT_TINT0);IRQ_globalEnable();hTimer1=TIMER_open(TIMER_DEV0,TIMER_OPEN_RESET);TIMER_config(hTimer1,&timerCfg1);TIMER_start(hTimer1);while(1){};TIMER_stop (hTimer1);}interrupt void timerIsr(void){TIMER_stop (hTimer1);timer_int_cnt=timer_int_cnt+1;if(timer_int_cnt<20){TIMER_start(hTimer1);}printf("Now Enter a Timer interupt!\n");}2、编写相应的定时器中断服务函数,运行程序,把断点设置在中断服务函数内,并使程序在该断点处停下,并在CCS软件调试窗口上打印相应的提示。

DSP实验:定时器实验

DSP实验:定时器实验

DSP实验:定时器实验DSP实验二定时器实验一、实验目的1、熟悉C54X定时器的基本结构;2、掌握定时器的控制方法;3、掌握使用定时器中断方式控制程序的流程。

二、实验设备计算机、CCS2.0版软件,DSP仿真器、实验箱。

三、实验系统相关资源1、通过对I/0口8001H发送数据来控制LED灯(LED6-LED13)2、系统时钟频率设定为20MHz。

STM #0xF7FF, CLKMD ; set C5402 DSP clock to 10MHz 3、定时器中断周期=TCLK*(TDDR+1)*(PRD+1)其中TCLK 是时钟周期,在本系统中,TCLK=1/10MHz=100ns,TDDR 和PRD 分别表示定时器初始化时TCR相应位(0-3)和PDR的值。

4、定时器的初始化(1) 将TCR中的TSS位置1,停止定时器。

(2) 加载PRD。

(3) 重新加载TCR以初始化TDDR。

(4) 重新启动定时器。

TSS位为0,TRB位为l, 以重载定时器周期值,使能定时器。

5、定时器中断的设置(1)初始化PMST中的中断向量指针,在本实验中设IPTR =001111111B,即中断向量表为3F80H起始的128个存储单元。

(2)intt中断号为19,在中断向量表中对应的位置设置一条跳转指令,转向定时器中断服务程序。

6、中断服务程序的设计包括保护现场、执行中断服务程序和恢复现场三个步骤,在本实验中,使用C 函数编写定时器中断子程序,保护现场和恢复现场有C 函数自动实现。

四、实验步骤1、用仿真机将计算机与数字信号处理实验箱连接好,并依次打开实验箱电源、仿真机电源,然后运行CCS 软件。

2、打开工程文件Exp2.pjt,编译、链接生成可执行代码,装载到目标板,运行程序并记录实验结果。

3、查看工程源程序,分析C 语言各函数以及汇编语言子程序之间的调用关系。

4、查看initial.asm 的源代码,求出定时器初始化时PDR 和TDDR 的取值,计算定时器中断周期。

DSP实验报告定时器2

DSP实验报告定时器2

实验二DSP系统定时器的使用一、实验目的:1、掌握5402 DSP片上定时器的初始化设置及应用;2、掌握DSP系统中实现定时的原理及方法;3、了解5402 DSP中断寄存器IMR、IFR的结构和使用;4、掌握5402 DSP系统中断的初始化设置过程和方法;5、掌握在C语言中嵌入汇编语句实现数字I/O的方法。

二、实验原理:1、定时器及其初始化在5402内部包括两个完全相同的定时器:定时器0和定时器1。

每个定时器分别包括3个寄存器:定时器周期寄存器PRD、定时器寄存器TIM、定时器控制寄存器TCR,其中TCR 寄存器中包括定时器分频系数TDDR、定时器预分频计数器PSC两个功能寄存器。

通过PRD 和TDDR可以设置定时器的初始值,TIM(16bits)和PSC(4bits)是用于定时的减法计数器。

CLKOUT是定时器的输入时钟,最大频率为100Mhz。

定时器相当于20bit的减法计数器。

定时器的结构如图1所示。

图1 定时器的组成框图定时器的定时周期为:CLKOUT×(TDDR+1)×(PRD+1)其中,CLKOUT为时钟周期,TDDR和PRD分别为定时器的分频系数和时间常数。

在正常工作情况下,当TIM减到0后,PRD中的时间常数自动地加载到TIM。

当系统复位或者定时器单独复位时,PRD中的时间常数重新加载到TIM。

同样地,每当复位或PSC减到0后,定时器分频系数TDDR自动地加载到PSC。

PSC在CLKOUT作用下,作减1计数。

当PSC 减到0时,产生一个借位信号,令TIM作减l计数。

TIM减到0后,产生定时中断信号TINT,传送至CPU和定时器输出引脚TOUT。

例如:欲设置定时器0的定时周期为1ms,当DSP工作频率为100Mhz时,通过上式计算可得出:TDDR=15,PRD=6520。

2、定时器的使用下面是一段定时器应用程序,每检测到一次中断,ms+1,利用查询方式每计500个数就令XF引脚的电平翻转一次,在XF引脚输出一矩形波信号,因定时器1ms中断一次,故500ms就使LED翻转一次,这样LED指示灯就不停地闪烁。

DSP实验手册实验二定时器实验

DSP实验手册实验二定时器实验

DSP实验手册实验二定时器实验实验二定时器实验一、实验目的:1、了解DSP汇编程序的构成;2、了解DSP程序各段的含义;3、熟悉在汇编条件下如何编写中断服务程序;4、了解串行通讯的过程5、掌握长时间间隔的定时器的处理。

6、掌握片内外设的设置方法。

二、实验内容:1、 DSP的初始设置;2、 DSP中断向量表的建立;3、定时中断的编写;4、查询方式异步串口程序的编写;三、实验背景知识:TMS320VC5416的定时器的说明:VC5416中有一个可编程的片上定时器,总共包含有三个可由用户设置的寄存器,并可以申请主机的中断。

这三个寄存器分别为TIM、PRD、TCR。

这些寄存器与对应的存贮空间地址如下表所示:时间寄存器(TIM)是一个16位的存贮器映射寄存器,它的值由周期寄存器来进行装载,并且做减一操作。

周期寄存器(PRD)是一个16位的存贮器映射寄存器,它是用来重装时间寄存器(TIM)寄存器的值的。

定时器控制寄存器(TCR)是一个16位的存贮器映射寄存器,包含了定时器的控制与状态信息。

TCR的寄存器说明见下表;四、实验程序功能与结构说明:在定时器实验中,主要是以学习与认识DSP汇编程序为主要的目的,因而所有的程序均以汇编程序来完成的。

主要包含了以下文件:1、 timer..asm:包含了以下功能:1) DSP的初始化:设定VC5416的初始软件等待周期,设定存贮区的映射,建立中断向量表,系统时钟的设定,异步串口的初始化。

2) 异步串口的发送与接收子程序。

3) 定时器的操作及中断服务程序。

2、 vector.asm:包含了VC5416的中断向量表。

3、dec5416.cmd:声明了系统的存贮器配置与程序各段的链接关系。

4、 vc54x.inc: 声明了VC54x系列DSP的片内寄存器的地址与设置的常量定义。

5、dec5416.inc:定义了SEED-DEC5416模板上资源的地址与设置的常量定义。

6、 timer.out:DSP上可执行的程序,即实验程序。

DSP实验报告_百度文库(精)

DSP实验报告_百度文库(精)

实验0 实验设备安装才CCS调试环境实验目的:按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。

实验步骤:以演示实验一为例:1.使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源;2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStart\sinewave\”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out;3.打开源文件exer3.asm,在注释行“set breakpoint in CCS !!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示;4.点击主菜单“View->Graph->Time/Frequency…”,屏幕会出现图形窗口设置对话框5.双击Start Address,将其改为y0;双击Acquisition Buffer Size,将其改为1;DSP Data Type设置成16-bit signed integer,如下图所示;6.点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察7.点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果:心得体会:通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。

熟悉了DSP实验箱基本模块。

让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。

实验二基本算数运算2.1 实验目的和要求加、减、乘、除是数字信号处理中最基本的算术运算。

DSP实验2

DSP实验2

实验二用定时器实现数字振荡器一、实验目的1.在数字信号处理中,会经常使用到正弦/余弦信号。

通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP工作时仅作查表运算即可。

在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。

2.本实验除了学习数字振荡器的DSP实现原理外,同时还学习C6000定时器(在本实验中使用的是TMS320C6713)使用以及中断服务程序编写。

3.熟悉CCS集成软件开发环境,集成汇编、C、VC++;二、实验步骤1. 启动CCS,打开工程文件,文件名为Timer.pjt。

该工程文件含有C源程序commonISR.c、Timer.c、InitCSL.c,汇编源程序vector.asm和连接定位Timer.cmd文件,其中,vector.asm包含中断向量表,commonISR.c包含中断服务程序,而InitCSL.c就是用CSL对片上外设进行初始化,在这里是对Timer进行初始化。

有选择地修改程序代码。

2. 选择Project菜单中的Build Options选项,或使用鼠标右键单击工程文件名(如Timer.pjt)并选择Options来修改或添加编译、连接中使用的参数。

例如,选择Compiler窗口,在Preprocessor中的“Include Search Path”可以写入包括头文件的路径。

选择Linker窗口,在Basic中的“Include Libraries”可以写入包括对库文件的路径,其中就包括C的标准库rts6700.lib,该文件应该在CCS安装目录中。

例如,若CCS安装在d:\ti下,则rts6700.lib 应该在d:\ti\c6000\cgtools\lib下。

“Output Filename”栏中写入输出OUT文件的名字,如Timer.out,同时你还可以设置生成的MAP文件名。

3.完成编译、连接,正确生成OUT文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用定时器实现数字振荡器
一、 实验目的
在数字信号处理中,会经常使用到正弦/余弦信号。

通常的方法
是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP 工作时仅作查表运算即可。

在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。

本实验除了学习数字振荡器的 DSP 实现原理外,同时还学习 C54X 定时器使用以及中断服务程序编写。

另外,在本实验中我们将使用汇编语言和 C 语言分别完成源程序的编写。

二、 实验原理
1) 数字振荡器原理
设一个传递函数为正弦序列 sinkωT ,其 z 变换为
211
1)(-----=Bz
Az Cz z H 其中,A=2cosωT, B=-1, C=sinωT 。

设初始条件为 0,求出上式的反 Z 变换得:
y[k]=Ay[k-1]+By[k-2]+Cx[k-1]
这是一个二阶差分方程, 其单位冲击响应即为 sinkωT 。

利用单位冲击函数 x[k-1]的性质,即仅当 k=1时,x[k-1]=1,代入上式得: k=0 y[0] = Ay[-1] + By[-2] + 0 = 0
k=1 y[1] = Ay[0] + By[-2] + c = c
k=2 y[2] = Ay[1] + By[0] + 0 = Ay[1]
k=3 y[3] = Ay[2] + By[1] .
…… .
k=n y[n]= Ay[n-1] + By[n-2]
在 k>2 以后,y[k]能用 y[k-1]和 y[k-2]算出,这是一个递归的差分方程。

根据上面的说明,我们可以开始数字振荡器的设计。

设该振荡
器的频率为 2kHz ,采样率为 40kHz (通过定时器设置,每隔 25us 中断一次,即产生一个 y[n]) ,则递归的差分方程系数为:
A=2cosωT=2cos (2 x PI x 2000 / 40000)=2 x 0.95105652
B=-1
C=sinωT=sin (2 x PI x 2000 / 40000)=0.30901699
BC A 7922
15=⨯ 00022
15C B =⨯ 71322
15C C =⨯ 为了便于定点 DSP 处理,我们将所有的系数除以 2,然后用 16 位定点格式表示为:这便是本实验中产生 2KHz 正弦信号的三个系数。

在本实验中,主程序在初始化时先计算出 y[1]和 y[2],然后开放定时器中断。

以后每次进入定时器中断服务程序时,利用前面的 y[1]和 y[2],计算出新的有 y[0],通过 CCS 提供的图形显示工具,我们将在图形窗口中看到一个正弦信号波形。

下面是初始化和中断服务程序代码片段:
初始化 y[1]和 y[2]:
ssbx FRCT ;置 FRCT=1,准备进行小数乘法运算
st #INIT_A,AA ;将常数A装入变量AA
st #INIT_B,BB ;将常数B装入变量BB
st #INIT_C,CC ;将常数C装入变量CC
pshd CC ;将变量CC压入堆栈
popd y2 ;初始化y2=CC
ld AA, T ;装AA到T 寄存器
mpy y2,a ;y2 乘系数A,结果放入A寄存器
sth a,y1 ;将A寄存器的高16 位存入变量Y1 中断服务程序片段:
ld BB,T ;将系数B装入T 寄存器
mpy y2,a ;y2 乘系数B,结果放入A寄存器
ltd y1 ;将y1 装入T 寄存器,同时复制到y2
mac AA,a ;完成新正弦数据的计算,a 寄存器中为y1*AA+y2*BB
sth a,1,y1 ;将新数据存入y1,因所有系数都除过2,所以在保,存结果时转移一位,恢复数据正常大小。

sth a,1,y0 ;将新正弦数据存入y0
2)C54X的定时器操作
初始化定时器的程序片段:
stm #10h,TCR ;停止定时器
stm #2499,PRD ;设置PRD寄存器值为2499,TINT 中断频率为
;Foutclk /(2499+1)= 100MHz/2500 = 40 KHz
stm #20h,TCR ;重新装入TIM 和PSC,然后启动定时器
3)C54X中断的使用
本实验的初始化程序读取中断向量表的启始地址,然后设置PMST 的高9 位,以便DSP 能正确响应中断,代码如下:
ld #0,dp ;设置DP 页指针
ssbx intm ;关闭所有中断
ld #vector, a ;读出中断向量(地址vector 在中断向量表程序中定义)
and #0FF80h, a ;保留高9位(IPTR)
andm #007Fh, pmst ;保留PMST 的低7 位
or pmst, a ;
stlm a, pmst ;设置PMST(其中包括IPTR)
三、实验内容
本实验需要使用C54X汇编语言或 C 语言实现数字振荡器,并通过CCS提供的图形显示窗口观察输出信号波形以及频谱。

实验分下面几步完成:
1) 根据确定数字振荡器的频率,确定系数。

数字振荡器系数的确定在前面已经说明,这里不再赘述。

2) 启动CCS,新建工程文件,如文件名为sinewave.pjt。

选择Project 菜单中的Add File to 4Project 选项,将汇编源程序exer3.asm、vec_table.asm和连接定位sinewave.cmd文件依次添加到工程文件中。

注意,你可以在添加文件对话框中选择显示不同的文件类型来加快文
件选择速度。

你也可以使用鼠标右键单击工程文件名(如sinewave.pjt)并选择Add Files项来添加需要的文件。

其中,exer3.asm包括初始化代码和中断服务程序,而vec_talbe.asm包含中断向量表。

3) 选择Project 菜单中的Options 选项,或使用鼠标右键单击工程文件名(如
sinewave.pjt)并选择build options 项来修改或添加编译、连接中使用的参数。

选择Linker 窗口,在“Output Filename”栏中写入输出OUT 文件的名字,如sine.out,你还可以设置生成的MAP 文件名。

4) 完成编译、连接,正确生成OUT 文件。

然后使用File 菜单的“Load Program”选项,将生成的OUT 文件(如sine.out)装入DSP 的片内存储器。

这时CCS 将显示程序的启始地址_c_int00。

5) 选View→Graph→Time/Frequency…打开图形显示设置窗口。

在弹出的对话框中按下图设置,主要修改“Start Address”为y0(y0 为生成的正弦波输出变量);“Acquisition Buffer Size”为1,“DSP Data Type”为“16-bit signed integer” 。

4-1 4-2 4-3
4-4。

相关文档
最新文档