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

📄 gpio_int_reg.c

📁 EasyARM615在IAR上的实验源代码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name:           GPIO_INT.c
** Last modified Date:  2008.01.18 
** Last Version:        v1.0
** Description:         Stellaris系列单片机GPIO口中断操作
** 
**------------------------------------------------------------------------------------------------------
** Created By:          Kang qinhua
** Created date:        2008.01.18 
** 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

/*使能全局中断*/
void  CPUcpsie(void)                                                   
{
   __asm(          
          "cpsie i \n"
        );    
}

//-----------------------------------------------------------------------------------------------------------------------
// 函数原形: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 + -