TX2440 裸跑实验-LED灯闪烁(ADS1.2编译) 进阶(一)

来源:互联网 发布:excel数据对比错误原因 编辑:程序博客网 时间:2024/05/15 08:56

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

 

原创粉丝点击