GPIO

这是我第一次写博客,自己学ARM,随着学习的深入发现所学的东西越来越多,而本人的脑子有限,所以打算谢谢博客,记录下所学的东西,便于回忆,可能有不对的地方,希望大家能提出来,谢谢。

  

    根据s3c2440数据手册,发现该芯片总共有130个多功能pins,同时被分为8大块,分别为GPA (25) GPB(11)  GPC(16) GPD(16) GPE(16) GPF(8) GPG(16) GPH(9) GPJ(13)。


      

pins还真多,让我倍感压力啊。


学习arm的第一步,点亮小灯,虽然实验比较简单,但可以了解如何操作引脚,还是很值得的。


实验目标:点亮小灯。

            

涉及的引脚为:GPF4 GPF5 GPF6 。


实验步骤:

1.   将GPF4 GPF5 GPF6 设为输出引脚。

2.   延时一段时间轮流点亮。形成流水灯的效果。


程序代码:

    Head.s

.text
.global start
start:
ldr sp,=4096
bl disable_watch_dog
bl main
halt_loop:
b halt_loop



init.c

#define WTCON (*(volatile unsigned long *)0x53000000)


void disable_watch_dog(void)
{
   WTCON = 0;
}


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<<2*4)
#define GPF5_out (1<<2*5)
#define GPF6_out (1<<2*6)


#define GPF4_msk (3<<2*4)
#define GPF5_msk (3<<2*5)
#define GPF6_msk (3<<2*6)


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


int main(void)
{
   int temp,temp1;
   GPFDAT = ~(0);
   GPFCON &= ~(GPF4_msk|GPF5_msk|GPF6_msk|GPF0_msk|GPF2_msk);
   GPGCON &= ~(GPG3_msk);
   GPFCON |= (GPF4_out|GPF5_out|GPF6_out);
   while(1)
   {
      temp = GPFDAT&(~(1<<3));
       temp |= (GPGDAT&(1<<3));
      //temp1 = GPGDAT;
      if(temp&0x0001)
          GPFDAT |=(1<<4);
      else
   GPFDAT &=~(1<<4);
      if(temp&(1<<2))
          GPFDAT |=(1<<5);
      else
          GPFDAT &=~(1<<5);
      if(temp&(1<<3))
          GPFDAT |=(1<<6);
      else
          GPFDAT &=~(1<<6);
   }


   return 0;
}



Makefile


KeyLed.bin:head.s init.c keyLed.c 
arm-linux-gcc -c -o head.o head.s
arm-linux-gcc -c -o init.o init.c
arm-linux-gcc -c -o keyLed.o keyLed.c
arm-linux-ld -Ttext 0x00000000 head.o init.o keyLed.o -o keyLed_elf
arm-linux-objcopy -O binary -S keyLed_elf keyLed.bin
arm-linux-objdump -D -m arm keyLed_elf > keyLed.dis
clean:
rm -rf keyLed.bin keyLed_elf keyLed.dis *.o





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值