嵌入式学习-uboot-lesson5-点亮LED

用于测试前面所写的代码的正确性

1.LED原理图

这里写图片描述

根据上面两幅图可以得知,4个LED的寄存器分别为GPM0 GPM1 GPM2 GPM3
查看GPM对应的寄存器
这里写图片描述
GPMCON 为配置寄存器 选择该端口作为输入还是输出
GPMDAT为数据寄存器,用于存放数据

2.配置GPMCON

配置其为输出模式,即GPM0 GPM1 GPM2 GPM3都配置为0b0001
这里写图片描述

3.配置GPMDAT

需要哪个LED亮时,根据电路图,则配置其为低电平

这里写图片描述

@****************************
@name: start.S
@by  : stone
@time: 2016.6.24
@function: 点亮LED
@****************************

.text
.global _start  @将_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 fiq                   

undefined_instruction:  @处理未定义指令异常
        nop

software_interrupt:     @软中断
        nop

prefetch_abort:         @预取指令异常
        nop

data_abort:             @数据访问异常
        nop

not_used:               @空位
        nop

irq:                    @中断
        nop

fiq:                    @快速中断
        nop

reset:                          @reset
    bl set_svc              @设置为SVC模式
    bl set_peri_port        @外设基地址初始化
    bl disable_watchdog     @关闭看门狗
    bl disable_interrupt    @关闭中断
    bl disable_mmu          @关闭mmu
    bl light_led            @点亮LED

set_svc:        
    mrs r0, cpsr        @将值取出cpsr寄存器
    bic r0, r0, #0x1f   @将后5位 即M[4:0]清零 
    orr r0, r0, #0xd3   @0b10011 转化为16进制为0x13 同时为了屏蔽irq和fiq,可以将其设置为0b11010011即0xd3  
    msr cpsr, r0        @将值送回cpsr寄存器
    mov pc, lr              @返回

set_peri_port:
    ldr r0, =0x70000000     @基地址
    orr r0, r0, #0x13       @256MB
    mcr p15,0,r0,c15,c2,4   @写入cp15
    mov pc, lr

#define pwTCON 0x7E004000       @WTCON寄存器
disable_watchdog: 
        ldr r0, =pwTCON         @把地址装载到R0
        mov r1, #0x0            @置0,关闭看门狗
        str r1,[r0]     
        mov pc,lr

disable_interrupt:
        mvn r1,#0x0             @0x0 取反,给r1
        ldr r0,=0x71200014      @VIC0
        str r1,[r0]
        ldr r0,=0x71300014      @VIC1
        str r1,[r0]
        mov pc,lr

disable_mmu:
        mcr p15,0,r0,c7,c7,0    @使ICACHE 和DCACHE 无效
    mrc p15,0,r0,c1,c0,0    @read control register
    bic r0,r0,#0x00000007   @mmu 和 dcache置零
    mcr p15,0,r0,c1,c0,0    @write control register
    mov pc,lr

#define GPMCON 0x7F008820       @控制寄存器
#define GPMDAT 0x7F008824   @数据寄存器  
light_led:
        ldr r0,=GPMCON
        ldr r1,=0x1111  @输出模式
        str r1,[r0]

        ldr r0,=GPMDAT
        ldr r1,=0x00    @低电平点亮
        str r1,[r0] 
        mov pc,lr

菜鸟一枚,如有错误,多多指教。。。

嵌入式底层开发环境的搭建通常涉及两个关键部分:U-Boot(统一固件加载器)和Linux内核移植。下面是这两个步骤的基本概述: 1. **U-Boot(U-Boot Bootloader)**: U-Boot是一个开源的Bootloader,它负责引导操作系统到内存中并初始化硬件。在嵌入式开发中,它的作用是为内核提供一个启动平台。搭建过程包括: - **下载源码**:从U-Boot的GitHub仓库或官方网站获取源代码。 - **配置编译**:根据目标硬件平台(如ARM、x86等)和特定需求定制Makefile。 - **编译构建**:执行`make`命令,生成适用于目标板的可执行文件。 - **烧录到目标板**:使用如JTAG或SPI闪存工具将U-Boot加载到设备的非易失性存储中。 2. **Linux 内核移植**: Linux内核移植是指将通用的Linux内核配置为适合特定硬件平台的过程。主要步骤如下: - **下载内核源码**:从Linux内核项目的Git仓库获取最新或稳定版本的源代码。 - **配置内核**:使用`make menuconfig`或`make defconfig`选择适合目标板的选项。 - **编译内核**:选择目标架构(如arm, x86等),运行`make`生成内核和设备驱动程序。 - **内核模块和initrd**:可能还需要配置和编译必要的模块(如网络、USB等),以及生成初始ramdisk (initrd)。 - **移植启动加载**:将内核映像和引导参数传递给U-Boot,这通常涉及到修改U-Boot的启动脚本(cmd_line.txt)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值