s3c2440裸板程序四个led轮流灭

原创 2015年07月10日 20:13:43

   这个程序是基于s3c2440 上编写的,程序是根据韦东山老师的教程编写出来的,但是韦东山是针对6410的,所特在此记录一下学习的过程。

这个程序是通过汇编代码来编写启动代码,然后调用c语言代码来实现的。程序的编写环境式linux。


(1)首先新建一个leds3.s 文件,输入内容如下:

-------------分割线--------------------

.globl _start
_start:

/* 硬件相关的设置:*/
/* Peripheral port setup (查看s3c2440 memory map ) */
/* 基地址+size*/
/* 查看s3c2440芯片说明 和 arm926ej-s cp15*/
ldr r0, =0x50000000
orr r0,r0,#0x08
mcr p15,0,r0,c15,c2,4    @128k(0x50000000-0x5000FFFF)

/* 关看门狗      看门狗每三秒就会重启系统,所以需要把看门狗关掉 */
/* 往 WTCON(0x53000000)写0*/
ldr r0, =0x53000000
mov r1, #0
str r1, [r0]


/*设置栈

设置sp指针的指向,尽量使sp在SRAM之外,因为SRAM为4k所以这里指向4*1024

*/
ldr sp, = 4*1024   @查看SRAM
bl main          @这里调用的是C语言
halt:
    b halt

-------------分割线--------------------

(2)再新建一个led3.c 文件,输入内容如下:

-------------分割线--------------------

void delay(){
    volatile int i = 0x20000;
    while(i--);
}
/*在这里定义了leds3.s 文件所调用了的main 函数*/
int main()
{
    int i = 0x010 ;
    volatile unsigned long *gpbcon = (volatile unsigned long *) 0x56000010;     //0x56000010是GPBCON寄存器的地址
    volatile unsigned long *gpbdat = (volatile unsigned long *) 0x56000014;     //0x56000014是GPBDAT寄存器的地址
    
    /*配置四个led灯为输出*/

   /*查看TQ2440底板原理图和核心板原理图得到led1,led2,led3,led4分别连接到GPB5,GPB6,GPB7,GPB8上

  再查看s3c2440芯片手册得到配置GPB[5:8]为输出的方式*/
    *gpbcon = 0x15400 ;

    while(1){
    //i= 0000 0001 0000 。GPB5,GPB6,GPB7,GPB8都为0,GPB4为1
        *gpbdat = i ;  
        i = i<<1;
        if(i == 0x200) // 0x200 = 0010 0000 0000
            i = 0x10;
        delay();
    }
    return 0;
}

-------------分割线--------------------

(3)最后新建MakeFile,输入内容如下:

-------------分割线--------------------

led3.bin: leds3.o led3.o
    arm-linux-ld -Ttext 0 -o led3.elf leds3.o led3.o
    arm-linux-objcopy -O binary led3.elf led3.bin
    arm-linux-objdump -D led3.elf > led3.dis

leds3.o : leds3.s
    arm-linux-gcc -o leds3.o leds3.s -c
led3.o : led3.c
    arm-linux-gcc -o led3.o led3.c -c

clean:
    rm *.o led3.elf led3.bin led3.dis

 -------------分割线--------------------

最后在linux下执行make编译即可得到我要的led3.bin。

代码:http://download.csdn.net/detail/u014699958/8888597



版权声明:本文为博主原创文章,未经博主允许不得转载。

s3c2440 LED驱动分析

这个开发板已经很久没有动了,这一次辞职后想来想去还是选择去做驱动吧。以前写的那些驱动代码早就不知道哪里去了,当然更不记得了。所以现在从头开始学习,也顺便记录下笔记; 原理         首先看看...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2015年04月18日 20:36
  • 1186

S3C2440裸板程序下载

本例基于JZ2440开发板进行开发和实验。将嵌入式linux学习历程与广大网友分享,也方便自己对学习做成笔记和总结。本例使用PC机的DOS命令行,通过ope烧录器将二进制程序文件烧录到NandFlas...
  • ludaoyi88
  • ludaoyi88
  • 2017年07月04日 10:44
  • 397

刚接触开发板之烧写裸板程序

使用串口操作开发板的前提是开发板上已经有烧好的程序,因此开发板在没有烧好程序时,应先烧写程序。方法有: 1.使用并口工具烧写:接线(参考百问网JZ2440V2开发板使用手册),使用ofl...
  • To_Be_IT_1
  • To_Be_IT_1
  • 2014年07月04日 20:56
  • 1558

基于S3C2440开发板LED灯驱动移植

上一篇文章简述了如何写一个实用性较强的驱动模板,今天我们给这个模板填充一些必要的代码,让它变成一个可用的led驱动程序,实际上大多数字符类驱动也都是基于这种模板形式。 #include #i...
  • cumtgao
  • cumtgao
  • 2013年03月13日 18:16
  • 1836

中断控制LED灯亮灭

中断小结:(用独立键盘控制) #include "stm32f10x.h" #include "stm32f10x_exti.h" #include "stm32f10x_rcc.h" #inclu...
  • xiaoleiacm
  • xiaoleiacm
  • 2014年04月07日 17:44
  • 2009

从零到第一个裸板程序的过程

第一次真正意义上的接触嵌入式开发,并没有之前接触软件开发那么的顺利,过程复杂,涉及的知识广是嵌入式门槛高的部分原因。一开始接触,我不断地在找概念,现在特在此将我的一些经验记录下来,以便不时之需,也提供...
  • u014699958
  • u014699958
  • 2015年07月10日 14:47
  • 1122

LED灯的延时亮灭与循环流水

全是c语言程序,都已经用keil编译
  • u013589337
  • u013589337
  • 2014年08月02日 21:15
  • 1583

特别详细好懂的一篇文章:s3c2440 -linux-LED驱动

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。·共享资源,欢迎转载:http:/...
  • IT_114
  • IT_114
  • 2011年02月23日 22:30
  • 5691

GPIO-点亮一个LED(JZ2440-S3C2440)

GPIO-点亮LED 1、看电气原理图 GPF4--------(GPFCON[9:8]=01;  GPFDAT[4]=1) GPF4引脚输出1(高电平):LED1灯灭。 GPF4引脚输出0(低...
  • liyuqian199695
  • liyuqian199695
  • 2016年12月12日 11:30
  • 715

3.按键控制LED灯亮灭

实验现象:本实验通过一个按键来控制一个发光二极管的亮灭。按键按一下LED点亮。再按一下LED熄灭。 理论学习: 该实验主要难点:  如何扫描按键的状态?  如何防抖动?  原理讲解: 按键检测原...
  • u011727748
  • u011727748
  • 2014年02月28日 17:36
  • 2667
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:s3c2440裸板程序四个led轮流灭
举报原因:
原因补充:

(最多只允许输入30个字)