歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

mini2440之首個C程序點亮LED分析

啟動文件+庫+文件

啟動文件:

硬件的初始化

1.關看門口狗(看門狗就是定時器,系統啟動時開啟的,開始計時如果3秒沒有關閉,則自動重啟系統)

2.初始化時鐘(2440一上電的為12hz,最大可以達到400hz,所以為了使其更快,就需要設置高一點)

3.初始化SDRAM

軟件初始化

4.設置棧(將棧指針指向某塊內存)

5.設置main函數的返回地址

6.調用main函數

7.清理工作

(注:mini2440中2步慢點沒關系小只是點亮燈而已,3步不用sdram用內置sram所以可以不設)

硬件初始化

  1. .text 
  2. .global _start 
  3. _start: 
  4. @硬件初始化 
  5.             ldr     r0, =0x53000000    @ 0x53000000為看門狗控制寄存器的地址 
  6.             mov     r1, #0x0                 @拉低電平,關閉看門狗計時器 ,禁止WATCHDOG,否則CPU會不斷重啟 
  7.             str     r1, [r0] 
  8. @軟件初始化                   
  9.             ldr     sp, =1024*4             @ 設置堆棧,注意:不能大於4k, 因為現在可用的內存只有4K,nand flash中的代碼在復位後會移到內部ram中,此ram只有4K 
  10.             bl      main                        @ 調用C程序中的main函數 
  11. halt_loop: 
  12.             b       halt_loop           @循環 

點亮led的c語言程序

  1. #define GPBCON      (*(volatile unsigned long *)0x56000010) 
  2. #define GPBDAT      (*(volatile unsigned long *)0x56000014) 
  3. @(*(volatile unsigned long *)0x56000010):強制轉化為unsigned long 類型的指針變量,(*(unsigned long *)0x56000010)為取得0x56000010地址下的內容 
  4. @volatile 用與標識編譯器不優化 
  5. int main() 
  6.     GPBCON = 0x00000400;    // 設置GPB5為輸出口, 位[11:10]=0b01 
  7.     GPBDAT = 0x00000000;    // GPB5輸出0,LED1點亮 
  8.     return 0; 

注設置多個led輸出引腳的模式的時候

#define GPB5_OUT (1<<(5*2))//因為設置gpb5的引腳為10和11位,10位為高電平

#define GPB6_OUT (1<<(6*2))

#define GPB7_OUT (1<<(7*2))

#define GPB8_OUT (1<<(8*2))

GPBCON=GPB5_OUT|GPB6_OUT|GPB7_OUT;//設置所有LED對應引腳為輸出模式

Copyright © Linux教程網 All Rights Reserved