【精品】基于DSP的定时器中断实验(汇编语言)
- 格式:pdf
- 大小:1.60 MB
- 文档页数:8


DSP实验大作业班级:020851姓名:徐宏立学号:02085086一.实验目的:•了解和熟悉中断的原理•能够保护中断程序下条指令的地址,能够转到中断请求所相应的处理程序,能够回到原来的程序。
•熟悉中断向量的访问。
•熟悉用户模式,仿真模式和监控模式的相互转换过程。
•熟悉FIR_DIR,FIR_FLAG_S,FIO_FLAG_C,FIO_EDGE,FIO_POLAR,FIO_MASKA_S,SIC_IMASK,IMASK的设置。
•熟悉计时器的配置二.实验任务•使用外部中断实现LED闪烁频率的改变•实现嵌套中断三.实验分析:1.中断的基本认识处理器的事件控制器处理所有的同步和异步事件,并管理5种类型的事件:仿真、复位、非屏蔽中断(NMI)、异常和中断(11种)。
中断:一种改变处理器正常指令流的异步事件。
处理器在正常执行程序过程中,由于内部/外部事件的触发或程序的预先安排,引起处理器暂时中断当前正在运行的程序,而去执行内部/外部事件或程序预先安排事件的服务子程序。
等中断服务子程序执行完毕后,处理器再返回到暂时中断程序处继续执行原来的程序。
事件系统有优先级而且可嵌套,优先级高的任务可以占用优先级低的任务的资源。
Blackfin DSP采用2级事件控制机制,一起控制所有系统中断并管理它们的优先级1)系统中断控制器(SIC)2)内核事件控制器(CEC)SIC提供多个外设中断源和内核通用中断输入之间的映射。
某个中断可以在SIC中屏蔽掉CEC支持9个通用中断(IVG7~IVG15)。
通常选用优先级最低的两个中断IVG14和IVG15作为软件中断事件列表如下:系统中断过程:中断是由能够产生中断的外设产生的,系统中断过程简要概述为:当一个中断产生时:①SIC_IWR检查DSP内核是否从一个空闲状态中被中断唤醒②SIC_ISR记录中断请求,并且跟踪被激活但未被服务的系统中断③SIC_IMASK可以在系统级上屏蔽、使能外设的中断。
姓名吴镌樊想孙璐陈玉枫学号0816070110081607020208160702010816070203专业自动化时间成绩实验名称实验3.3:DSP 的定时器实验内容通过编译调试熟悉F2812A 的定时器实验目的和要求1.通过实验熟悉F2812A 的定时器;2.掌握F2812A 定时器的控制方法;3.掌握F2812A 的中断结构和对中断的处理流程;4.学会C 语言中断程序设计,以及运用中断程序控制程序流程。
实验设备计算机,ICETEK-F2812-A 实验箱(或ICETEK 仿真器+ICETEK–F2812-A 系统板+相关连线及电源)。
实验原理1.通用定时器介绍及其控制方法(详见spru078a.pdf)TMS320F2812A 内部有三个32 位通用定时器(TIMER0/1/2),定时器1 和2 被保留给实时操作系统(DSPBIOS)用,只有定时器0 可以提供给用户使用。
2.中断响应过程(详见spru078a.pdf)a.接受中断请求。
必须由软件中断(从程序代码)或硬件中断(从一个引脚或一个基于芯片的设备)提出请求去暂停当前主程序的执行。
b.响应中断。
必须能够响应中断请求。
如果中断是可屏蔽的,则必须满足一定的条件,按照一定的顺序去执行。
而对于非可屏蔽中断和软件中断,会立即作出响应。
c.准备执行中断服务程序并保存寄存器的值。
d.执行中断服务子程序。
调用相应得中断服务程序ISR,进入预先规定的向量地址,并且执行已写好的ISR。
3.中断类别可屏蔽中断:这些中断可以用软件加以屏蔽或解除屏蔽。
不可屏蔽中断:这些中断不能够被屏蔽,将立即响应该类中断并转入相应的子程序去执行。
所有软件调用的中断都属于该类中断。
4.中断的优先级如果多个中断被同时激发,将按照他们的中断优先级来提供服务。
中断优先级是芯片内部已定义好的,不可修改。
实验设计及调试:(1)对实验内容和实验原理进行分析,理出完成实验的设计思路。
各种初始化之后,更改程序中的时间值,观察指示灯时间明灭频率的变化(2)列出设计所需的特殊环节…1. 初始化关中断2. 初始化pie寄存器禁止所有的中断3. 启动定时器(3)画出设计流程图。
实验事件管理器模块(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灯亮灭的功能。