📄 led.c
字号:
//*------------------------------------------------------------------------------------------------
//* 文件名 : Led.c
//* 功能描述 : 系统入口函数文件
//* 作者 : 焦海波
//* 版本 : 0.1
//* 建立日期、时间 : 2007/02/24 11:59
//* 最近修改日期、时间 :
//* 修改原因 :
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 头文件 -----------------------------------------------
#include "/at91sam7x256/include/AT91SAM7X256.h"
#include "/at91sam7x256/include/lib_AT91SAM7X256.h"
//*------------------------------------------ 变量 -----------------------------------------------
unsigned int unIsContinue = 1;
//*================================================================================================
//* 函 数 区
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函数名称 : irqvLed
//* 功能描述 : PIT中断处理函数
//* 入口参数 : 无
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
extern void ARMCoreEnableInt(void);
__irq void irqvLed(void)
{
int i;
//* 内核级中断使能
ARMCoreEnableInt();
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
while(unIsContinue);
AT91F_PIO_SetOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
for(i=0; i<3000000; i++);
unIsContinue = 1;
AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_PITC->PITC_PIVR;
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : irqvKey4
//* 功能描述 : Key 4 按键触发的普通中断ISR
//* 入口参数 : 无
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
__irq void irqvKey4(void)
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB20);
while(unIsContinue);
AT91F_PIO_SetOutput(AT91C_BASE_PIOB, AT91C_PIO_PB20);
AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_PIOA->PIO_ISR;
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : irqvKey5
//* 功能描述 : Key 5 按键触发的快速中断ISR
//* 入口参数 : 无
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
__irq void irqvKey5(void)
{
unIsContinue = 0;
AT91C_BASE_AIC->AIC_EOICR = 0;
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : CMain
//* 功能描述 : 系统入口函数,完成基本的定时器中断设置等工作
//* 入口参数 : 无
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
#define INTERVAL_MS_NUM 50
int CMain(void)
{
//* 初始化LED1
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA | 1 << AT91C_ID_PIOB);
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, AT91C_PIO_PA28 | AT91C_PIO_PA29);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19 | AT91C_PIO_PB20);
//* 注册中断
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, irqvLed);
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_PIOA, AT91C_AIC_PRIOR_HIGHEST, AT91C_AIC_SRCTYPE_POSITIVE_EDGE, irqvKey4);
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_FIQ, 0, AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE, irqvKey5);
AT91C_BASE_PITC->PITC_PIMR = AT91C_PITC_PITEN | AT91C_PITC_PITIEN | ((((48000000/16)/1000)*INTERVAL_MS_NUM) - 1);
AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA, AT91C_PIO_PA28);
AT91C_BASE_AIC->AIC_IECR = 0x01 << AT91C_ID_FIQ | 0x01 << AT91C_ID_SYS | 0x01 << AT91C_ID_PIOA;
while(1);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -