TQ210裸机编程——按键点灯 (二)

 今天,我们选用中断法进行TQ210裸机的按键点灯编程。

#define GPC0CON				*((volatile unsigned int *)0xE0200060)
#define GPC0DAT				*((volatile unsigned int *)0xE0200064)

#define GPH0CON				*((volatile unsigned int *)0xE0200C00)
#define GPH0DAT				*((volatile unsigned int *)0xE0200C04)

#define EXT_INT_0_CON 		*((volatile unsigned int *)0xE0200E00)
#define EXT_INT_0_MASK		*((volatile unsigned int *)0xE0200F00)

#define VIC0INTSELECT		*((volatile unsigned int *)0xF200000C)
#define VIC0INTENABLE 		*((volatile unsigned int *)0xF2000010)

#define VIC0VECTADDR0		*((volatile unsigned int *)0xF2000100)
#define VIC0VECTADDR1		*((volatile unsigned int *)0xF2000104)

#define VIC0ADDRESS  		*((volatile unsigned int *)0xF2000F00)

#define EXT_INT_0_PEND		*((volatile unsigned int *)0xE0200F40)

extern void key_isr(void);

void key_handle()
{	
	volatile unsigned char key_code = EXT_INT_0_PEND & 0x3;
	
	VIC0ADDRESS = 0;		/* 清中断向量寄存器 */
	EXT_INT_0_PEND |= 3;	/* 清中断挂起寄存器 */
	
	if (key_code == 1)		/* key1 */
		GPC0DAT ^= 1 << 3;	/* toggle LED1 */
	else if (key_code == 2)	/* key2 */
		GPC0DAT ^= 1 << 4;	/* toggle LED2 */
}

int main()
{
	GPC0CON &= ~(0xFF << 12);
	GPC0CON |= 0x11 << 12;					/* 配置GPC0_3和GPC0_4为输出:LED1和LED2 */
	GPH0CON |= 0xFF << 0;					/* 配置GPH0_0和GPH0_1为外部中断:key1和key2 */
	
	EXT_INT_0_CON &= ~(0xFF << 0);
	EXT_INT_0_CON |= 2 | (2 << 4);			/* 配置EXT_INT[0]和EXT_INT[1]为下降沿触发 */
	EXT_INT_0_MASK &= ~3;					/* 取消屏蔽外部中断EXT_INT[0]和EXT_INT[1] */
	
	VIC0INTSELECT &= ~3;					/* 选择外部中断EXT_INT[0]和外部中断EXT_INT[1]为IRQ类型的中断 */
	
	VIC0INTENABLE |= 3;						/* 使能外部中断EXT_INT[0]和EXT_INT[1] */
	
	VIC0VECTADDR0 = (int)key_isr;			/* 当EXT_INT[0]触发中断,即用户按下key1时,
											 CPU就会自动的将VIC0VECTADDR0的值赋给VIC0ADDRESS并跳转到这个地址去执 */
	VIC0VECTADDR1 = (int)key_isr;
	
	while (1);
	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值