第2个程序:用C语言实现点亮一盏led

  1. 一共有三个文件:head.S   led_on_c.c  Makefile

  2. head.S的内容如下:
  3.  1 /*
     2 **  时间 :2016年4月8日16:56:35
     3 **  地点 :宿舍。
     4 **  功能 :初始化一些硬件相关的东西,调用C函数。
     5 **  
     6 **  附加信息: 
     7 **  1、运行环境:JZ2440v2开发板。
     8 **  2、程序编译环境:Ubuntu9.10 + 交叉编译工具arm-linux-gcc。
     9 **  3、所用到的寄存器有:GPFCON、GPFDAT、WTCON。
    10 **  4、led1所接到的引脚是GPF4引脚。
    11 */
    12 
    13 .equ    WTCON,    0x53000000    @宏定义WTCON为0x53000000
    14 
    15 .text
    16 
    17 .global _start
    18 
    19 _start :
    20     /* 关看门狗,防止cpu不断自启。 */
    21     ldr r0, = WTCON
    22     mov r1, #0
    23     str r1, [r0]
    24 
    25     /* 调用C函数前要先设置栈。 */
    26     ldr sp, = 4096
    27 
    28     /* 调用C函数。 */
    29     bl main
    30 
    31 halt_loop :
    32     b halt_loop

     

  4. led_on_c.c内容如下:
  5.  1 /* 
     2 **    时间 :2016年4月8日17:05:23
     3 **  地点 :宿舍。
     4 **    功能 :点亮第一盏LED:led1。
     5 */
     6 
     7 #define GPFCON        *((volatile unsigned long *)0x56000050)
     8 #define GPFDAT        *((volatile unsigned long *)0x56000054)
     9 
    10 int main(void)
    11 {
    12     /* 配置GPF4引脚为输出引脚。 */
    13     GPFCON = 0x00000100;
    14 
    15     /* 让GPF4引脚输出低电平,点亮led1。 */
    16     GPFDAT = 0x00000000;
    17 
    18     while (1);
    19 
    20     return 0;
    21 }

     

  6. Makefile文件的内容如下:
  7. #
    # 时间 :2016年4月8日17:11:09
    #

    led_on_c.bin : head.S led_on_c.c
    arm-linux-gcc -Wall -g -c head.S -o head.o
    arm-linux-gcc -Wall -g -c led_on_c.c -o led_on_c.o
    arm-linux-ld -Ttext 0x00000000 -g head.o led_on_c.o -o led_on_c_elf
    arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
    arm-linux-objdump -D -m arm led_on_c_elf > led_on_c_elf.dis
    arm-linux-objdump -D -b binary -m arm led_on_c.bin > led_on_c_bin.dis

    clean :
    rm -f *.o *.dis *.bin *elf

     

 

转载于:https://www.cnblogs.com/zhouhaiyang/p/5369136.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值