||
// TI File $Revision: /main/3 $
// Checkin $Date: September 28, 2022 17:28:45 $
//#######################################################################
//
// FILE: DSP281x_IRS.c 中断程序实例
//
// TITLE: DSP281x Global Variables and Data Section Pragmas.
//
//#######################################################################
// $Wukun Release: DSP281x C/C++ Header Files V1.20 $
// $Release Date: September 28, 2022 $
// 程序描述:
// 对于大多数应用来说,PIE模块的硬件优先级有效,本程序主要介绍如何通过软件处理优先级问题
// 以及模拟PIE模块如何同时处理多个中断源
//#######################################################################
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"
//---------------------------------------------------------------------------
// 定义PIE模块中使用的每一组中断,具体的分组可以参考4.38
#define ISRS_GROUP1 (M_INT1|M_INT2|M_INT4|M_INT5|M_INT6|M_INT7|M_INT8)
#define ISRS_GROUP2 (M_INT1|M_INT2|M_INT3|M_INT4|M_INT5|M_INT6|M_INT7)
#define ISRS_GROUP3 (M_INT1|M_INT2|M_INT3|M_INT4|M_INT5|M_INT6|M_INT7)
#define ISRS_GROUP4 (M_INT1|M_INT2|M_INT3|M_INT4|M_INT5|M_INT6|M_INT7)
#define ISRS_GROUP5 (M_INT1|M_INT2|M_INT3|M_INT4|M_INT5|M_INT6|M_INT7)
#define ISRS_GROUP6 (M_INT1|M_INT2|M_INT5|M_INT6)
#define ISRS_GROUP9 (M_INT1|M_INT2|M_INT3|M_INT4|M_INT5)
//-----------------------------------------------------------------------------
//数组用于跟踪检测中断处理的程序
Uint16 ISRTrace[50];
Uint16 ISRTraceIndex; //用于更新跟踪缓冲器中的元素
//-----------------------------------------------------------------------------
// #####主程序####
//-----------------------------------------------------------------------------
void main(void)
{
Uint16 i;
//Step1. 初始化系统控制寄存器(PLL、看门狗、使能外设时钟)
InitSysCtrl();
//Step2. 初始化GPIO,具体夫人GPIO的配置可以参考后续章节中介绍的GPIO知识
//InitGpio(); //在本程序中根据需要可以忽略
//Step3. 清除所有的中断标志位和初始化PIE向量表
//禁止CPU中断
DINT;
//初始化PIE控制寄存器为默认状态
//PIE控制寄存器的默认状态为PIE所有的中断都被禁止,且标志位都清零
InitPieCtrl();
//禁止CPU中断并清除所有的CPU中断标志位
IER = 0x0000;
IFR = 0X0000;
//初始化PIE向量表
InitPieVectTable();
//Step4.初始化所有的设备外设
//InitPeripherals(); //Not required for this example
//Step 5. 下面为用户代码(使能所需的中断)
// --------------------------------------------------------------------------------
// ####例1####
// --------------------------------------------------------------------------------
//通过向PIEIFR1寄存器中写1控制第一组中断
//准备测试,禁止中断,清除跟踪缓冲器、PIE中断控制寄存器、CPU IER IFR寄存器
DINT;
for(i=0;i<50;i++)ISRTrace[i]=0;
ISRTraceIndex = 0;
InitPieCtrl();
IER = 0;
IFR &= 0;
//使能PIE模块
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
//使能第一组的1~8中断
PieCtrRegs.PIEIER1.all = 0x00FF;
//确保复位后的第一组中断响应标志位(PIEACK)被清除
PieCtrlRegs.PIEACK.all = M_int1;
//使能CPU中断1
IER |= M_INT1;
//强制第一组中断有效
PieCtrlRegs.PIEIFR.all = ISRS_GROUP1;
//使能全局CPU中断级
EINT; //使能全局中断INTM
//等待第一组的所有中断都被使用
while(PieCtrlRegs.PIEIFR1.all != 0x0000){}
asm("RSTOPO");
//------------------------------------------------------------------------
// ####例2####
//------------------------------------------------------------------------
//待续
}
摘自《F2812原理》
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-19 21:42
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社