一、hw
- hw原理图
该外设在底板上,核心板上没有
beep控制IO 为 SNVS_TAMPER1
二、sw
1、初始化SNVS_TAMPER1这个IO复用为GPIO5_IO01
2、设置SNVS_TAMPER1的电气属性
3、初始化GPIO
4、控制GPIO输出高低电平
Makefile(错把dis写成bin,惨痛)
CROSS_COMPILE ?= arm-linux-gnueabihf-
TARGET ?= beep
LD := $(CROSS_COMPILE)ld
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump
CC := $(CROSS_COMPILE)gcc
INCDIRS := imx6u \
bsp/clk \
bsp/led \
bsp/delay \
bsp/beep
SRCDIRS := project \
bsp/clk \
bsp/led \
bsp/delay \
bsp/beep
INCLUDE := $(patsubst %,-I %,$(INCDIRS))
SFILES := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.s))
CFILES := $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))
SFILENDIR := $(notdir $(SFILES))
CFILENDIR := $(notdir $(CFILES))
SOBJS := $(patsubst %,obj/%,$(SFILENDIR:.s=.o))
COBJS := $(patsubst %,obj/%,$(CFILENDIR:.c=.o))
OBJS := $(SOBJS) $(COBJS)
VPATH := $(SRCDIRS)
$(TARGET).bin:$(OBJS)
$(LD) -Timx6u.lds -o $(TARGET).elf $^
$(OBJCOPY) -O binary -S $(TARGET).elf $@ <------------一开始把 -S 忘了
$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis <------------写成.bin , gg
$(SOBJS):obj/%.o:%.s <-------------不严格要求有空格
$(CC) -Wall -nostdlib -c $(INCLUDE) -o $@ $<
$(COBJS):obj/%.o:%.c
$(CC) -Wall -nostdlib -c $(INCLUDE) -o $@ $<
.PHONY:clean
clean: <------------------冒号不能忘记
@rm -rf $(OBJS) *.bin *.imx *.dis *.elf <-------------------@表示不输出命令本身
链接脚本 imx6u.lds
点号,冒号两边加空格,
点好所在行结尾要加分号
SECTIONS{
. = 0x87800000; <-----------点号后面面一定要有空格
.text : <-----------冒号前面一定要有空格
{
obj/start.o <----------obj/要加,而且链接的是.o文件
*(.text)
}
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : {*(.data)}
__bss_start = .;
.bss ALIGN(4) : {*(.bss) *(COMMON)}
__bss_end = .;
}
start.s
global _start
.global _bss_start
_bss_start :
.word __bss_start
.global _bss_end
_bss_end :
.word __bss_end
_start:
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0x13
msr cpsr,r0
bss_loop:
stmia r0!,{r2}
cmp r0,r1
ble bss_loop
ldr sp,=0x80200000
b main
三、summary
dis翻车