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

📄 main.c

📁 周立功开发板附带的源代码 这个源码是关于嵌入式的
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2006-01-05 
** Last Version: v1.0
** Description: MagicARM2410实验箱的基础实验---外部中断实验。
**              使用外部中断EINT4进行LED1的控制,每当有一次中断,就把LED1控制口输出信号取反一次。
**------------------------------------------------------------------------------------------------------
** Created By: 黄绍斌
** Created date: 2006-01-05 
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include  "config.h"


// 定义LED控制口 (输出高电平时点亮LED)
#define  LED1_CON       (1<<11)     /* GPE11口 */
#define  LED2_CON       (1<<12)     /* GPE12口 */
#define  LED3_CON       (1<<4)      /* GPH4口  */
#define  LED4_CON       (1<<6)      /* GPH6口  */

// 定义独立按键KEY1的输入口
#define  KEY_CON		(1<<4)      /* GPF4口  */


// 定义LED1控制值变量
uint8  ledcon = 0x00;


/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
**              延时时间与系统时钟有关。
** Input: dly	延时参数,值越大,延时越久
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  DelayNS(uint32  dly)
{  
	uint32  i;

   	for(; dly>0; dly--) 
       for(i=0; i<50000; i++);
}


 
/*********************************************************************************************************
** Function name: IRQ_Eint4
** Descriptions: Eint4中断服务程序。把LED1控制口输出信号取反。     
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-01-05 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  IRQ_Eint4(void)
{	
    int  i;

	// 按键去抖动
	rGPFCON = rGPFCON & (~(0x03<<8));	// 设置为GPIO输入方式
	for(i=0; i<10000; i++);				// 延时去抖动
	if(rGPFDAT&KEY_CON)	    // 若是假按键,则直接退出
	{	
	    rGPFCON = rGPFCON | (0x02<<8);	// 设置回EINT4中断口
	
		// 清除中断标志	
		rEINTPEND = (1<<4);
		rSRCPND = (1<<4);
		rINTPND = rINTPND;
		return;
	}
	rGPFCON = rGPFCON | (0x02<<8);	    // 设置回EINT4中断口
	
	
	// 把LED1控制口输出信号取反
	if(ledcon)
	{	
	    ledcon = 0;
	    rGPEDAT = rGPEDAT & (~LED1_CON) ;
	}
	else
	{	
	    ledcon = 1;
	    rGPEDAT = rGPEDAT | LED1_CON;
	}
	
	// 清除中断标志	
	rEINTPEND = (1<<4);
	rSRCPND = (1<<4);
	rINTPND = rINTPND;
}



/*********************************************************************************************************
** Function name: EINT_init
** Descriptions: 外部中断初始化。设置GPF4引脚为外部中断EINT4功能,下降沿触发模式,并使能中断允许。     
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-01-05 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  EINT_init(void)
{	
    rGPFCON = (rGPFCON & 0xFFFFFCFF) | (0x02<<8);	// 设置GPF4引脚为外部中断EINT4功能	
	rEXTINT0 = (0x2<<16);	                        // 外部中断EINT4设置为下降沿触发			
	VICVectAddr[4] = (uint32) IRQ_Eint4;            // 中断向量地址设置		
		
	rPRIORITY = 0x00000000;	    // 使用默认的固定的优先级
	rINTMOD = 0x00000000;	    // 所有中断均为IRQ中断
	rINTMSK = ~0x0000010;       // 使能EINT4中断
	rEINTMASK =  ~0x0000010;    
}



/*********************************************************************************************************
** Function name: LED_DispAllOff
** Descriptions: 控制LED1~LED4全部熄灭。     
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-01-05 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  LED_DispAllOff(void)
{  
    rGPEDAT = rGPEDAT & (~(0x03<<11));  
    rGPHDAT = rGPHDAT & (~(0x05<<4));  
}



/*********************************************************************************************************
** Function name: main
** Descriptions: 初始化外部中断EINT4,然后循环等待中断。
** Input: 无
** Output: 系统返回值0
** Created by: 黄绍斌
** Created Date: 2005-12-31 
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int  main(void)
{		
    // 初始化I/O
    rGPECON = (rGPECON & (~(0x0F<<22))) | (0x05<<22);   // rGPECON[25:22] = 0101b,设置GPE11、GPE12为GPIO输出模式
    rGPHCON = (rGPHCON & (~(0x33<<8))) | (0x11<<8);     // rGPHCON[13:8] = 01xx01b,设置GPH4、GPH6为GPIO输出模式
    
    LED_DispAllOff();       // 熄灭LED1--LED4
    
    EINT_init();            // 外部中断初始化
	IRQEnable();            // 使能IRQ中断 (清零CPSR寄存器的I位)	
	
    while(1);               // 等待外部中断
   	return(0);
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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