TQ2440裸奔程序>>EINT中断按键测试程序
2011-12-21 21:08
369 查看
//=========================================
// NAME: main.c
// DESC: TQ2440流水灯测试程序
// 板载LED为PB
//=========================================
/* 头文件包含 */
#define U32 unsigned int
/* 中断向量表 */
#define _ISR_STARTADDRESS 0x33ffff00
#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x20))
#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x24))
#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x28))
#define pISR_EINT4_7 (*(unsigned *)(_ISR_STARTADDRESS+0x30))
/* 中断控制 寄存器地址 */
#define rSRCPND (*(volatile unsigned *)0x4a000000) //Interrupt request status 源挂起寄存器
#define rINTMSK (*(volatile unsigned *)0x4a000008) //Interrupt mask control 中断屏蔽寄存器
#define rINTPND (*(volatile unsigned *)0x4a000010) //Interrupt request status 中断挂起寄存器
/* 外部中断 寄存器地址 */
#define rEXTINT0 (*(volatile unsigned *)0x56000088) //External interrupt control register 0 外部中断控制寄存器
#define rEINTMASK (*(volatile unsigned *)0x560000a4) //External interrupt mask 外部中断屏蔽寄存器
#define rEINTPEND (*(volatile unsigned *)0x560000a8) //External interrupt pending 外部中断挂起寄存器
/* LED灯寄存器地址 */
#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
#define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
/* EINT F 寄存器地址 */
#define rGPFCON (*(volatile unsigned *)0x56000050) //Port F control
void led_init(void)
{
//板载LED为GPB[5:8]
rGPBCON = (rGPBCON & ~(0xff<<10)) | (0x55<<10); //rGPBCON为01 配置为输出
rGPBUP = rGPBUP | (0xf<<5); //rGPBUP为1 禁止上拉
rGPBDAT = rGPBDAT | (0xf<<5); //LED灯全关
}
void led_display(unsigned char data)
{
//0x0全灭 0xf全亮 0x01 0x02 0x04 0x80 各自灯亮
rGPBDAT = (rGPBDAT & ~(0xf<<5)) | ((~data) <<5);
}
void eint_init(void)
{
rGPFCON = 0xaaaa; //GPF[0:15]配置成外部中断
rSRCPND = rSRCPND | 0x1f; //清除EINT[0:7]源中断请求
rINTMSK = rINTMSK & ~(0x1f); //清除EINT[0:7]中断屏蔽请求
rINTPND = rINTPND | 0x1f; //清除EINT[0:7]中断挂起请求
rEINTPEND = rEINTPEND | (1<<4);
rEINTMASK = rEINTMASK & ~(1<<4);
rEXTINT0 = rEXTINT0 & ~((0x7<<0) | (0x7<<4) | (0x7<<8) | (0x7<<16));
rEXTINT0 = rEXTINT0 | ((0x2<<0) | (0x2<<4) | (0x2<<8) | (0x2<<16));//EINT下降沿触发方式 01x 0x2
}
static void __irq Key1_ISR(void) //EINT1
{
rSRCPND = rSRCPND | (0x1<<1);
rINTPND = rINTPND | (0x1<<1);
led_display(0x1);
}
static void __irq Key2_ISR(void) //EINT4
{
rSRCPND = rSRCPND | (0x1<<4);
rINTPND = rINTPND | (0x1<<4);
if(rEINTPEND & (1<<4))
{
rEINTPEND = rEINTPEND | (0x1<<4);
led_display(0x2);
}
}
static void __irq Key3_ISR(void) //EINT2
{
rSRCPND = rSRCPND | (0x1<<2);
rINTPND = rINTPND | (0x1<<2);
led_display(0x4);
}
static void __irq Key4_ISR(void) //EINT0
{
rSRCPND = rSRCPND | 0x1;
rINTPND = rINTPND | 0x1;
led_display(0x8);
}
void Main(void)
{
led_init();
eint_init();
/* 中断函数入口地址 */
pISR_EINT0 = (U32)Key4_ISR;
pISR_EINT1 = (U32)Key1_ISR;
pISR_EINT2 = (U32)Key3_ISR;
pISR_EINT4_7 = (U32)Key2_ISR;
while(1);
}
// NAME: main.c
// DESC: TQ2440流水灯测试程序
// 板载LED为PB
//=========================================
/* 头文件包含 */
#define U32 unsigned int
/* 中断向量表 */
#define _ISR_STARTADDRESS 0x33ffff00
#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x20))
#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x24))
#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x28))
#define pISR_EINT4_7 (*(unsigned *)(_ISR_STARTADDRESS+0x30))
/* 中断控制 寄存器地址 */
#define rSRCPND (*(volatile unsigned *)0x4a000000) //Interrupt request status 源挂起寄存器
#define rINTMSK (*(volatile unsigned *)0x4a000008) //Interrupt mask control 中断屏蔽寄存器
#define rINTPND (*(volatile unsigned *)0x4a000010) //Interrupt request status 中断挂起寄存器
/* 外部中断 寄存器地址 */
#define rEXTINT0 (*(volatile unsigned *)0x56000088) //External interrupt control register 0 外部中断控制寄存器
#define rEINTMASK (*(volatile unsigned *)0x560000a4) //External interrupt mask 外部中断屏蔽寄存器
#define rEINTPEND (*(volatile unsigned *)0x560000a8) //External interrupt pending 外部中断挂起寄存器
/* LED灯寄存器地址 */
#define rGPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define rGPBDAT (*(volatile unsigned *)0x56000014) //Port B data
#define rGPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
/* EINT F 寄存器地址 */
#define rGPFCON (*(volatile unsigned *)0x56000050) //Port F control
void led_init(void)
{
//板载LED为GPB[5:8]
rGPBCON = (rGPBCON & ~(0xff<<10)) | (0x55<<10); //rGPBCON为01 配置为输出
rGPBUP = rGPBUP | (0xf<<5); //rGPBUP为1 禁止上拉
rGPBDAT = rGPBDAT | (0xf<<5); //LED灯全关
}
void led_display(unsigned char data)
{
//0x0全灭 0xf全亮 0x01 0x02 0x04 0x80 各自灯亮
rGPBDAT = (rGPBDAT & ~(0xf<<5)) | ((~data) <<5);
}
void eint_init(void)
{
rGPFCON = 0xaaaa; //GPF[0:15]配置成外部中断
rSRCPND = rSRCPND | 0x1f; //清除EINT[0:7]源中断请求
rINTMSK = rINTMSK & ~(0x1f); //清除EINT[0:7]中断屏蔽请求
rINTPND = rINTPND | 0x1f; //清除EINT[0:7]中断挂起请求
rEINTPEND = rEINTPEND | (1<<4);
rEINTMASK = rEINTMASK & ~(1<<4);
rEXTINT0 = rEXTINT0 & ~((0x7<<0) | (0x7<<4) | (0x7<<8) | (0x7<<16));
rEXTINT0 = rEXTINT0 | ((0x2<<0) | (0x2<<4) | (0x2<<8) | (0x2<<16));//EINT下降沿触发方式 01x 0x2
}
static void __irq Key1_ISR(void) //EINT1
{
rSRCPND = rSRCPND | (0x1<<1);
rINTPND = rINTPND | (0x1<<1);
led_display(0x1);
}
static void __irq Key2_ISR(void) //EINT4
{
rSRCPND = rSRCPND | (0x1<<4);
rINTPND = rINTPND | (0x1<<4);
if(rEINTPEND & (1<<4))
{
rEINTPEND = rEINTPEND | (0x1<<4);
led_display(0x2);
}
}
static void __irq Key3_ISR(void) //EINT2
{
rSRCPND = rSRCPND | (0x1<<2);
rINTPND = rINTPND | (0x1<<2);
led_display(0x4);
}
static void __irq Key4_ISR(void) //EINT0
{
rSRCPND = rSRCPND | 0x1;
rINTPND = rINTPND | 0x1;
led_display(0x8);
}
void Main(void)
{
led_init();
eint_init();
/* 中断函数入口地址 */
pISR_EINT0 = (U32)Key4_ISR;
pISR_EINT1 = (U32)Key1_ISR;
pISR_EINT2 = (U32)Key3_ISR;
pISR_EINT4_7 = (U32)Key2_ISR;
while(1);
}
相关文章推荐
- TQ2440裸奔程序>>串口UART的PC机按键测试程序
- TQ2440裸奔程序>>PWM蜂鸣器测试程序
- TQ2440裸奔程序>>串口UART打印printf测试程序
- TQ2440裸奔程序>>定时器4中断测试程序
- TQ2440裸奔程序>>流水灯测试程序
- TQ2440裸奔程序:EINT中断按键测试程序
- TQ2440裸奔程序>>2440init.s启动代码分析
- TQ2440裸奔程序>>看门狗测试程序
- TQ2440裸奔程序>>PWM蜂鸣器测试程序
- 删除Symbian模拟器(功能表->安装)里面测试程序的方法
- TQ2440裸奔程序3-中断控制LED灯
- TQ2440按键驱动及测试程序
- 基于中断的按键驱动以及其测试程序
- cocos2d-x-2.2的SimpleAudioEngine::sharedEngine()->playEffect()程序中断的bug
- 第二步在TQ2440(S3C2440)上实现点灯程序--->完结,测试OK .
- MCAPI学习笔记<一>——简介与Linux下示例程序测试
- TQ2440裸奔程序:串口UART的PC机按键测试程序
- 错误的程序之阶乘之和测试程序的快慢程度(加一个计时器)<time.h>和clock()函数
- Mini2440 裸机实验之LED程序、按键、中断
- <转载>Win7文件关联 文件与程序“联姻”