点亮指路灯led

为什么要使用LED?

(bootloader,kernel)开发初期,由于串口等硬件尚未被初始化,因此调试手段相当有限,这时通常会采用LED来做为程序调试的重要手段。

LED驱动设计:

1、设置GPIO控制寄存器,把引脚设置为输出功能

2、根据原理图设置GPIO数据寄存器,点亮LED

.text
.global _start
_start:
    b reset
    ldr pc, _undefined_instruction
    ldr pc, _software_interrupt
    ldr pc, _prefetch_abort
    ldr pc, _data_abort
    ldr pc, _not_used
    ldr pc, _irq
    ldr pc, _fiq

_undefined_instruction: .word undefined_instruction
_software_interrupt:.word software_interrupt
_prefetch_abort:.word prefetch_abort
_data_abort:.word data_abort
_not_used:.word not_used
_irq:.word irq
_fiq:.word reset

undefined_instruction:
    nop
    
software_interrupt:
    nop

prefetch_abort:
    nop
    
data_abort:
    nop
    
not_used:
    nop
    
irq:
    nop
    
fiq:
    nop

reset:
    bl set_svc
    bl disable_watchdog    
    bl disable_interrupt
    bl disable_mmu
    bl light_led
        
set_svc:
    mrs r0, cpsr
    bic r0, r0, #0x1f
    orr r0, r0, #0xd3
    msr cpsr, r0
    mov pc, lr

#define pwTCON 0x53000000
disable_watchdog:
    ldr r0, =pwTCON
    mov r1, #0x0
    str r1, [r0]
    mov pc, lr

disable_interrupt:
    mvn r1, #0x0
    ldr r0, =0x4a000008
    str r1,[r0]
    mov pc, lr    

disable_mmu:
    mcr p15,0,r0,c7,c7,0
    mrc p15,0,r0,c1,c0,0
    bic r0,r0,#0x00000007
    mcr p15,0,r0,c1,c0,0
    mov pc, lr

#define GPBCON 0x56000010
#define GPBDAT 0x56000014
light_led:
    ldr r0, =GPBCON
    ldr r1, =0x15400
    str r1,[r0]
    
    ldr r0, =GPBDAT
    ldr r1, =0x6bf
    str r1, [r0]
    mov pc, lr

黄色部分就是点亮LED的程序,我之前学51、K60、stm32的时候,发现这些设置寄存器是惊人的相似,都是先选择模式,在选择怎么输出。

6410的LED就是这样,但是如果把这个代码下载到开发板里面去,发现不行,这是因为我之前有一篇博客讲的是bootloader架构设计中讲到

#define GPBCON 0x7f008800
#define GPBDAT 0x7f008808
light_led:
    ldr r0, =GPBCON
    ldr r1, =0x11110000
    str r1,[r0]
    
    ldr r0, =GPBDAT
    ldr r1, =0xa0
    str r1, [r0]
    mov pc, lr

6410还需要外设基地址初始化,CP15寄存器里面有管理外设基地址的寄存器。

外设基地址是0x70000000,这个在6410手册里面搜索70000000就行

对于210开发板,还需要一个加头程序,程序链接:https://pan.baidu.com/s/1gfVTFgf 密码:44ry 用的话就在Linux下执行这个程序   ./mkv210  gboot  goot-210

这样就生成了含有加头代码的gboot 

原文地址:https://www.cnblogs.com/sanshijvshi/p/8343861.html