S3C2440 用按键控制LED

转自《嵌入式Linux应用开发完全手册》

1. 先看电路图


2. 配置按键为输入,LED为输入

(1)通过crt0.S转入C程序

.text
.global _start
_start:
	ldr  r0, =0x53000000    @ WATCHDOG寄存器地址
	mov  r1, #0x0
	str  r1, [r0]           @ 写入0,禁止WATCHDOG,否则CPU会不断重启
	
	ldr sp, =1024*4         @ 设置堆栈,注意:不能大于4K,因为可用的内存只有4K
	                        @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
	bl  main                @ 调用C程序中的main函数
halt_loop:
	b   halt_loop
(2)key_led.c

#define GPFCON  (*(volatile unsigned long *) 0x56000050)

#define GPFDAT   (*(volatile unsigned long *) 0x56000054)


#define GPGCON (*(volatile unsigned long *) 0x56000060)

#define GPGDAT   (*(volatile unsigned long *) 0x56000064)


#define GPF4_out (1<<(4*2))

#define GPF5_out (1<<(5*2))

#define GPF6_out (1<<(6*2))


#define GPF4_msk (3<<(4*2))

#define GPF5_msk (3<<(5*2))

#define GPF6_msk (3<<(6*2))


#define GPF0_in (0<<(0*2))

#define GPF2_in (0<<(2*2))

#define GPG3_in (0<<(3*2))


#define GPF0_msk (3<<(0*2))

#define GPF2_msk (3<<(2*2))

#define GPG3_msk (3<<(3*2))


int main()

{

unsigned long dwDat;

GPFCON &= ~(GPF4_msk | GPF5_msk | GPF6_msk);

GPFCON |= GPF4_out | GPF5_out | GPF_out;


GPFCON &= ~(GPF0_msk | GPF2_msk);

GPFCPN |= GPF0_in | GPF2_in;


GPGCON &= ~GPG3_msk;

GPGCON != GPG3_in;


while (1) {

dwDat = GPFDAT;

if (dwDat & (1<<0))

GPFDAT |= (1<<4);

else

GPFDAT &= ~(1<<4);

if (dwDat & (1<<2))

GPFDAT |= (1<<5);

else

GPFDAT &= ~(1<<5);


dwDat = GPGDAT;


if (dwDat & (1<<3))

GPFDAT |= (1<<6);

else

GPFDAT &= ~(1<<6);

}

return 0;

}

3. 总结

清0使用 &= ~

置1使用 |=

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值