您的位置:首页 > 其它

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

2016-06-24 17:37 746 查看
用于测试前面所写的代码的正确性

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


菜鸟一枚,如有错误,多多指教。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: