嵌入式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燒錄到板子中,觀察現象,按照預期流水燈走起來了!

 

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM