Chinaunix首页 | 论坛 | 博客
  • 博客访问: 378774
  • 博文数量: 56
  • 博客积分: 1449
  • 博客等级: 中尉
  • 技术积分: 822
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-08 10:24
文章分类

全部博文(56)

文章存档

2014年(7)

2012年(13)

2011年(10)

2010年(26)

分类:

2010-11-27 00:55:21

   终于把LED等的实验做好了...linux平台上做.  貌似速度很不好... 延迟的函数是递减0x100000, 大约需要三四秒.真够慢的..

一共有两个文件,一个汇编文件,一个C语言文件,其中汇编文件的功能就是关闭看门狗,然后为C语言代码设置环境,这里简单的设置一下堆栈就可以了。貌似这样和在x86上写裸程序是一个道理。C语言文件就循环点亮LED1-4。

贴代码如下:

crt0.S

#define WATDOG    0x53000000
.text
.global _start
start:
    ldr    r0, =WATDOG
    mov    r1, #0
    str    r1, [r0]

    ldr    sp, =1024*4
   
    bl    main
halt:
    b    halt


main.c文件

#define GPBCON    (*(volatile unsigned long *)0x56000010)
#define GPBDAT    (*(volatile unsigned long *)0x56000014)
#define LED4_SET_OUTPUT ((1<<10) | (1<<12) | (1<<14) | (1<<16))
#define LED1_ON    (~(1<<5))
#define LED2_ON (~(1<<6))
#define LED3_ON (~(1<<7))
#define LED4_ON (~(1<<8))

void delay(void)
{
    unsigned int i = 0x100000;
    while(i--);
}

int main(void)
{
    int i = 0x1000;
    GPBCON = LED4_SET_OUTPUT;
    while(i--) {
        GPBDAT = LED1_ON;
        delay();
        GPBDAT = LED2_ON;
        delay();
        GPBDAT = LED3_ON;
        delay();
        GPBDAT = LED4_ON;
        delay();
    }
    return 0;
}


Makefile 文件

产生的二进制文件的名称很奇怪哈...是u-boot.bin,没办法... Nor flash里的u-boot进入下载模式时之能将固定的二进制文件名下载并烧入nand... 板子自带的就是这样... 不要与真正的u-boot搞混了...
CROSS_COMPILE := arm-linux-
CC := $(CROSS_COMPILE)gcc
CPP := $(CROSS_COMPILE)gcc -E
AS := $(CROSS_COMPILE)as
LD := $(CROSS_COMPILE)ld
OBJCOPY := $(CROSS_COMPILE)objcopy

all:u-boot.bin

u-boot.bin: test_elf
    $(OBJCOPY) -O binary -S $< $@

test_elf: crt0.o main.o
    $(LD) -Ttext 0x0 -o $@ crt0.o main.o

.S.s:
    $(CPP) -o $@ $<

.s.o:
    $(AS)  -o $@ $<

.c.o:
    $(CC) -c -o $@ $<

.PHONY clean:
clean:
    rm -f *.s *.o *.bin test_elf
阅读(2174) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~