DSP28335的GPIO外设中断

说明:GPIO0接LED0,GPIO1接LED1,GPIO2、GPIO2为两个中断触发,电平变化时对应中断响应

#include "DSP28x_Project.h" 
//自定义变量
#define   LED0  GpioDataRegs.GPADAT.bit.GPIO0   
#define   LED1  GpioDataRegs.GPADAT.bit.GPIO1
//自定义函数
void GpioSet(void);
void PeripheralsSet(void);
void PieCtrlSet(void);
void PieVectTableSet(void);
void RunFun(void);
//自定义中断
interrupt void Led0(void);
interrupt void Led1(void);
//延迟函数
int i,j,m,n;
void Delay();
//主函数
void main()
{
	// 1  系统初始化
	InitSysCtrl();  // 系统初始化,disable WatchDog,PLL,enable Peripheral Clocks
	DINT;   // 屏蔽全局中断
	IER=0x0000;  //  清除CPU中断
	IFR=0x0000;  //  清除CPU中断标志
	InitPieCtrl();  // 禁止中断,清除中断标志
	InitPieVectTable();  //  初始化中断向量表
	
	// 2  应用初始化
	GpioSet();
	PeripheralsSet();
	PieVectTableSet();
	PieCtrlSet();
	
	// 3  系统运行
	EnableInterrupts(); //使能中断
	 
	// 4  运行函数
	RunFun();
}
void GpioSet(void)
{
	//基本配置
	EALLOW;
	GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;  // GPxMUX,功能配置: 0为I/O功能,1为外设功能
	GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
	GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
	GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;
	
	GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPxDIR,方向配置:  0为输入,1为输出
	GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
	GpioCtrlRegs.GPADIR.bit.GPIO2 = 0;
	GpioCtrlRegs.GPADIR.bit.GPIO3 = 0;
	EDIS;	
}
void PeripheralsSet(void)
{
	//中断配置
	EALLOW;
	GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0x00002;  // 配置GPIO2为可屏蔽中断源 XINT1
	GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 0x00003;  // 配置GPIO3为可屏蔽中断源 XINT2	
		   
    GpioCtrlRegs.GPAQSEL1.bit.GPIO2 = 0; // 用于时钟同步 
    GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 0; // 
    
    GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0;  // 上拉电阻
    GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;
    
    XIntruptRegs.XINT1CR.bit.POLARITY = 3; //电平变化中断
    XIntruptRegs.XINT1CR.bit.ENABLE = 1;	
    XIntruptRegs.XINT2CR.bit.POLARITY = 3; //电平变化中断  
    XIntruptRegs.XINT2CR.bit.ENABLE = 1;
    EDIS;
}
void PieVectTableSet(void)
{
	EALLOW;
	PieVectTable.XINT1=& Led0; 
	PieVectTable.XINT2=& Led1;
	EDIS;
}
void PieCtrlSet(void)
{
	EALLOW;
	PieCtrlRegs.PIECTRL.bit.ENPIE = 1;  // 中断PIE模组打开
	PieCtrlRegs.PIEIER1.bit.INTx4=1;  // 使能INT1x4,XINT1
	PieCtrlRegs.PIEIER1.bit.INTx5=1;  // 使能INT1x5,XINT2
	PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;  // 使能PIEACK 
	IER |=M_INT1; // 使能CPU INT1
	EDIS;
}
void RunFun(void)
{
	while(1)
	{
		LED0=0;	Delay(); Delay();
		LED0=1;	Delay(); Delay();
		LED1=0;	Delay(); Delay();
		LED1=1;	Delay(); Delay();
	}
}
interrupt void Led0()  //  中断0,LED0闪烁
{
	i=100;
	while(i--)
	{
		LED0=0;	Delay();
		LED0=1;	Delay();
	}
	//中断结束处理	
	PieCtrlRegs.PIEACK.bit.ACK4 = 1;
}
interrupt void Led1()  //  中断1,LED1闪烁
{
	j=100;
	while(j--)
	{
		LED1=0;	Delay();
		LED1=1;	Delay();
	}
	//中断结束处理	
	PieCtrlRegs.PIEACK.bit.ACK5 = 1;
}
void Delay()
{
	for( m=0;m<1000;m++)
	{
		for( n=0;n<1000;n++)
		 ;
	}
}

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值