1.6.点亮led

构成:

  1. Makefile
  2. Write2sd
  3. Mkv210_image.c
  4. start.S
  1. Makefile(常用情况:编译和链接分开)

编译器:gcc

链接器:ld

$@ $<自动变量

led.bin: start.o

arm-linux-ld -Ttext 0x0(链接地址) -o led.elf(可执行程序) $^

arm-linux-objcopy(制作镜像) -O binary led.elf led.bin

arm-linux-objdump(反汇编) -D led.elf > led_elf.dis

gcc mkv210_image.c -o mkx210

./mkx210 led.bin 210.bin

%.o : %.S -c编译不链接 -o指定名字

arm-linux-gcc -o $@ $< -c

%.o : %.c 编译

arm-linux-gcc -o $@ $< -c

clean:

rm *.o *.elf *.bin *.dis mkx210 -f

 

2.write2sd:作用:dd命令将210.bin写入sd卡

#!/bin/sh

sudo dd iflag=dsync oflag=dsync if=210.bin of=/dev/sdb seek=1

3.Mkv210_image.c:制作sd卡启动镜像

4.start.S

/**************************

点亮led

  1. 了解led物理特性
  2. 查看数据手册及相应寄存器
  3. GPIO CON控制寄存器:模式,输入输出等

DAT数据寄存器:引脚状态(高低电平)

PUD:控制引脚内部弱上拉或下拉(输入时可能用)

DRV:配置GPIO引脚驱动能力 电流大小

CONPDN:低功耗模式下的xx

PUDPDN:低功耗模式下的xx

**************************/

_start:

//把寄存器定义出来,操作寄存器

ldr r0, = 0x11111111 //arm =看出ldr伪指令

ldr r1, =0xe0200240

str r0, [r1] //寄存器间接寻址r0放至r1的地址

 

ldr r0, = 0x0

ldr r1, =0xe0200244

str r0, [r1]

flag:

b flag //死循环

/***********复杂的led**************************/

#define GPJ0CON 0xE0200240

#define GPJ0DAT 0xE0200244

//定义寄存器宏

.global _start

_start:

 

ldr r0, =0x11111111

ldr r1, =GPJ0CON

str r0, [r1]

//写GPIO控制寄存器

flash:

 

ldr r0, =~(1<<3)

ldr r1, =GPJ0DAT

str r0, [r1]

//写GPIO数据寄存器

bl delay

//延时

 

ldr r0, =~(1<<4)

ldr r1, =GPJ0DAT

str r0, [r1]

bl delay

 

ldr r0, =~(1<<5)

ldr r1, =GPJ0DAT

str r0, [r1]

bl delay

 

b flash

//跳到flash循环闪烁

 

delay: //延时函数

ldr r2, =9000000

ldr r3, =0x0

delay_loop:

sub r2, r2, #1 //相当于r2--

cmp r2, r3 //判断是否相等 如果不等会自动设置标志位

bne delay_loop //不等 继续循环

mov pc, lr //返回连接寄存器加载到pc指针 用来返回

 

 

 

自己写代码过程

  1. 汇编需要知道的

ldr伪指令 将立即数写进寄存器

str寄存器间接寻址

b 常用于不返回的跳转,比如跳到某个标号处

bl用于子程序跳转(要返回,返回地地存于LR)

Mov将lr地址放入pc 返回程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hehelot

感谢您的打赏!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值