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

📄 gpio_int_reg.c

📁 EASYARM8962开发板带的实例
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:                     GPIO_INT.c
** Last modified Date:            2007-09-20 
** Last Version:                  v1.0
** Description:                   Stellaris系列单片机GPIO口中断操作
** 
**--------------------------------------------------------------------------------------------------------
** Created By:                    Zhou Hai Xin
** Created date:                  2007-09-20 
** Version:                       v1.0
** Descriptions:                  程序正常运行时,熄灭LED指示灯。当按键按下时,进入中断,点亮LED指示
**		 		                  灯。按键放开后,又熄灭LED指示灯。
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*********************************************************************************************************/
#define HWREG(x)		(*((volatile unsigned long *)(x)))

#define SYSCTL_PERIPH_GPIOB     0x20000002                              /*  GPIO B                      */
#define SYSCTL_PERIPH_GPIOE     0x20000010                              /*  GPIO E                      */
#define SYSCTL_RCGC2			0x400fe108                              /*  运行模式时钟门控寄存器2     */

#define GPIO_PORTB_BASE         0x40005000                              /*  GPIO Port B                 */
#define GPIO_PORTE_BASE         0x40024000                              /*  GPIO Port E                 */
#define GPIO_O_DIR		        0x00000400                              /*  数据方向寄存器              */
#define GPIO_O_AFSEL		    0x00000420                              /*  模式控制寄存器              */
#define GPIO_O_DATA		        0x00000000                              /*  数据寄存器                  */
#define GPIO_O_IS               0x00000404                              /*  GPIO E口中断检测寄存器      */
#define GPIO_O_IEV              0x0000040C                              /*  GPIO E口中断事件寄存器      */
#define GPIO_O_IM               0x00000410                              /*  GPIO E口中断屏蔽寄存器      */
#define GPIO_O_ICR              0x0000041C                              /*  GPIO E口中断清除寄存器      */
#define GPIO_O_DR4R             0x00000504                              /*  4mA驱动选择                 */
#define GPIO_O_DEN              0x0000051C                              /*  数字输入使能                */

#define NVIC_EN0                0xe000e100                              /*  中断使能寄存器              */

#define KEY1			        0x00000004                              /*  定义KEY1                    */
#define LED3	                0x00000040                              /*  定义LED3                    */
                                                                        
__asm void  CPUcpsie(void)                                              /*  使能全局中断                */
{
	  CPSIE   I
	  BX LR
}

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

/*********************************************************************************************************
** 函数原形:int main(void)
** 功能描述:熄灭LED3,并等待按键的中断。
** 参数说明:无
** 返回值:  0
*********************************************************************************************************/
int main(void)
{
	unsigned char  i;
    HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOB & 0x0fffffff;            /*  使能GPIO PB口外设           */
    HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOE & 0x0fffffff;            /*  使能GPIO PE口外设           */

    for (i = 0; i < 4; i++);

    HWREG(GPIO_PORTE_BASE + GPIO_O_DIR) &= ~KEY1;                       /*  GPIO PE2为输入              */
    HWREG(GPIO_PORTE_BASE + GPIO_O_AFSEL) &= ~KEY1;                     /*  PE2为GPIO功能               */
  
    HWREG(GPIO_PORTB_BASE + GPIO_O_DIR) |= LED3;                        /*  GPIO PB6为输出              */
    HWREG(GPIO_PORTB_BASE + GPIO_O_AFSEL) &= ~LED3;                     /*  PB6为GPIO功能               */
    
	                                                                    /*设置为4mA驱动                 */
	HWREG(GPIO_PORTE_BASE + GPIO_O_DR4R) = (HWREG(GPIO_PORTE_BASE + GPIO_O_DR4R) | KEY1);
  
	                                                                    /*设置为推挽管脚                */
	HWREG(GPIO_PORTE_BASE + GPIO_O_DEN) = (HWREG(GPIO_PORTE_BASE + GPIO_O_DEN) | KEY1);

	HWREG(GPIO_PORTB_BASE + GPIO_O_DR4R) = (HWREG(GPIO_PORTB_BASE + GPIO_O_DR4R) | LED3);
  
	                                                                    /*设置为推挽管脚                */
	HWREG(GPIO_PORTB_BASE + GPIO_O_DEN) = (HWREG(GPIO_PORTB_BASE + GPIO_O_DEN) | LED3);

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

    HWREG(NVIC_EN0) |= 1 << 4;                                          /*  使能GPIO E口中断(中断号为4) */
    CPUcpsie();                                                         /*  使能全局中断                */
  
    while (1) {                                                         /*  等待触发中断                */
        HWREG(GPIO_PORTB_BASE + (GPIO_O_DATA + (LED3 << 2))) = ~LED3;   /*  点亮LED3                    */
    }
    /*  return 0;   */
}
/*********************************************************************************************************
 END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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