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

📄 eint01.c

📁 周立功单片机ARM学习板easyARM2104的测试程序等
💻 C
字号:
/****************************************************************************
* File:EINT01.C
* 功能:使能外部中断0和外部中断1,当外部中断0有效时,控制LED1取反;
*      当外部中断1有效时,控制取反LED2。
* 说明:将跳线器JP8_LED1、JP8_LED2短接。
****************************************************************************/
#include  "config.h" 

#define	  LED1CON	0x00000400		/* P0.10引脚控制LED1,低电平点亮 */
#define   LED2CON	0x00000800		/* P0.11引脚控制LED2,低电平点亮 */


/****************************************************************************
* 名称:IRQ_Eint0()
* 功能:外部中断EINT0服务函数,取反LED1。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void   __irq IRQ_Eint0(void)
{  uint32  i;

   i = VICIRQStatus;				// 读出VICIRQStatus的值
   
   i = IOSET;						// 读取当前LED1控制值
   if( (i&LED1CON)==0 )				// 控制LED1输出
   {  IOSET = LED1CON;
   }
   else
   {  IOCLR = LED1CON;
   }
   
   while( (EXTINT&0x01)!=0 )		// 等待外部中断信号恢复为高电平	
   {  EXTINT = 0x01;				// 清除EINT0中断标志
   }
   
   VICVectAddr = 0x00;   
}		




/****************************************************************************
* 名称:IRQ_Eint1()
* 功能:外部中断EINT1服务函数,取反LED2。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void   __irq IRQ_Eint1(void)
{  uint32  i;

   i = VICIRQStatus;				// 读出VICIRQStatus的值
   
   i = IOSET;						// 读取当前LED2控制值
   if( (i&LED2CON)==0 )				// 控制LED2输出
   {  IOSET = LED2CON;
   }
   else
   {  IOCLR = LED2CON;
   }
   
   VICVectAddr = 0x00;
   while( (EXTINT&0x02)!=0 )		// 等待外部中断信号恢复为高电平	
   {  EXTINT = 0x02;				// 清除EINT1中断标志
   }
   
   VICVectAddr = 0x00;
}		
			

/****************************************************************************
* 名称:main()
* 功能:初始化外部中断0、外部中断1及IO连接等。
****************************************************************************/
int  main(void)
{  PINSEL0 = 0x20000000;			// 设置IO口工作模式,P0.14设置为EINT1
   PINSEL1 = 0x00000001;			// P0.16设置为EINT0
   IODIR = LED1CON|LED2CON;			// 设置LED1、LED2控制口为输出,其它I/O为输入
   
   
   VICIntSelect = 0x00000000;		// 设置所有通道为IRQ中断
   VICVectCntl0 = 0x2E;				// EINT0通道分配到IRQ slot 0,即优先级最高
   VICVectAddr0 = (int)IRQ_Eint0;	// 设置EINT0向量地址
   VICVectCntl1 = 0x2F;
   VICVectAddr1 = (int)IRQ_Eint1;
   VICIntEnable = 0x0000C000;		// 使能EINT0、EINT1中断
   EXTINT = 0x07;					// 清除外部中断标志	
   
   while(1);						// 等待中断
   return(0);
}

⌨️ 快捷键说明

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