【TINY4412】U-BOOT移植笔记:(3)点灯

【TINY4412】U-BOOT移植笔记:(3)点灯

宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64
目标板[底板]: Tiny4412SDK - 1506
目标板[核心板]: Tiny4412 - 1412
U-BOOT版本: 2017.03
交叉编译器: gcc-arm-none-eabi-5_4-2016q3
日期: 2017-4-22 08:01:27
作者: SY

点灯

  • 在没有JLINK和串口等其他调试手段时,使用板载LED可以观察程序的执行流程。是一种最简单的调试手段!

  • 核心板上有4个LED可以使用,不过居然都是绿色,差评!
    1
    2

[email protected]:/opt/u-boot-2017.03# git diff ../temp/u-boot-2017.03/
arch/arm/cpu/armv7/start.S arch/arm/cSpu/armv7/start.S
diff --git a/../temp/u-boot-2017.03/arch/arm/cpu/armv7/start.S 
b/arch/arm/cpu/armv7/start.S
index 7eee54b..1165148 100644
--- a/../temp/u-boot-2017.03/arch/arm/cpu/armv7/start.S
+++ b/arch/arm/cpu/armv7/start.S
@@ -49,6 +49,8 @@ save_boot_params_ret:
beq     switch_to_hypervisor
switch_to_hypervisor_ret:
#endif
+
+       
/*
* disable interrupts (FIQ and IRQ), also set the cpu to SVC32 mode,
* except if in HYP mode already
@@ -61,6 +63,10 @@ switch_to_hypervisor_ret:
orr     r0, r0, #0xc0           @ disable FIQ and IRQ
msr     cpsr,r0

+       bl led_config
+       bl led_off_all
+       bl led_on_1
+
/*
* Setup vector:
* (OMAP4 spl TEXT_BASE is not 32 byte aligned.
@@ -87,6 +93,7 @@ switch_to_hypervisor_ret:

bl      _main

+
/*------------------------------------------------------------------------------*/

ENTRY(c_runtime_cpu_setup)
@@ -293,3 +300,77 @@ ENTRY(cpu_init_crit)
b       lowlevel_init           @ go setup pll,mux,memory
ENDPROC(cpu_init_crit)
#endif
+
+       .globl led_config
+led_config:
+       ldr r0, =0x110002E0     @ GPM4CON地址
+       ldr r1, [r0]                    
+       bic r1, r1, #0xFF00             @ 清除高8位
+       bic r1, r1, #0x00FF             @ 清除低8位
+       orr r1, r1, #0x1100             @ 配置高8位位输出模式
+       orr r1, r1, #0x0011             @ 配置低8位为输出模式 
+       str r1, [r0]    
+       
+       bx lr
+
+       .globl led_off_all
+led_off_all:
+       ldr r0, =0x110002E4             @ GMP4DAT地址
+       ldr r1, [r0]
+       orr r1, r1, #0x0F
+       str r1, [r0]
+
+       bx lr
+               
+       .globl led_on_1
+led_on_1:
+       ldr r0, =0x110002E4             @ GMP4DAT地址
+       ldr r1, [r0]
+       bic r1, r1, #0x01
+       str r1, [r0]
+
+       bx lr                                   @ 函数返回
+
+       .globl led_on_2
+led_on_2:
+       ldr r0, =0x110002E4             @ GMP4DAT地址
+       ldr r1, [r0]
+       bic r1, r1, #0x02
+       str r1, [r0]
+
+       bx lr                                   @ 函数返回
+
+       .globl led_on_3
+led_on_3:
+       ldr r0, =0x110002E4             @ GMP4DAT地址
+       ldr r1, [r0]
+       bic r1, r1, #0x04
+       str r1, [r0]
+
+       bx lr                                   @ 函数返回
+
+       .globl led_on_4
+led_on_4:
+       ldr r0, =0x110002E4             @ GMP4DAT地址
+       ldr r1, [r0]
+       bic r1, r1, #0x08
+       str r1, [r0]
+
+       bx lr                                   @ 函数返回
+
+       .globl bsp_delay
+bsp_delay:
+       ldr r0, =0x8FFFFF
+
+loop:
+       sub r0, r0, #0x01
+       cmp r0, #0x00
+       bne loop 
+       
+       bx lr
+
+
+               
+
+
+
(END)

这里需要一点汇编的基础知识,顺便学一点常用的ARM汇编操作符。

版权声明:本文为sinat_20006769原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_20006769/article/details/79046218