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

TX2440 裸跑實驗-LED燈閃爍(ADS1.2編譯) 進階(一)

一.實驗目的:
 
理解匯編的編程結構,了解arm匯編的子程序調用.
 
二.實驗環境:
 
TX2440平台
 
三.實驗工具:
 
ADS1.2 + AXD + JLINK調試
 
四.實驗步驟:
 
1.在ads 上建立新工程,增加源文件init.s
 
init.s源碼:
 
;我的LED程序,EastonWoo procedure
 
LED_CONFIG equ 0x56000050
 LED_SWITCH equ 0x56000054
LED_UP equ (1<<1) ;第二個燈 ,我的第1個燈壞了
 
DELAY_TIME equ 0x70010000 ;這個時間像是沒有效果,但是單步調試,燈還是會閃的.
 
 area init,code,readonly
 
  entry ;一個進程中至少有一個.
 
 start
  ldr sp,=0x33ff8000  ;程序有效開始指令地址:0x30000000,,堆棧設在內存裡面,也就是大於0x30000000,注意不要跟代碼區沖突;
      ;如果設成0x1000,是寫不進棧的,讀出來是0xFFFFFFFF.
  bl initial    ;子程序 ;在內存中的地址為0x30000004
 
 loop              ;主循環
 
 ;關燈
  ldr r0,=LED_SWITCH
  ldr r1,[r0]
  orr r1,r1,#LED_UP
  str r1,[r0]
 
  ;延時DELAY_TIME
  ldr r0,=DELAY_TIME
  bl delay_here
 
  ;開燈
  ldr r0,=LED_SWITCH
  ldr r1,[r0]
  mvn r2,#LED_UP
  and r1,r1,r2
  str r1,[r0]
 
  ;延時DELAY_TIME
  ldr r0,=DELAY_TIME
  bl delay_here
 
  b loop        ;類似於goto
 
initial
 
  ldr r0,=LED_CONFIG ;控制內容給r0
  ldr r1,[r0]
  and r1,r1,#0xffffff00 ;控制內容清低8位
  orr r1,r1,#0x55  ;控制內容低8位賦值.
  str r1,[r0]
  mov pc,lr
 
 delay_here
 
 sub r1,r1,#1
  cmp r1,#0
  bne delay_here
  mov pc,lr
 
  end

相關閱讀:http://www.linuxidc.com/search.aspx?where=nkey&keyword=21080

Copyright © Linux教程網 All Rights Reserved