LED实验

LED实验

参考文件:http://blog.csdn.net/TQW4321/archive/2009/03/01/3948191.aspx

//这一个真正的全裸代码。具体原理是这样的:

//首先是设置到NAND Flash 启动。当ARM 上电后,会自动读取NANDFlash

// 0x0000000地址处执行代码。我们将代码编译联接地址也设为0x0000000

//然后,用Jflash 烧写时,烧写到NAND Flash的0x0000000。那么上电后就会

//执行你的代码。

1:交叉环境的建立

2:连上开发板与PC上的JTAG线.开发板接上电源,

  设置从NAND FLASH启动.(一定要确定是NANDFLASH启动)

  否则烧写的时候不成功。

  开启开发板电源.

3:编译 start.S 

@******************************************************************************

@ File:start.S          (引用:韦东山Linux视频第1期之S3C6410\韦东山视频_S3C6410_第1期裸板_第2期驱动代码\ARM\1th_led\start.S)

@ 功能:LED点灯程序,点亮LED

@ mini6410 的LED口是GPB5,GPB6,GPB7,GPB8.给它们送[低电平点亮;高电平点灭].

@ 它的配置地址是: 0x7F008820 我们将向这个地址中写入值,将GPB5/6/7/8 这四个引脚设为输出口,

@ 它的数据地址是: 0x7F008824 我们向这里面送相应的值就会相应的点亮相应的灯。

@******************************************************************************      

.globl _start

_start:

/* 硬件相关的设置 */

   /* Peri port setup */

   ldr r0, =0x70000000

   orr r0, r0, #0x13

   mcr p15,0,r0,c15,c2,4       @256M(0x70000000-0x7fffffff)

  

/* 关看门狗 */

/* 往WTCON(0x7E004000)写0 */

      ldr r0, =0x7E004000

      mov r1, #0

      str r1, [r0]

/* 设置GPMCON让GPM3作为输出引脚 */

      ldr r1, =0x7F008820

      mov r0, #0x1000

      str r0, [r1]

/* 设置GPMDAT让GPM3输出0 */

      ldr r1, =0x7F008824

      mov r0, #0

      str r0, [r1]

halt:

       b halt

 

4:下面是Makefile文件内容。将它放在与start.S同一个文件夹下。

led.bin: start.o

      arm-linux-ld -Ttext 0 -o led.elf start.o

      arm-linux-objcopy -O binary led.elfled.bin

      arm-linux-objdump -D led.elf > led.dis

start.o :start.S

      arm-linux-gcc -o start.o start.S -c

clean:

      rm *.o led.elf led.bin led.dis

其中 arm-linux-ld -Ttext 0 -o led.elf start.o  这一句的意思是连接到0x00000000地址。

当你下载的时候,就是下载到nandflash中0x0000000处运行。

这一句:arm-linux-objcopy -O binary led.elf led.bin 将elf格式文件变成.bin文件,这个.bin

的二进制文件,是可以在mini6410开发板上运行的。

5:注意。start.S 的后缀是一个大写的S,而不是小写的s.

 进入刚才,你保存文件的文件夹之后。

 执行make.  make后会生成一个 led.bin文件。

6: 将刚才的led.bin文件复制到 Jflash

  执行如下语句:     ./Jflash-s3c2440 led_on.bin/t=5 /d=0

  出现第一个提示时输入:5--表示烧写的flash类型是 64M的k9s1208

  出现第二个提示时输入: 0--表示从第k9s1208 program

  出现第三个提示时输入: 0--表示从第0块烧写。然后就是烧写的过程.

  再出现提示时输入    : 2 --表示退出烧写。

7:关掉开发板的电源,再开启电源。你发现灯亮了。

循环点亮多个LED的代码只要把“/* 设置GPMCON让GPM0/1/2/3作为输出引脚 */”及“/* 设置GPMDAT让GPM3输出0 */”部分改为下面的即可:


/* 设置GPMCON让GPM0/1/2/3作为输出引脚 */

    ldrr1, =0x7F008820

    ldrr0, =0x1111   //改为GPM0/1/2/3作为输出引脚

    strr0, [r1]

/* 设置GPMDAT让GPM3输出0 */

         ldrr1, =0x7F008824

         movr0, #0

loop:        

         strr0, [r1]

         addr0, r0, #1

         cmpr0, #16

         moveqr0, #0

         bldelay

         bloop

delay:

         movr2, #0x10000

delay_loop:

         subr2, r2, #1

         cmpr2, #0

         bnedelay_loop                 

         movpc, lr


改为C语言编写:

(1)在Start.S文件里,同样要做硬件相关的设置和关看门狗,并且在后面加上设置栈的代码:

/* 设置栈 */
ldr sp, =8*1024
bl xxxxx  /*调用C函数*/
halt:
b halt

(2)C语言部分代码为:

void delay()  /*延时函数*/
{
volatile int i = 0x10000;
while (i--);
}
int xxxxx()
{
int i = 0;
volatile unsigned long *gpmcon = (volatile unsigned long *)0x7F008820;
volatile unsigned long *gpmdat = (volatile unsigned long *)0x7F008824;
/* gpm0,1,2,3设为输出引脚 */
*gpmcon = 0x1111;
while (1)
{
*gpmdat = i;
i++;
if (i == 16)
i = 0;
delay();
}
return 0;
}


上面的都是一些个人总结,是关于S3C6410开发板的。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值