#define GLOBAL_CLK //相当于定义了FCLK,HCLK,PCLK,UCLK
#include "def.h"
#include "option.h"
#include "mmu.h"
#include "2440addr.h"
#define LED1_on rGPBDAT = ((0xf<<5)^(1<<5)) //GPB5=0
#define LED2_on rGPBDAT = ((0xf<<5)^(1<<6)) //GPB6=0
#define LED3_on rGPBDAT = ((0xf<<5)^(1<<7)) //GPB7=0
#define LED4_on rGPBDAT = ((0xf<<5)^(1<<8)) //GPB8=0
#define LED1_3_on rGPBDAT = ((0xf<<5)^(5<<5)) //GPB5=0,GPB7=0
#define LED2_4_on rGPBDAT = ((0xf<<5)^(5<<6)) //GPB6=0,GPB8=0
#define LED_off rGPBDAT = (0xf<<5) //GPB5=1,GPB6=1,GPB7=1,GPB8=1
#define LED_on rGPBDAT = ~(0xf<<5) //GPB5=0,GPB6=0,GPB7=0,GPB8=0
static void __irq key_handler(void); //声明按键中断服务程序
/************************************
*************************************/
void delay(int times)
{
int i,j;
for(i=0;i } /************************************ LED初始化 *************************************/ void led_init(void) { rGPBUP = (0xf<<5); //禁止上拉电阻 rGPBCON = ((1<<16)|(1<<14)|(1<<12)|(1<<10)); //GPB5-8设为输出 LED_on; delay(5); //延时 LED_off; } /************************************ 按键初始化函数 *************************************/ void Key_Init(void) { rGPGUP = ((1<<11)|(1<<7)|(1<<6)|(1<<5)|(1<<3)|(1<<0)); //禁止上拉电阻 rGPGCON = ((1<<23)|(1<<15)|(1<<13)|(1<<11)|(1<<7)|(1<<1)); //设置GPG0-3-5-6-7-11端口为中断模式 rINTMOD &= ~(0x1<<5); //设置(INTMOD寄存器的EINT8_23)为普通中断模式 rEXTINT1 &= ~((0x7<<0)|(0x7<<12)|(0x7<<20)|(0x7<<24)|(0x7<<28));//设置EINT8-11-13-14-15为低电平触发 rEXTINT2 &= ~(0x7<<12); //设置中断触发方式的EINT19[6:4]=000为低电平触发 rEINTMASK &= ~((1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19)); //设置外部中断屏蔽寄存器为disable rINTMSK &= ~BIT_EINT8_23; //中断屏蔽寄存器相应位写入0使EINT8_23中断使能 /*设置ISR*/ pISR_EINT8_23=(U32)key_handler; //将中断服务函数的地址传给对应的中断向量表位置 EnableIrq(BIT_EINT8_23); //EINT8_23中断使能 } /************************************ 主函数 *************************************/ int Main(void) { MMU_Init(); //初始化MMU,解决中断向量表入口地址与内存地址之间不一致问题,进行地址的重映射 Key_Init(); //按键初始化 led_init(); //LED初始化 return 0; } /************************************ 按键中断处理函数 *************************************/ static void __irq key_handler(void) //关键字__irq用来声明该函数一个IRQ中断服务程序, //编译器便会自动在该函数内部增加中断现场保护的代码 { /*判断是否是按键K1产生的中断*/ if(rINTPND==BIT_EINT8_23) //判断EININT8_23是否已经接受中断服务 { ClearPending(BIT_EINT8_23); //在中断服务函数中清除相应的屏蔽寄存器(SRCPNG和INTPNG相应位写入1) LED_off; //关闭所有LED if(rEINTPEND&(1<<8)) //判断K1(EINT8)是否已经产生中断,相应EINTPEND位自动置1 { rEINTPEND |= 1<< 8; //写入1清除EINTPEND寄存器相应位为下次中断做准备 LED1_on; } if(rEINTPEND&(1<<11)) { rEINTPEND |= 1<< 11; LED2_on; } if(rEINTPEND&(1<<13)) { rEINTPEND |= 1<< 13; LED3_on; } if(rEINTPEND&(1<<14)) { rEINTPEND |= 1<< 14; LED4_on; } if(rEINTPEND&(1<<15)) { rEINTPEND |= 1<< 15; LED1_3_on; } if(rEINTPEND&(1<<19)) { rEINTPEND |= 1<< 19; LED2_4_on; } } }
上一篇:mini2440裸机程序之按键检测实验
下一篇:基于mini2440按键控制电子相册(裸机代码)
推荐阅读最新更新时间:2024-11-02 10:47
设计资源 培训 开发板 精华推荐
- L4940V85 极低压降 1.5A 稳压器的典型应用,具有 L296、L4940 和 L4941 的分布式电源
- PCB宽尺
- LT1372HVIS8 5V 至 12V 升压转换器的典型应用
- 使用 Analog Devices 的 LTC2908CDDB-C1 的参考设计
- PD*8*HV航模电池充电器
- LTC3419EDD 双路 600mA 降压转换器的典型应用电路
- 基于 Si86xx 数字隔离器的 SI86ISOLIN-KIT、Si86xxIsoLin-UG ISOlinear 参考设计
- 使用 LTC3639HMSE 5 至 150V 输入至 5V 输出、100mA 降压型稳压器的典型应用
- LT1172CQ、1.25A 背光 CCFL 电源的典型应用
- 精确监测和 50μA 待机电流、13S、48V 锂离子电池组参考设计