⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ext_int.c

📁 DSP2812资料,包括原理图,测试程序,使用说明,jjzhang166@163.com
💻 C
字号:

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

#define	  SetData	GpioDataRegs.GPFDAT.bit.GPIOF0 = 1
#define	  ClrData   GpioDataRegs.GPFDAT.bit.GPIOF0 = 0
#define	  SetClk	GpioDataRegs.GPFDAT.bit.GPIOF2 = 1
#define	  ClrClk	GpioDataRegs.GPFDAT.bit.GPIOF2 = 0
unsigned  int  *LedReg  = (unsigned int *)0x23FF;    //LED 控制寄存器
unsigned  int  *Led8Lock = (unsigned int *)0x25FF;
unsigned  int  *ExtIEReg = (unsigned int *) 0x29FF; //扩展中断控制寄存器,产生中断时置1,必须软件清零
unsigned  int  *ExtIFReg = (unsigned int *) 0x2FFF; //扩展中断标志寄存器,有中断产生时置1
const	Uint16	LedCode[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};
const	Uint16	SpiCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
Uint16	LedCount = 0;
Uint16	SpiCount = 0;
Uint16	ExtIntCounter = 5;
Uint16	T0Counter=0;
Uint16	T2Counter=0;

interrupt void ISRTimer0(void);
interrupt void ISRTimer2(void);
interrupt void ExtIntISR(void);

void	SendData(Uint16	data);

void main(void)
{

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

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

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

	*ExtIEReg = 0;
    
	InitGpio();
	InitXIntrupt();
	
	*ExtIEReg = 1;
	
	EALLOW;	
	
	PieVectTable.TINT0 = &ISRTimer0;
	PieVectTable.TINT2 = &ISRTimer2;
	PieVectTable.XINT1 = &ExtIntISR;
	
	EDIS;   
    
	/*设置CPU*/
	ConfigCpuTimer(&CpuTimer0, 10, 1000000);	
	ConfigCpuTimer(&CpuTimer2, 20, 1000000);	
	
 	StartCpuTimer0();
 	StartCpuTimer2();

    /*开中断*/
	IER |= M_INT1;
	IER |= M_INT14;	
	PieCtrl.PIEIER1.bit.INTx7=1;
	PieCtrl.PIEIER1.bit.INTx4=1;

	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM
	*Led8Lock = 0XB7;
	*LedReg = 0xFF;
	for(;;);

} 	

interrupt void ISRTimer0(void)
{
	PieCtrl.PIEACK.bit.ACK7=1;
	T0Counter++;
	if (T0Counter>=ExtIntCounter)
		{
			T0Counter = 0;
			*LedReg = LedCode[LedCount];
			LedCount++;
			if (LedCount>8)	LedCount=0;
		}	
}

interrupt void ISRTimer2(void)
{
	T2Counter++;
	if	(T2Counter>=2*ExtIntCounter)
		{
			T2Counter = 0;
			SendData(SpiCode[SpiCount]);
			SpiCount++; 
			if (SpiCount>16)	SpiCount=0;
		}	
}

interrupt void ExtIntISR(void)
{
	Uint16	Temp;
	PieCtrl.PIEACK.all = 0xFFFF;
	PieCtrl.PIEIFR1.bit.INTx4 = 0;
	ERTM;
	Temp = *ExtIFReg;
	Temp = Temp & 0x1F;	
	if (Temp==0x0F)  ExtIntCounter--;
	*ExtIEReg = 0;	
	if (ExtIntCounter<=0)	ExtIntCounter = 5;	
	*ExtIEReg = 1;	
	
    }

void	Delay(Uint16  data)
{
	Uint16	i;
	for (i=0;i<data;i++) { ; }	
}	
void	SendData(Uint16 data)
{
	Uint16	i,Temp;
	Temp = 0x80;
	for	(i=0;i<8;i++)
		{
			if ((data & Temp)==0)	ClrData;
			else	SetData;
			Temp >>= 1;
			ClrClk;
			Delay(10);
			SetClk;
		}
	*Led8Lock = 0xB7;
	Delay(10);	
	*Led8Lock = 0xBF;
	SetData;		
}		

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

⌨️ 快捷键说明

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