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.heiqu.com/f75491681766eb332cf037ead490ab98.html