FS4412-点亮LED

嵌入式Linux开发入门,通过汇编语言点亮FS4412上的LED小灯

LED实验步骤

  1. 通过电路原理图分析LED的控制逻辑
  2. 通过电路原理图查找LED和4412的链接关系
  3. 通过数据手册分析GPIO中哪些寄存器可以控制LED
  4. 通过程序去操控对应的寄存器完成对LED的控制

分析控制关系

在这里插入图片描述

因为发光二极管LED2右侧为高点平,所以当LED2左侧为低电平的时候,电路导通,LED2将会被点亮
当三极管在基集得到一个高点平,三极管才会导通,LED2左侧将接地
所以GPX2_7给高点平,LED2就会亮,给低电平,LED2就会灭

连接关系

在这里插入图片描述

连接关系主要是FS4412的底板和核心板的连接关系,在此块开发板中:
LED2: GPX2_7
LED3: GPX1_0
LED4: GPF3_4
LED5: GPF3_5

寄存器分析

GPX2CON

  1. 其地址为0x11000C40:
  2. 主要是控制引脚的输入或输出状态
  3. GPX2CON可以控制8个IO口,LED2是由GPX2_7控制的,所以我们只要设置GPX2CON[7]即可

在这里插入图片描述

GPX2DAT

  1. 其地址为0x110000C44
  2. GPX2DAT低8位有效,每1个bit控制一个端口输出电平的高低,该位置1,则输出高电平,置0,则输出低电平

在这里插入图片描述

代码实现

@ 汇编版本:

.text
_start:

MAIN:
	BL LED_CONFIG
LOOP:
	BL LED_ON
	BL DELAY
	BL LED_OFF
	BL DELAY
	B LOOP

LED_CONFIG: 				@	寄存器配置
	LDR R2, =0x11000C40 	@	GPX2CON寄存器地址
	LDR R1, =0x10000000 	@	寄存器待写入的值
	STR R1, [R2]
	MOV PC, LR 				@	返回MAIN


LED_OFF: 					@	寄存器设置数值:关闭LED
	LDR R2, =0x11000C44 	@	GPX2DAT寄存器地址
	LDR R1, =0x00000000 
	STR R1, [R2]
	MOV PC, LR


LED_ON: 					@	寄存器设置数值: 开启LED
	LDR R2, =0x11000C44 	@	GPX2DAT寄存器地址
	LDR R1, =0x00000080 
	STR R1, [R2]
	MOV PC, LR

DELAY:	@延时函数
	LDR R1, =100000000
L:
	SUB R1, R1, #1
	CMP R1, #0
	BNE L
	MOV PC, LR

STOP:
	B STOP

.end
# Makefile
TARGET = led
CROSS_COMPILE = arm-linux-gnueabihf-
CC = $(CROSS_COMPILE)gcc	# 编译器编译
LD = $(CROSS_COMPILE)ld  	# 编译器链接
OBJCOPY = $(CROSS_COMPILE)objcopy

all:
	$(CC) -c $(TARGET).s -o $(TARGET).o
	$(LD) $(TARGET).o -Ttext 0x40008000 -o $(TARGET).elf
	$(OBJCOPY) -O binary -S $(TARGET).elf $(TARGET).bin

.PHONY:
clear:
	rm $(TARGET).o $(TARGET).elf $(TARGET).bin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值