main.c

来自「F2812实现电机控制源程序.rar」· C语言 代码 · 共 111 行

C
111
字号
/*********************************************************************
**	Module Name:		EXT_INT 				    				**
**	Author:				Cbq  			    						**
**	Version:			1.0			    							**
**	CreateDate:			2008-05-16		    						**
**	Description:		            			    				**
**	Remark:				Huozq		    							**
**	Revision History:	2008-11-10			    					**
**********************************************************************/

/*********************************************************************
**	实验目的:通过实验了解DSP内部的外部中断控制寄存器,知道怎样去实现 **
             外部中断                                               **
**	实验说明:2812有三个独立的外部可屏蔽中断XINT1,XINT2,XINT13和一个 **
**           不可屏蔽中断XNMI(和XINT13共用一个脚),我们的电路用CPLD  **
**           扩展出了5个可屏蔽中断EXINT1~5和2个不可屏蔽中断NMI1和   **
**           NMI2.                                                  **
**           1、外部扩展的5个可屏蔽中断通过CPLD之后,CPLD输出一INT1  **
**              与DSP的外中断一XINT1连接在一起;                     **
**           2、外部扩展的2个不可屏蔽中断通过CPLD之后,CPLD输出一    **
**              NMI1与DSP的XNMI连接到了一起;                        **
**           3、DSP的XINT2中断分配给了USB68013,/INT 68013          **
**              具体可查看原理图                                    **
**	实验结果:我们这里的实验只用了EXINT5,就是通过按键S3产生一中断, **
**           看在程序运行时能否跳入中断,在指定位置设置的断点停下。 **
**********************************************************************/

     
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"


unsigned  int  *INT1Add  = (unsigned int *)0x4100;///INT1中断地址定义   
unsigned  int  *NMIAdd   = (unsigned int *)0x4200;///NMI中断地址定义  

interrupt void ExtIntISR(void);


void main(void)
{

	/*初始化系统*/
	InitSysCtrl();

	/*关中断*/
	DINT;
	IER = 0x0000;
	IFR = 0x0000;
	
	/*初始化PIE*/
	InitPieCtrl();

	/*初始化PIE中断矢量表*/
	InitPieVectTable();	
	
	/*初始化外设*/
    ///InitPeripherals();

    
	///InitGpio();
	InitXIntrupt();
	
	
	EALLOW;	
	
	PieVectTable.XINT1 = &ExtIntISR;//中断矢量表的外中断1指向中断服务寄存器函数
	
	EDIS;   
    


    /*开中断*/
	IER |= M_INT1;  				//外部中断1所的的PIE分组	
    PieCtrl.PIEIER1.bit.INTx4 = 1;  //外部中断1所在PIE分组1中的第4位

	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM

	for(;;);

} 	



interrupt void ExtIntISR(void)
{
	Uint16	Temp; ///用此临时变量读取外部可屏蔽中断,对应关系为:
	              /// bit7  bit6   bit5   bit4   bit3   bit2   bit1   bit0
	              ///                    Eint5  Eint4  Eint3  Eint2  Eint1
	PieCtrl.PIEACK.all = 0xFFFF;  //响应中断,写1清0,允许INT1~INT12向CPU发起中断
	PieCtrl.PIEIFR1.bit.INTx4 = 0;//相应的中断标志寄存器清0
	ERTM;
	Temp = *INT1Add;
	Temp |= 0xffe0;				//设断点
	
	Temp = Temp;	
	
    }

void	Delay(Uint16  data)
{
	Uint16	i;
	for (i=0;i<data;i++) { ; }	
}	
	

//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?