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

📄 gpio_int_reg.c

📁 EasyARM615的KEIL下的调试程序,包含IO口,串口,SPI口等
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name:           GPIO_INT.c
** Last modified Date:  2007-04-25 
** Last Version:        v1.0
** Description:         Stellaris系列单片机GPIO口中断操作
** 
**------------------------------------------------------------------------------------------------------
** Created By:          Pan Yi Fei
** Created date:        2007-04-25 
** Version:             v1.0
** Descriptions:        程序正常运行时,熄灭LED指示灯。当按键按下时,进入中断,点亮LED指示
**                      灯。按键放开后,又熄灭LED指示灯。
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#define HWREG(x)		(*((volatile unsigned long *)(x)))
#define SYSCTL_PERIPH_GPIOD	0x20000008	// GPIO D 在系统控制器中的地址
#define SYSCTL_RCGC2			0x400fe108    // 运行模式时钟门控寄存器2
#define GPIO_O_DIR				0x00000400	// 数据方向寄存器
#define GPIO_O_AFSEL			0x00000420	// 模式控制寄存器
#define GPIO_O_DATA			0x00000000	// 数据寄存器
#define GPIO_PORTD_BASE		0x40007000	// GPIO D 口的基地址

#define GPIO_O_IS               0x00000404		//GPIO D口中断检测寄存器
#define GPIO_O_IEV              0x0000040C	//GPIO D口中断事件寄存器
#define GPIO_O_IM               0x00000410	//GPIO D口中断屏蔽寄存器
#define GPIO_O_ICR              0x0000041C	//GPIO D口中断清除寄存器
#define NVIC_EN0                0xe000e100	 	//中断使能寄存器
#define KEY1			0x00000010		// 定义KEY1
#define LED1			0x00000080		// 定义LED1

/*使能全局中断*/
__asm void  CPUcpsie(void)
{
	  CPSIE   I
	  BX LR
}

//-----------------------------------------------------------------------------------------------------------------------
// 函数原形:void GPIO_Port_D_ISR(void)
// 功能描述:点亮LED1,再清除中断标志
// 说明:用KEIL软件时,在Startup.S中添加该中断函数名
// 参数说明:无
// 返回值:无
//-----------------------------------------------------------------------------------------------------------------------
void  GPIO_Port_D_ISR(void)
{
  HWREG(GPIO_PORTD_BASE + (GPIO_O_DATA + (LED1 << 2))) = LED1;  //熄灭LED1
  HWREG(GPIO_PORTD_BASE + GPIO_O_ICR) |= KEY1;		  	//清除中断标志
} 

//-----------------------------------------------------------------------------------------------------------------------
// 函数原形:int main(void)
// 功能描述:主函数
// 参数说明:无
// 返回值:0
//-----------------------------------------------------------------------------------------------------------------------
int main(void)
{
  // 使能GPIO PD口
  HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOD & 0x0fffffff;	//使能GPIO外设
 
  // 设置连接KEY1的PD4为输入
  HWREG(GPIO_PORTD_BASE + GPIO_O_DIR) &= ~KEY1;		//GPIO输出
  HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) &= ~KEY1;	//PD4为GPIO功能
  
  // 设置连接LED1的PD7为输出
  HWREG(GPIO_PORTD_BASE + GPIO_O_DIR) |= LED1;		//GPIO输入
  HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) &= ~LED1;	//PD7为GPIO功能

  // GPIO D中断配置
  HWREG(GPIO_PORTD_BASE + GPIO_O_IS) |= KEY1;		//中断为电平触发
  HWREG(GPIO_PORTD_BASE + GPIO_O_IEV) &= ~KEY1;		//低电平有效
  HWREG(GPIO_PORTD_BASE + GPIO_O_IM) |=KEY1;		//使能GPIO D的PD4中断

  HWREG(NVIC_EN0) |= 1 << 3;			//使能GPIO D口中断(中断号为3)
  CPUcpsie();							//使能全局中断
  
  while (1)								//等待触发中断
  {
     HWREG(GPIO_PORTD_BASE + (GPIO_O_DATA + (LED1 << 2))) = ~LED1;	//点亮LED1
  }
  //return 0;
}

⌨️ 快捷键说明

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