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中断设计实验

DSP中断设计实验

中断设计实验学院:物电学院专业:电子信息工程班级:0904 姓名:叶俊学号:2009112030415一:实验任务1.熟悉ARM/DSP/FPGA实验箱的DSP模块2.熟悉DSP的中断的原理3.掌握如何编写DSP中断服务子程序二:实验工具1.具有USB接口的PC机一台2.USB仿真器一台3.ARM/DSP/FPGA实验箱一台三:实验内容(包括实验步骤,电路,程序)本实验是在学生基本上了解DSP的GPIO使用的基础上,进一步学习如何在DSP内部实现中断服务程序的编写。

在TMS320VC5410A的DSP中,可以管理多达29个中断,其中包括1个非屏蔽中断(NMI)、14个软件中断(SINT)、4个外部中断(EINT)、1个定时器中断(TINT)、3个串口接收中断(RINT)、3个串口发送中断(XINT)、2个DMA中断(DMAC)以及1个主机接口中断(HINT)等,表4.3.1是该芯片中支持的所有中断类型、中断好、相对中断偏移地址以及中断优先级等。

要正确的完成整个中断服务程序有以下几种方式:1)在中断向量表中对应的中断向量处放置中断跳转命令,跳转至相应的中断服务程序(该方式实现最直接、最易理解,本实验机采用该方式实现中断,)。

2)利用CCS的CSL库中的函数来实现。

3)利用DSP/BIOS来实现。

第二种和第三种方式在后面的实验中会介绍并使用到。

完成一个完整的中断过程可以分为以下几步:1)首先在C文件或者asm文件中编写好相应的中断服务子程序。

2)在中断向量表(vectors.asm)中相应的中断处放置中断跳转指令,转到1)中编写的函数处(需要注意的是,如果是在C文件中编写的函数,在汇编中调用是需要在函数名称前加下划线‘_’)。

3)在主程序中初始化相应的中断屏蔽寄存器(IMR)和中断标志寄存器(IFR),在IFR中清除相应中断标志,并在IMR中使能相应中断。

4)使能全局中断,即将ST1寄存器中的INTM位清零。

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原理及其应用实验讲义(精)

DSP 原理及其应用实验讲义CCS 设置1. 安装目标板驱动程序。

点击epp 文件夹下的安装文件,进行安装。

2. 运行Code Composer Studio Setup软件,即点击图标3. 点击Install a Device Driver,选择驱动程序 sdgo5xx32.dll 。

4. 此时,Available Board/Simulator Type一栏中出现相应的驱动图标5. 将图标sdgo5xx32 拖到最左边的System Configuration 一栏中,出现Board Properties 对话框。

6. 点击NEXT ,进入下一页,会显示板卡的I/O口值,修改为0x378,再点击NEXT。

7. 在Processor Configuration 窗中,在Available Processor 中选择TMS320C54XX 然后点击Add Single;对话框右边出现CPU_1图标。

8. 点击NEXT ,进入下一页,选择一个初始化的.gel 文件,本实验系统,选择c5402.gel。

9. 点击finish ,关闭CCS 程序,选择保存。

实验一常用指令实验一实验目的1、了解DSP 开发系统的组成和结构;2、熟悉DSP 开发系统的连接;3、熟悉CCS 开发界面;4、熟悉C54X 系列的寻址系统;5、熟悉常用C54X 系列指令的用法。

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

三实验步骤与内容1、系统连接进行DSP 实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:PCI/USB/EPP2、上电复位在硬件安装完成之后,确认安装正确、各实验部件及电源连接正常后,接通仿真器电源,启动计算机,此时,仿真器上的“红色小灯”应点亮,否则DSP 开发系统有问题。

3、运行CCS 程序待计算机启动成功后,实验箱后面220V 输入电源开关置“ON ”,实验箱上电,启动CCS ,此时仿真器上的“绿色小灯”应点亮,并且CCS 正常启动,表明系统连接正常;否则仿真器的连接、JTAG 接口或CCS 相关设置存在问题,掉电,检查仿真器的连接、JTAG 接口连接,或检查CCS 相关设置是否正确。

DSP实验十三 定时器中断及应用

DSP实验十三  定时器中断及应用
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
实验十三 定时器中断及应用
一、实验目的
l、掌握在汇编条件下如何编写中断服务程序; 2、利用定时器中断,来实现一个 8 进制计数器。
在正常工作情况下,当 TIM 减到 0 后,PRD 中的时间常数自动地加载到 TIM。当系统 复位或者定时器单独复位(TRB 置 1)时,PRD 中的时间常数重新加载到 TIM。 复位后,定时器控制寄存器(TCR)的停止状态位 TSS=0。定时器启动工作,时钟信号 CLKOUT
1
Generated by Foxit PDF Creator © Foxit Software For evaluation only. 加到预定标计算器 PSC。PSC 也是一个减 1 计数器,每当复位或其减到 0 后,自动地将定 时器分频系数 TDDR 加载到 PSC。 PSC 在 CLKOUT 作用下,作减 l 计数。当 PSC 减到 0,产生一个借位信号,令 TIM 作 减 l 计数。TIM 减到 0 后,产生定时中断信号 TINT,传送到 CPU 和定时器输出引脚 TOUT。 因此,定时中断的周期为: CLKOUT*(TDDR+1)*(PRD+1) 其中,CLKOUT 为时钟周期,TDDR 和 PRD 分别为定时器的分频系数和时间常数。 表2
B$
/*******************************************
* 时钟中断处理程序
*
*******************************************/
timerint:
CALL _ecounter

DSP中断实验报告lecture5-2011_478507120

DSP中断实验报告lecture5-2011_478507120

实验事件管理器模块(EV)中通用定时器中断操作一、实验目的:1、熟悉事件管理器模块(EV)中通用定时器计时及比较的操作;2、熟悉中断产生过程及中断的配置操作。

二、实验原理及说明:本实验是让XF引脚相连的LED灯0.5s内亮灭一次,采用定时器计时产生中断的方法实现。

实验中外部时钟输入为30MHz,DSP内部锁相环半分频为15MHz,通用定时器1预分频因子为128,所以计算出延迟0.5s周期寄存器的值约为E4E0h(定时器的周期数等于周期寄存器的值加1)。

三、实验内容及步骤:1、新建一个名为interrupt1的工程并向其中添加相应的文件,并做好相应的配置。

2、在工程中新建名为interrupt1.c的源文件。

//step0: 输入所需的头文件和定义用户自己的函数#include "DSP28_Device.h"interrupt void ISRTimer1(void); //定义定时器1周期中断服务//程序void main(void){//step1: 初始化系统控制寄存器,主要内容包括PLL,WatchDog,系统时钟和外设时钟设置;InitSysCtrl(); // 调用DSP28_SysCtrl.c文件中的函数,也就是//说在DSP28_SysCtrl.c文件中完成系统初始化;//step2:初始化所需的通用IO口;InitGpio();// 调用DSP28_Gpio.c文件中的函数,也就是说在//DSP28_Gpio.c 文件中完成通用IO口的配置;//step3: 初始化系统中断//关闭CPU中断DINT;IER = 0x0000;IFR = 0x0000;//初始化PIE控制寄存器;InitPieCtrl(); //在DSP28_PieCtrl.c文件中要打开所需外设中断;//初始化PIE中断矢量表,设置成默认状态;InitPieVectTable(); //在DSP28_PieVect.c文件中完成;//step4:初始化所需的外设(包括事件管理器EV模块、ADC模块、CAN //总线模块等)InitPeripherals(); //在DSP28_InitPeripherals.c文件中完成//step5: 使用用户所需的函数、重新指定中断矢量(可选择的)、开用//户所需中断EALLOW; //EALLOW和EDIS已经在头文件中定义了PieVectTable.T1PINT = &ISRTimer1; //更该定时器1周期中断服//务程序地址EDIS;//开中断IER |= M_INT2; //开中断2,M_INT2已经在头文//件中定义EINT;EvaRegs.T1CON.all=EvaRegs.T1CON.all|0x0040; //启动Timer1//step6:无限空循环,等待中断(可选择)while(1){;}}//step7:用户自定义函数interrupt void ISRTimer1(void) //定时器1周期中断服务程序{double i;asm(" SETC XF ");for(i=0;i<50000;i++){;}asm(" CLRC XF ");PieCtrl.PIEACK.all=0x0002; //清除PIEACK中断标志位EvaRegs.T1CNT=0x0000; //Timer1的计数器重新赋0EvaRegs.EVAIFRA.all=EvaRegs.EVAIFRA.all&0x0080; //清除定//时器1周期中断标志IER |= M_INT3; //使能定时器2的中断EINT; //开CPU中断ERTM; // Enable Global realtime interrupt DBGM}在主程序中调用相关的初始化程序,完成相关的初始化工作,而中断程序中完成的是控制LED灯亮灭的功能。

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定时器与中断系统的使用实验报告

贵州大学实验报告学院:电气工程学院专业:电子信息工程班级:电信091 姓名徐朝忠学号0908040224 实验组实验时间2012年12月指导教师尉学军老师成绩实验项目名称DSP定时器与中断系统的使用实验目的1. 掌握TMS320C54x定时器的工作原理和初始化步骤2. 掌握DSP的中断结构和对中断的处理流程实验要求①根据本实验的特点、要求和具体条件,采用教师简单讲解,学生自己动手操作的形式;②学生实验时,并严格遵守实验室规则、安全制度和学生实验守则;③认真学习实验操作技能,严格按指导书和实验指导教师的指导操作有关仪器设备,不要做与本实验无关的事情;④做好实验预习、实验记录,并按要求按时完成实验报告。

实验原理译码后地址是03002HDSP的工作主频为8MHz,设置定时时间125ms,每定时器中断4次,正好为0.5s。

每0.5s 亮一次,灭一次,正好1s闪烁一次。

实验仪器计算机一台(安装CCS3.3)、ICETEC-VC5415-A试验箱实验步骤1、将试验箱<<DSP教学实验系统>>的JTAG连到ICETEC-VC5415-A板上,接好电源和USB接口。

2、进入CCSsetup,设置运行环境为3、输入程序:源程序1.Time1.asm.mmregs.bss count,1.bss x,1.def _main,_time1 TIMO .set 0024HPRD0 .set 0025HTCR0 .set 0026HPA1 .SET 3002H.text_main: STM #count,AR1 ST #4,*AR1STM #0008H,TCR0STM #0F423H,PRD0STM #042FH,TCR0STM #0008H,IMRSTM #0008H,IFRRSBX INTMSTM x,AR5ST #55H,*AR5PORTW *AR5,PA1stm #00A0H,PMST loop1: B loop1_time1: PSHM TRNPSHM TPSHM ST0PSHM ST1ADDM #-1,*AR1CMPM *AR1,#0BC still_wait,NTCPORTR 3002h,*AR5LD *AR5,AXOR #0ffh,0,A,ASTL A,*AR5PORTW *AR5,PA1ST #4,*AR1still_wait: POPM ST1 ;POPM ST0POPM TPOPM TRNRETE.end输入中断向量程序:.sect ".vectors.ref _main ; C entry point.align 0x80 ; must be aligned on page boundary RESET: ; reset vectorBD _main ; branch to C entry pointSTM #200,SP; stack size of 200 nmi: RETE ; enable interrupts and return from oneNOPNOPNOP ;NMI~; software interruptssint17 .space 4*16sint18 .space 4*16sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: RETENOPNOPNOP int1: RETENOPNOPNOP int2: RETENOPNOPNOP tint: B _time1.ref _time1NOPNOP rint0: RETENOPNOPNOP xint0: RETENOPNOPNOP rint1: RETENOPNOPNOP xint1: RETENOPNOPNOP int3: RETENOPNOPNOP.end *.CMD 文件:-w-stack 400h-heap 100-l rts.libMEMORY{PAGE 0:VECT : o=80h,l=80hPRAM : o=100h,l=1f00hPAGE 1:DRAM : o=2000h,l=1000h}SECTIONS{.text : {}> PRAM PAGE 0.data : {}> PRAM PAGE 0.cinit : {}> PRAM PAGE 0.switch : {}> PRAM PAGE 0.const : {}> DRAM PAGE 1.bss : {}> DRAM PAGE 1.stack : {}> DRAM PAGE 1.vectors: {}> VECT PAGE 0}4.编译链接,5.运行,观察试验箱中发光二级管的变化情况6.修改发光二级管的初始状态,观察其变化情况。

DSP实验四TMS320F28335 定时器 中断 IO中断 控制LED亮灭

DSP实验四TMS320F28335 定时器 中断 IO中断 控制LED亮灭

DSP实验四TMS320F28335 定时器中断 IO中断控制LED亮灭dsp实验四、tms320f28335定时器中断io中断控制led亮灭继续我的第四个实验;实现定时器中断功能处理ld4翻转,按键IO中断控制ld3翻转;学习目的:中断寄存器的设置,io中断、定时器中断的使用,F28335有三个定时器:定时器0、定时器1和定时器2(定时器2也可用于DSP/BIOS);功能描述:开机时Ld3和ld4默认关闭;初始化完成后,ld4以1hz(1s)频率做状态翻转;ld3接受按键控制,每触发一次按键,状态翻转一次。

电路连接说明:Ld4和ld3设置为通用GPIO上拉输出。

初始化后,输出LED默认熄灭;Ld4和ld3控制LED灯的负极,如下图所示;本次实验选用定时器0,程序时刻读取计数器的值,当值为0时,产生定时器0中断,ld4状态翻转;IO键SW12中断控制ld3状态反转。

定时器0中断程序设计说明:第一步。

定时器0的预设寄存器和计数器设置:定时器输入时钟为sysclkout(=135mhz),1、如果定时1s(即1hz)中断一次(即计数结束),1hz=135mhz/1350/100000预分频器寄存器(即分频器)设置为1350,计数器设置为100000;2、如果定时1ms(即1000hz)中断一次,计算公式为:1000hz=135mhz/1350/100预设寄存器也设置为1350,计数器设置为100;转让声明如下://定时器0设为1hz=135mhz/(1350*100000)cputimer0regs。

珠三角。

全部=100000;//计数周期寄存器。

10万次循环后,计数器降至0putimer0regs tpr。

一点tddr=1350&0xff;//0x546预分频器寄存器(预分频器)cputimer0regs.tprh.bit.tddrh=(1350>>8)&0x00ff;//0x546预定标寄存器(预分频器)第二步a)设置定时器0相关中断寄存器使能定时器0中断,即cputimer0regs.tcr.bit.tie=1;//启用计时器0中断b)设置饼图级别相关中断寄存器,以启用计时器0中断所在的饼图组,即pieierx寄存器设置C)设置CPU级别中断相关寄存器,CPU级别启用与上述饼图对应的通道,即ier寄存器设置步骤3中断向量入口映射位置设置,如下:eallow;//thisisneededtowritetoeallowprotectedregisters皮埃维克塔。

DSP 的定时器和外中断实验报告

DSP 的定时器和外中断实验报告
五.实验代码
#include "myapp.h"//定义指示灯寄存器地址和寄存器类型
#define LBDS (*((unsigned int *)0x400001))
void INTR_init( void );
void TIMER_init(void);
int nCount;
main()
{
nCount=0;
*tim0 = 0;
*prd0 = 0x0ffff;
*prsc0 = 2;
*tcr0 = 0x00e0;
}
六.实验结果
-Hale Waihona Puke 示灯在定时器的定时中断中按照设计定时闪烁。
-使用定时器和中断服务程序可以完成许多需要定时完成的任务,比如DSP定时启动A/D转
换,日常生活中的计时器计数、空调的定时启动和关闭等。
相关连线及电源)。
三.实验原理
1.通用定时器介绍及其控制方法(详见spru595b.pdf):
TMS320VC5509A内部有两个20位通用定时器(GP):
*每个通用定时器包括:
-一个16位的减计数的计数器TIM;
-一个16位的定时器周期寄存器PRD;
-一个16位的定时器控制寄存器TCR;
-一个16位的定时器预定标寄存器PSCR;
目录中的“Timer.pjt”。
在项目浏览器中,双击main.c,激活main.c文件,浏览该文件的内容,理解各语句作用。
打开ICETEK–VC5509-Ae.cmd,对照vector.asm源程序学习中断向量表的写法。
5.编译、下载程序。
6.运行程序,观察结果。
7.改变TIMER_init()函数里*prd0 = 0x0ffff为“=0x0fff ”;重复步骤5,6观察实验现象。

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实验实验一、定时器实验 I一、实验目的1、掌握DSP中断技术,学会对DSP中断的处理方法。

2、掌握中断对于程序流程的控制,理解DSP对于中断的响应时序。

3、掌握汇编语言编写中断的基本方法。

二、实验设备计算机、DSP实验箱三、实验原理DSP一般情况下均支持软件中断和硬件中断。

软件中断由指令引起,如INTR、TRAP、RESET;硬件中断由外部中断信号和内部中断信号引起,外部硬件中断如INT0-INT2,内部硬件中断包括定时器、串口、主机接口等引起的中断。

软件中断不分优先级,硬件中断有优先级。

中断寄存器有中断标志寄存器IFR和中断屏蔽寄存器IMR。

1、中断标志寄存器(Interrupt Flag Register,IFR)是一个存储器映像寄存器,当某个中断触发时,寄存器的相应位置1,直到中断处理完毕为止。

IFR各位的意义如图:不同型号DSP的IFR的5-0位对应的中断源完全相同,是外部中断和通信中断标志位。

其它15-6位中断源根据芯片的不同,定义的中断源不同。

当对芯片进行复位、中断处理完毕,写1于IFR的某位,执行INTR指令等硬件或软件中断操作时,IFR的相应位置1,表示中断发生。

通过读IFR可以了解是否有已经被挂起的中断,通过写IFR可以清除被挂起的中断。

在以下3种情况下将清除被挂起的中断。

(1)复位(包括软件和硬件复位)。

(2)置位1写入相应的IFR标志位。

(3)使用相应的中断号响应该中断,即使用INTR #K指令。

若有挂起的中断,在IFR中该标志位为1,通过写IFR的当前内容,就可以清除所有正被挂起的中断;为了避免来自串口的重复中断,应在相应的中断服务程序中清除IFR位。

2、中断屏蔽寄存器中断屏蔽寄存器(Interrupt Mask Register,IMR),是用于屏蔽外部和内部的硬件中断。

通过读IMR可以检查中断是否被屏蔽,通过写可以屏蔽中断(或解除中断屏蔽),在IMR位置0,则屏蔽该中断。

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)。

实验五定时器中断方式实验

实验五定时器中断方式实验
第15页/共24页
3.中断向量地址的重新安排
DSP复位后,中断向量地址是可以更改的。 54x中断向量地址组成: 中断向量地址由IPTR(中断向量指针,9位,在PMST中) 和左移2位后的中断向量序号(0~31,左移2位变成7位) 组成。见131.pdf第189页Table 6–26. TMS320C5402 Interrupt Locations and Priorities。
第9页/共24页
第二个阶段:响应中断
对于软件中断或其他非屏蔽中断 ,CPU立即响应。 对于可屏蔽中断,只有满足如下条件才能响应: (1)优先级最高(同时出现的中断) (2)ST1中INTM=0(所有非屏蔽中断使能) (3)IMR中相应位=1(开放相应的中断)
CPU相应中断时,PC转向适当的地址取出中断向量, 并发出中断响应信号IACK#,清除相应的中断标志。
第4页/共24页
中断标志寄存器IFR和中断屏蔽寄存器IMR
IFR和IMR都是MMR寄存器。 IFR:当出现中断时,IFR相应中断标志位置1。 有4中情况中断标志位清0: (1)DSP复位(RS#为低电平); (2)中断得到处理; (3)将1写如IFR中的相应位(则相应位变成0),中断 没有处理完就被清除。 (4)利用适当的中断号执行INTR指令,相应的中断 标志清0。
第20页/共24页
5.中断向量表的编写(续)
vectors.asm说明:
.sect “.vectors” ;定义的中断向量段,中断向量表即
;放在此段当中。
.ref _c_int00 ;定义C语言的初始化入口地址。
.ref _timer0_isr ;定义定时器0中断服务程序的入口地址
.align 0x80
第18页/共24页

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实验定时器中断实验(精)

DSP实验定时器中断实验(精)
●第9~6位PSC:定时器预定标计数器。这4位用来保存定时器的当前预定标计数器。每个CLKOUT周期内,若PSC值大于0,PSC减1,在PSC减到0后的下个CLKOUT周期内,装载TDDR的内容,并且TIM减1。每当软件设置了定时器重载位(TRB)时,PSC也被重新装载。可通过TCE检测PSC,但PSC不能直接设置,PSC值必须从TDDR中提取。复位时,PSC设为0。
通过TOUT信号或中断,定时器可以用于产生周边设备的采样时钟,如模拟接口。对于有多个定时器的DSP,由寄存器GPIOCR中的第15位控制使用某一个定时器产生的TOUT信号。
2.定时器初始化
(1)定时器初始化步骤
●TCR的TSS位写1,定时器停止工作;
●装载TRD;
●初始化TCR中的TDDR,并对TCR中的TSS置0,对TRB置1来重装载定时器周期。
●定时器的工作方式;
●设定预定标计数器中的当前数值;
●启动或停止定时器;
●重新装载定时器;
●设置定时器的分频值。
TCR的位描述如图5.2
15~12
11
10
9~6
5
4
3~0
Reserved
SOFT
FREE
PSC
TRB
TSS
TDDR
图5.2TCR位描述
●第15~12位Reserved:保留位,总为0。
●第11~10位SOFT、FREE:特殊的仿真位。高级语言调试程序中出现一个断点时,该仿真位决定定时器的状态。如果FREE位设为1,则当遇到一个断点时,定时器继续运行(即自由运行),在这种情况下,SOFT被忽略。但是,如果FREE为0,则SOFT有效。在此情况下,如果SOFT=0,则定时器停止,下一次TIM的值递减;如果SOFT=1,则当TIM减到0,定时器停止工作。

DSP实验四、TMS320F28335 定时器 中断 IO中断 控制LED亮灭

DSP实验四、TMS320F28335 定时器 中断 IO中断 控制LED亮灭

继续我的第四个实验;实现定时器中断函数处理LD4翻转、按键IO中断控制LD3翻转;学习目的:中断寄存器的设置,IO中断、定时器中断的使用,F28335共有三个定时器:timer0、timer1、timer2(timer2也可用于DSP/BIOS);功能描述:上电默认LD3、LD4灭;初始化完成后,LD4以1HZ(1S)频率做状态翻转;LD3接受按键控制,每触发一次按键,状态翻转一次。

电路连接说明:LD4、LD3设置为通用GPIO 上拉输出初始化后默认为输出LED灯灭状态;LD4、LD3控制LED灯的负极,如下图;本次实验选用定时器0,程序时刻读取计数器的值,当值为0时,产生定时器0中断,LD4状态翻转;IO按键SW12中断控制LD3状态翻转。

定时器0中断程序设计说明:步骤一、定时器0的预定标寄存器和计数器设置:定时器输入时钟为sysclkout(=135MHz),1、如果定时1S(即1Hz)中断一次(即计数结束),1Hz=135Mhz/1350/100000预定标寄存器(即分频器)设为1350,计数器设为100000;2、如果定时1ms(即1000Hz)中断一次,计算公式为:1000Hz=135Mhz/1350/100预定标寄存器同样设为1350,计数器设为100;赋值语句如下://定时器0 设为1Hz = 135MHz/(1350*100000)CpuTimer0Regs.PRD.all= 100000;//计数周期寄存器,100000周期后计数器减为0CpuTimer0Regs.TPR.bit.TDDR= 1350& 0xFF;//0x546 预定标寄存器(预分频器)CpuTimer0Regs.TPRH.bit.TDDRH = (1350>>8) & 0x00FF;//0x546 预定标寄存器(预分频器)步骤二、a)设置定时器0相关中断寄存器使能定时器0中断,即CpuTimer0Regs.TCR.bit.TIE= 1; //使能定时器0中断b)设置PIE级相关中断寄存器定时器0中断所在PIE组使能,即PIEIERx寄存器设置c)设置CPU级中断相关寄存器CPU级使能上述PIE对应的通道,即IER寄存器设置步骤三、中断向量入口映射位置设置,如下:EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.TINT0 = &cpu_timer0_isr; //将中断函数物理地址赋值给中断向量入口PieVectTable.XINT3 = &key_GPIO50_isr;EDIS; // This is needed to disable write to EALLOW protected registersIO中断程序设计说明:步骤一、设置IO引脚功能复用寄存器为普通IO、设为上拉、输入状态、使能引脚滤波功能;外部中断源选择寄存器设置:如GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=50;//按键引脚编号设置步骤二、使能外部中断源中断;XIntruptRegs.XINT3CR.bit.ENABLE=1;//使能中断设置触发方式:XIntruptRegs.XINT3CR.bit.POLARITY=0;//下降沿触发剩余步骤同定时器0中断的设置。

DSP定时器及硬件中断实验报告

DSP定时器及硬件中断实验报告

《DSP原理及应用》课程实验报告学生姓名:所在班级:电信1001指导教师:记分及评价:项目满分5分得分一、实验名称实验6:定时器及硬件中断实验二、任务及要求■了解C55x DSP定时器结构。

■学习C5509定时器初始化。

■了解C55x DSP中断。

■学习中断处理。

三、实验程序(原理图)1. 定时器汇编源程序.mmregs.def _c_int00.ref sdram_init;引用外部变量,SDRAM初始化子程序入口led .set 400001h;led数据地址tim0 .set 0x1000;定时器寄存器TIM0prd0 .set 0x1001;定时器周期寄存器PRD0tcr0 .set 0x1002;定时器控制寄存器TCR0prsc0 .set 0x1003;定时器预定标寄存器sysr .set 0x07fdclkmd .set 0x1c00 ;时钟模块寄存器地址pdp_timer0 .set tim0/128STACK .usect ".stack", 200hSYSSTACK .usect ".sysstack", 200h.dataled_i .word 1,2,4,8,4,2.sect “.vectors”rsv: ; reset vectorb _c_int00 ;branch to C entry pointNOP.align 8nmi: .loop 8nop.endloopint0: .loop 8nop.endloopint2: .loop 8nop.endlooptint0: b _Timer0nop.align 8.textc_int00: amov #0,xdpamov #STACK+200h,xspamov #SYSSTACK+200h,xssp;init interupt(中断初始化)bset intm ;禁止全局中断mov #1,@ivpd ;初始化DSP中断矢量指针ivpd=1mov #1,@ivph ;初始化DSP中断矢量指针ivph=1mov #10h,@ier0 ;初始化中断屏蔽寄存器ier0,tint0=1mov #10h,@dbier0;调试中断使能寄存器dbier0=10hmov #0,@ier1 ;清中断使能寄存器ier0mov #0ffffh,@ifr0;清中断标志寄存器ifr0mov #0ffffh,@ifr1;清中断标志寄存器ifr1call sdram_init ;调用初始化SDRAM子程序;定时器初始化mov #pdp_timer0,pdp;置外围I/O数据页指针mov #04f0h,port(tcr0) ;*tcr0 = 0x04f0mov #0h,port(tim0);*tim0 = 0mov #0ffffh,port(prd0);*prd0 = 0x0ffffmov #15h,port(prsc0) ;*prsc0 = 0x15=21 mov #0e0h,port(tcr0) ;*tcr0 = 0x00e0bclr intm ;全局中断使能bset AR3LC ;置位AR3LC,AR3循环寻址amov #led,xar2 ;xar2指向ledmov #6,bk03 ;循环寻址长度为6amov #led_i,xar3 ;初始化xar3mov #led_i,bsa23 ;初始化bsa23,循环寻址首地址为led_imov #0,ar3 ;清ar3loop: NOPb loop ;等待中断_Timer0: mov *ar3+,*ar2 ;定时器Timer0中断服务程序reti ;中断返回.end2. 命令文件-stack 200h-sysstack 200hMEMORY{PAGE 0:MMR : origin = 0000000h, length = 00000c0h SPRAM : origin = 00000c0h, length = 0000040h VECS : origin = 0000100h, length = 0000100hDARAM0 : origin = 0000200h, length = 0001E00hDARAM1 : origin = 0002000h, length = 0002000hDARAM2 : origin = 0004000h, length = 0002000hDARAM3 : origin = 0006000h, length = 0002000h}SECTIONS{.vectors : > VECS PAGE 0.bss: > DARAM0 PAGE 0.stack: > DARAM1 PAGE 0.sysstack: > DARAM1 PAGE 0.text : > DARAM2 PAGE 0.data: > DARAM3 PAGE 0}四、仿真及结果分析无五、实验设备1、PC电脑(win7系统平台)2、CCS仿真软件系统六、小结通过对系统软件,硬件的设计开发,我掌握了DSP的许多用途和使用方法。

基于DSP的定时器中断实验(汇编语言)

基于DSP的定时器中断实验(汇编语言)

基于DSP的定时器中断实验(汇编语言)一、实验目的1.熟悉定时器初始化的步骤;2.熟悉定时器控制寄存器(TCR)的含义和使用;3.熟悉定时器中断的原理和应用;二、实验原理C54x的片内定时器是一个可编程的定时器,可用于周期地产生中断。

1. 定时器的组成定时器主要由定时寄存器TIM、定时周期寄存器PRD、定时控制寄存器TCR及相应的逻辑控制电路组成。

如图7.1所示。

寄存器TIM、PRD和TCR是存储器映像寄存器,地址分别为0024H、0025H和0026H。

图7.1定时器结构框图定时周期寄存器PRD:用来存放定时时间,地址:0025H定时寄存器TIM:16位减1计数器,地址:0024H定时控制寄存器TCR:存放定时器的控制位和状态位,地址:0026H。

逻辑控制电路:用来控制定时器协调工作,由三个或门和一个与门组成。

复位SRESET和TRB:①通过或门1、3控制PRD的加载计数;②通过或门1、2控制PSC的加载计数。

停止控制位TSS:通过与门屏蔽CLKOUT信号来控制定时器的启动。

TINT——外部定时中断,定时时间到发中断;TOUT——定时输出,输出定时波形。

2. 定时器工作原理主定时模块包括PRD和TIM,由预定标模块定时,预定标模块每输出一个时钟,TIM减1。

当TIM减到0后,TIM装入PRD的值。

当设备复位(SRESET=1)或者定时器复位(TRB=1)时,PRD的内容将装入TIM中。

主定时模块的定时中断(TINT)信号输出至CPU以及定时器的输出引脚TOUT。

预定标模块包括TCR中的TDDR和PSC位,由CPU时钟定时,每来一个CPU时钟,PSC 值减1。

当PSC减至0、设备复位或定时器复位时,TDDR的内容复制到PSC中。

4位预定标计数器PSC和16位定时计数器TIM组成一个20位计数器,定时器每接收一个CPU时钟减1,当计数器减到0时,产生定时中断(TINT),同时PSC和TIM重新装入预设的值。

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

实验四定时器中断实验一:实验目的1.熟悉定时器初始化的步骤;2.熟悉定时器控制寄存器(TCR)的含义和使用;3.熟悉定时器的原理和应用。

二:实验内容本实验要求编写一个简单的定时器中断程序,设置一定的周期控制与XF引脚相连的LCD指示灯。

当定时器中断产生时可以观察到LCD周期性闪烁。

三:实验原理1.定时器SRESET.C54xx 系列的 DSP 都具有一个或两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特定的状态位实现停止、重启动、重设置或禁止。

定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。

应用中可以用定时器来产生周期性的 CPU 中断或脉冲输出。

定时器的功能方框图如图 9.1 所示,其中有一个主计数器( TIM )和一个预定标计数器( PSC )。

TIM 用于重装载周期寄存器 PRD 的值, PSC 用于重装载周期寄存器 TDDR 的值。

图5.1中有一个信号,是在器件复位时,DSP向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM和PRD装载最大值(0FFFFH);TCR的所有位清0;结果是分频值为0,定时器启动,TCR的FREE 和SOFT为0。

图5.1定时器的功能方框图定时器实际上是有20bit的周期寄存器。

它对CLKOUT信号计数,先将PSC(TCR 中的D6~D9位)减1,直至PSC为0,然后把TDDR(TCR中的低4位)重新装载入PSC,同时将TIM减1,直到TIM减为0。

这时CPU发出TINT中断,同时在TOUT引脚输出一个脉冲信号,脉冲宽度与CLKOUT一致,然后将PRD重新装入TIM,重复TSS下去直到系统或定时器复位。

定时器产生中断的计算公式如下:1PRD+1TINT的频率= × × (其中tc为 CLKOUT的周期定时器由三个寄存器组成:TIM、PRD、TCR。

TIM:定时器寄存器,用于装载周期寄存器值并自减1。

PRD:周期寄存器,用于装载定时器寄存器。

TCR:定时器控制寄存器,包含定时器的控制状态位。

定时器是一个片内减计数器,用于周期地产生CPU中断。

定时器被预定标计数器所触发,后者每个CPU时钟周期减1,当计数器减至0时,会产生一个定时器中断,同时在下一周期计数器被定时周期值重新装载。

在正常操作模式下,当TIM自减至0时,TIM将被PRD内的数值重装载。

在硬件复位或定时器单独复位(TCR中TRB位置1)的情况下,主定时器模块输出的是定时器中断(TINT)信号。

该中断被发送至CPU,同时由TOUT引脚输出。

TOUT脉冲的宽度等于CLKOUT的时钟宽度。

预定标模块由两个类似TIM和PRD的单元构成。

它们是预定标计数器(PSC)和定时器分频寄存器(TDDR)。

PSC、TDDR是RCR寄存器的字段。

在正常操作时PSC自减为0,TDDR值装入PSC,同样在硬件复位或定时器单独复位的情况下,TDDR也被装入PSC。

PSC被CPU时钟定时,即每个CPU时钟使PSC自减1。

PSC可被TCR读取,但不能直接写入。

当TSS置位时,定时器停止工作。

若不需要定时器,终止定时操作,可使芯片工作在低功耗模式,并且可以使用与定时器相关的两个寄存器(TIM和PRD)作为通用的存储器单元,可以在任意周期对它们进行读或写操作。

TIM的当前值可被读取,PSC也可以通过TCR读取。

因为读取这两个存储器需要两个指令,而在两次读取之间因为自减,数值可能改变,因此,PSC两次读的结果可能有差别,不够准确。

若要准确测量时序,在读这两个寄存器值之前可先中止定时器,对TSS置1和清0后,可重新开始定时。

通过TOUT信号或中断,定时器可以用于产生周边设备的采样时钟,如模拟接口。

对于有多个定时器的DSP,由寄存器GPIOCR中的第15位控制使用某一个定时器产生的TOUT信号。

2.定时器初始化(1)定时器初始化步骤●TCR的TSS位写1,定时器停止工作;●装载TRD;●初始化TCR中的TDDR,并对TCR中的TSS置0,对TRB置1来重装载定时器周期。

(2)初始化定时器中断方法(INTM=1)●FIR中的TINT写1,以清除挂起的定时器中断;●IMR中的TINT置1,启动定时器中断;●启动全部中断,INTM置0;●在重启(RESET)后,TIM和PRD被设置为最大值(FFFFH),TCR中的TDDR置0。

(3)定时控制寄存器(TCR)TCR为一个映射到片内的16位寄存器,它可以控制:●定时器的工作方式;●设定预定标计数器中的当前数值;●启动或停止定时器;●重新装载定时器;●设置定时器的分频值。

TCR的位描述如图5.215~12 11 10 9~6 5 4 3~0Reserved SOFT FREE PSC TRB TSS TDDR图5.2TCR位描述●第15~12位Reserved:保留位,总为0。

●第11~10位SOFT、FREE:特殊的仿真位。

高级语言调试程序中出现一个断点时,该仿真位决定定时器的状态。

如果FREE位设为1,则当遇到一个断点时,定时器继续运行(即自由运行),在这种情况下,SOFT被忽略。

但是,如果FREE 为0,则SOFT有效。

在此情况下,如果SOFT=0,则定时器停止,下一次TIM 的值递减;如果SOFT=1,则当TIM减到0,定时器停止工作。

●第9~6位PSC:定时器预定标计数器。

这4位用来保存定时器的当前预定标计数器。

每个CLKOUT周期内,若PSC值大于0,PSC减1,在PSC减到0后的下个CLKOUT周期内,装载TDDR的内容,并且TIM减1。

每当软件设置了定时器重载位(TRB)时,PSC也被重新装载。

可通过TCE检测PSC,但PSC不能直接设置,PSC值必须从TDDR中提取。

复位时,PSC设为0。

●第5位TRB:定时器重载位。

当TRB写入1时,TIM装载PRD中的值,并且PSC装载TDDR中的值。

TRB位总被读为0。

●第4位TSS:定时器停止状态位。

TSS停止或重新启动定时器。

复位时,TSS清零,并且立即启动定时器。

TSS=0,启动或重新启动定时器;TSS=1,停止定时。

注意,此位为只读位,读出的值永远为0。

●第3~0位TDDR:定时器分频比寄存器。

每经过(TDDR+1)个CLKOUT周期,TIM减1。

复位时,TDDR位清0。

如果想通过一个整数因子增加总的定时计数值,则将整数因子减1后写入这4位。

当PCS值为0时,在随后的一个CLKOUT周期内,TDDR内容将被重新装入PSC,并且TIM减1。

每当TRB重载入时,TDDR也将被PSC重新装载。

3:定时器应用:C54x定时器所能计计时的长度可通过公式Tx(TDDR+1×(PRD+1来计算,其中,TDDR最大值为0FH,PDR最大值为0FFFFH,所以能计时的最长长度为T×1048576,由所采用的机器周期T决定,例如f=4MHz,T=250,则最长定时时间为:Tmax=250×1048576=262.144(ms例如若需要更长的计时时间,则可以在中断程序中设计一个计数器。

设计一个周期为40s的方波,可将定时器设置为100ms,程序计数器设为200,当计数200×100ms=20s时输出取值一次,可形成所要求的波形。

四:实验步骤本实验的步骤为:(1)连接好实验板,选择相应的CCS 运行环境。

(2)新建工程,添加TIME文件及其配制文件,用编译链接工具条对文件进行编译链接,如果编译链接错误提示为“0Errors”,则把.out文件下载到目标板,然后再单击图6.3中的运行工具运行程序,这时可以看到目标板上和XF引脚的LED在周期性闪烁。

(3)选择菜单View→CPU Registers→CPU Registers命令,可以观察到累加器A 在不断加1,如图5.3所示。

图5.3 CPU 寄存器(4)参考程序如下;.mmregs.global mainintktcr .set 0029hktcrstop .set 0010h;TCR 定时器控制寄存器各位含义如下:;RES SOFT FREE PSC TRB TSS TDDR;00000 0 0000 1 0 (TSS=1时停止定时) 1001;**********************定时器参数定义***************************************Tim0 .set 24h ;timer0 registerPrd0 .set 25h ; timer0 period counterTcr0 .set 26h ; timer0 control registerperiod .set 99 ;定时器周期;*********************************************************************** ******.sect "vectors";**********************中断向量表*****************************************vector: b mainintnopnopnmi: retenopnopnopsint17: retenopnopnopsint18: retenopnopnopsint19: retenopnopnopsint20: rete nopnopnopsint21: rete nopnopnopsint22: rete nopnopnopsint23: rete nopnopnopsint24: rete nopnopnopsint25: rete nopnopnopsint26: rete nopnopnopsint27: rete nopnopnopsint28: rete nopnopnopsint29: rete nopnopnopsint30: rete nopnopnopint0: rete nopnopnopint1: retenopnopint2: rete nopnopnopb tint0 nopnopbrint0: rete nopnopnopbxint0: rete nopnopnoptrint: rete nopnopnop txint: rete nopnopint3: retenopnopnophpint: retenopnopnopq26: .word 0ff80h.word 0,0,0q27: .word 0ff80h.word 0,0,0q28: .word 0ff80h.word 0,0,0q29: .word 0ff80h.word 0,0,0q30: .word 0ff80h.word 0,0,0q31: .word 0ff80h.word 0,0,0;************************************************************************ *.textmainint: stm #203FH,PMST ;从定位中断向量表到2000H处ssbx intm ;关中断ssbx sxmssbx frct ;允许小数乘法ld #0,dpstm #0008h,imr ;允许定时器0中断;************************************************************************ **;允许定时器0中断,IMR 寄存器各位含义如下:;RES DMAC5 DMAC4 BXINT1 BRINT1 HINT INT3 TINT DMAC0 BXINT0 BRINT0 TINT0 INT2 INT1 INT0;00 0 0 0 0 0 0 0 0 0 0 1 0 0 0;************************************************************************ ***stm #ktcrstop,tcr ;停止定时stm #period,tim ;设定定时器寄存器stm #period,prd ;设定定时器周期寄存器stm #ktcr,tcr ;启动定时器stm #0008h,imr ;允许TIMER0中断stm #0ffffh,ifr ;清中断rsbx intm ;开中断wait: nop ;循环,等中断b wait;**************************定时器中断程序*********************************;************************************************************************ *tint0:add #1,A ;A寄存器加1操作stm #20,*ar2stm #20,*ar1aa:ssbx xf ;XF引脚置高,LCD亮rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待banz aa,*ar1-bb:rsbx xf ;XF引脚置低,LCD灭rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待rpt #8000 ;重复8001次nop ;等待banz bb ,*ar2-rete ;中断返回.end配置文件如下:time.obj-o time.out-m time.map-e mainintMEMORY{PAGE 0:EPROM :org=2000h,len=1000hPAGE 1:SPRAM :org=0060h,len=100h}SECTIONS{vectors :> EPROM PAGE 0.text :> EPROM PAGE 0}五:实验报告要求:1. 运行源程序,观察实验结果,看到XF引脚的LED周期性地变化,修改定时器参数,改变LED闪烁周期。

相关文档
最新文档