浮名此生分享 http://blog.sciencenet.cn/u/hailangww 工学博士

博文

[转载]中断服务程序

已有 1503 次阅读 2022-9-29 12:23 |系统分类:科研笔记|文章来源:转载

// 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原理》



https://blog.sciencenet.cn/blog-54347-1357334.html

上一篇:[转载]解除代码安全模式
下一篇:看门狗中断程序
收藏 IP: 58.34.184.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-26 19:08

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部