实验报告
- 格式:doc
- 大小:270.50 KB
- 文档页数:8
利用事件管理器产生四个匹配事件控制四盏灯实验
一、实验目的
1、通过对做实验进一步了解DSP的工作原理。
2、检测一学期上课效果。
二、实验要求
1、利用事件管理器模块的定时器的四匹配事件中的中断来控制D6、D7、D8、D9显示。
三、实验器材
合众达DSP开发板以及装有ccs3.3的笔记本电脑
四、实验内容以及方法
本次实验操作主要是涉及到事件管理器中断,基本设想是事件管理器包含EV A和EVB 两个,一共四个通用定时器,正好可以产生上溢、下溢、比较、周期中断,每次中断产生时候,所对应的LED灯置位,当所对应的LED灯显示亮的时候就证明这种中断已经产生,所对应的程序流程图已经程序和说明如下:
Main函数基本流程如下
头文件、延时
函数、定时器
中断声明
进入主函数,初始化系
统、PIE控制寄存器、
禁止和清除CPU中断
EALLOW
四个定时器映
射到相应的中
断位
EDIS
事件管理器初始
化,使能四个PIE级
中断,使能全局中
断,使能实时中断
进入FOR循环
中断函数程序流程图如下:
进入比较中断*LED置1,进入延时,中断标志寄存器和中断屏蔽寄存器
置位
响应中断
进入周期中断
*LED置2,进入
延时,中断标
志寄存器和中
断屏蔽寄存器
置位
响应中断
进入上溢中断
*LED置4,进入
延时,中断标
志寄存器和中
断屏蔽寄存器
置位
响应中断
进入下溢中断
*LED置8,进入
延时,中断标
志寄存器和中
断屏蔽寄存器
置位
响应中断
由程序流程图写得程序如下:
主函数:
/******************************************************************/ /*Copyright (C), ; 华东交通大学*/ /* Module Name : */ /* File Name : main.c */ /* Author : */ /* Create Date : 2013/12/27 */ /* Version : */ /* Function : 四个匹配事件控制四盏灯*/ /* Description : */ /* Support : */ /******************************************************************/ /*****************头文件********************/
#include "DSP28_Device.h"
#include "ext_inf.h"
/****************端口宏定义*****************/
/****************常量宏定义*****************/
void delay_loop(void);
/***************全局变量定义****************/
/****************函数声明*******************/
interrupt void EV A_Timer1_isr(void);
interrupt void EV A_Timer2_isr(void);
interrupt void EVB_Timer3_isr(void);
interrupt void EVB_Timer4_isr(void);
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:主函数*/
/*------------------------------------------*/
void main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl(); //初始化PIE控制寄存器
IER=0x0000; //禁止CPU中断
IFR=0x0000; //清楚CPU中断标志
InitPieVectTable(); //初始化PIE中断向量表
EALLOW; //允许更改
PieVectTable.T1PINT = &EV A_Timer1_isr;
PieVectTable.T2CINT = &EV A_Timer2_isr;
PieVectTable.T3OFINT = &EVB_Timer3_isr;
PieVectTable.T4UFINT = &EVB_Timer4_isr;
EDIS; //禁止更改
InitEv();
PieCtrl.PIEIER2.bit.INTx4 =1; //使能PIE中断INT2.4( T1PINT) PieCtrl.PIEIER3.bit.INTx2 =1 ; //使能PIE中断INT3.2(T2CINT) PieCtrl.PIEIER4.bit.INTx7 =1; //使能PIE中断INT4.7(T3OFINT) PieCtrl.PIEIER5.bit.INTx3 =1 ; //使能PIE中断INT5.3(T4UFINT) IER |= (M_INT2|M_INT3|M_INT4|M_INT5); //开CPU中断
EINT; //使能全局中断INTM
ERTM; //使能全局实时中断DBGM
for(;;);
//等待中断
}
interrupt void EV A_Timer1_isr(void)
{
*LED = 1; //置1
delay_loop(); //延时
EvaRegs.EV AIMRA.bit.T1PINT = 1; //中断标志寄存器置位