在线问答
直播中

h1654155865.6393

10年用户 301经验值
擅长:可编程逻辑 测量仪表 嵌入式技术 模拟技术 处理器/DSP 控制/MCU
私信 关注

【OK210试用体验】裸机篇 -- 点亮LED增强版

【OK210试用体验】裸机篇 -- 点亮LED增强版
      
上个帖子讲到了点亮一个LED的程序的编写全过程和烧写体验,完成这些,就算是对这块S5PV210芯片入门了,但是点亮一个LED,显然不能尽兴,我们接着这节奏,继续编写流水灯程序。因为流水灯的程序相对来说还是比较多的,所有应用 C和ASM混合编写,这也是开这个帖子来分享的原因哈。

汇编程序编写

在自己创建一个文件夹下创建一个leds_on.S文件,编写如下代码:
/* leds_on.S */
  
  .global _start
  _start :
      bl main     @jump to main function
  halt :
      b halt
C语言程序编写


在文件中创建 main.c文件并且编写代码:
  1. /* main.c */

  2. #define      GPMP0_4CON *((volatile unsigned int *) 0xE0200340)
  3. #define      GPMP0_4DAT *((volatile unsigned int *) 0xE0200344)

  4. void delay(volatile unsigned int time)
  5. {
  6.       volatile unsigned int cnt = 0xFFFF;
  7.   
  8.       while (time--)
  9.           for (; cnt; cnt--) ;
  10.   }
  11.   
  12.   int main(void)
  13.   {
  14.       int toggle = 0;
  15.       GPMP0_4CON &= ~(0XFFFF << 16);
  16.       GPMP0_4CON |= 0x1111 << 16;
  17.   
  18.       while (1)
  19.       {
  20.           GPMP0_4DAT &= ~(0XF << 4);
  21.   
  22.           if (toggle)
  23.               GPMP0_4DAT |= 1 << 4;
  24.           else
  25.               GPMP0_4DAT |= 1 << 5;

  26.           toggle != toggle;
  27.           delay(0x50000);
  28.       }
  29.   
  30.       return 0;
  31.   }


Makefile


在点亮第一个LED的时候我们所用的Makefile,在这个文件的基础上修改一下就可以这个程序上使用
  1. led.bin : led.o leds_on.o
  2.       arm-linux-ld -Ttext 0xD0020010 -o led.elf $^
  3.       arm-linux-objcopy -O binary led.elf $@
  4.       arm-linux-objdump -D led.elf > led.dis
  5.   
  6.   led.o : main.c
  7.       arm-linux-gcc -c [        DISCUZ_CODE_3        ]lt; -o $@
  8.   
  9.   leds_on.o : leds_on.S
  10.       arm-linux-gcc -c [        DISCUZ_CODE_3        ]lt; -o $@
  11.   
  12.   clean :
  13.       rm *.o *.elf *.bin *.dis

用make命令实现编译链接,生成对应的  .bin  文件。


实验现象

      将生成的bin和对应的头信息 一并烧入SD卡,然后将SD卡插入开发板上,用SD卡启动,即可观察到LED灯交替闪烁现象。

更多回帖

发帖
×
20
完善资料,
赚取积分