📄 main.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 + -