嵌入式Linux学习入门:控制LED灯

Posted 小健V5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式Linux学习入门:控制LED灯相关的知识,希望对你有一定的参考价值。

记录自己linux学习过程,让自己能够一直坚持下去

 

1、原理图分析:

     

nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭,

 

 

S3C2440芯片GPF4-GPF6对应nLED_1, nLED_2, nLED_4,

所以代码里面操作GPF4-GPF6就可以控制LED灯亮灭。

2、写代码前了解事项

     

       第一步:将GPF0-GPF4配置为输出功能  

       第二步:控制GPF0-GPF4输出低电平

3、编写代码

 1 .text
 2 .global _start
 3 _start:
 4             ldr     r0, =0x53000000     @ WATCHDOG寄存器地址
 5             mov     r1, #0x0                     
 6             str       r1, [r0]            @ 写入0,禁止WATCHDOG,否则CPU会不断重启
 7             
 8             ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
 9                                         @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
10             bl      main                @ 调用C程序中的main函数
11 halt_loop:
12             b       halt_loop

     参考韦东山视频模仿写的汇编部分,主要是为调用C语言程序,准备条件

 1 #define    GPFCON        (*(volatile unsigned long *)0x56000050)
 2 #define    GPFDAT        (*(volatile unsigned long *)0x56000054)
 3 
 4 
 5 int main(void)
 6 {
 7     unsigned long i = 0;
 8 
 9     GPFCON = 0x00001500;    //将GPF4 GPF5 GPF6设置为输出
10 
11     while(1)
12     {
13 
14         GPFDAT = 0x00000060;      //控制GPF4输出低电平,LED1亮
15         for(i=0; i<30000; i++);   //延时
16 
17         GPFDAT = 0x00000050;      //控制GPF5输出低电平,LED2亮
18         for(i=0; i<30000; i++); 
19 
20         GPFDAT = 0x00000030;      //控制GPF6输出低电平,LED4亮
21         for(i=0; i<30000; i++);
22     }
23     
24     return 0;
25 }

4、编译代码,烧录执行

在linux环境下使用GCC编译,同样跟着视频学习写了Makefile

led_test:main.c start.S 
  arm-linux-gcc -c start.S -o start.o
  arm-linux-gcc -c main.c -o main.o
  arm-linux-ld -Ttext 0x0000000 start.o main.o -o LED_TEST_ELF
  arm-linux-objcopy -O binary -S LED_TEST_ELF led_test.bin
  arm-linux-objdump -D -m arm LED_TEST_ELF > LED_TEST.dis
clean:
  rm -f *.o led_test.bin LED_TEST_ELF LED_TEST.dis

 

将生成的led_test.bin烧录到板子中,观察现象,按照预期流水灯走起来了!

 

     

 

以上是关于嵌入式Linux学习入门:控制LED灯的主要内容,如果未能解决你的问题,请参考以下文章

基于TINY4412的Andorid开发-------简单的LED灯控制

一叶知秋,一个 LED 就能入门 Linux 内核

嵌入式linux——点亮led灯

嵌入式开发学习之--点亮LED灯(下)

嵌入式STM32F1学习-驱动led灯(寄存器版本)

在 S5PV210 的 开发板上 点亮 一个 LED 灯