【嵌入式学习】ARM day04.11

一、思维导图

二、练习

实现三个灯闪烁

汇编代码

复制代码
.text 
.global _start
_start: 
            @使能GPIOE和F时钟
            LDR     r0,=0x50000A28
            LDR      r1,[R0]
            ORR     R1,R1,#(0X3<<4)
            STR      R1,[R0]

          @配置GPIOE和F的MODER寄存器
            LDR     r0,=0x50006000   @GPIOE
            LDR     R1,=0X50007000   @GPIOF
            LDR      R2,[R0]
            BIC       R2,R2,#(0X3<<20)
            BIC       R2,R2,#(0X3<<16)
            ORR     R2,R2,#(0X1<<20)
            ORR     R2,R2,#(0X1<<16)
            STR      R2,[R0]
            LDR      R2,[R1]
            BIC       R2,R2,#(0X3<<20)
            ORR     R2,R2,#(0X1<<20)
            STR      R2,[R1]

             @配置GPIOE和F的OTYPER寄存器
            LDR     r0,=0x50006004   @GPIOE
            LDR     R1,=0X50007004   @GPIOF
            LDR      R2,[R0]
            BIC       R2,R2,#(0X1<<10)
            BIC       R2,R2,#(0X1<<8)
            STR      R2,[R0]
            LDR      R2,[R1]
            BIC       R2,R2,#(0X1<<10)
            STR      R2,[R1]

          @配置GPIOE和F的OSPEEDR寄存器
            LDR     r0,=0x50006008   @GPIOE
            LDR     R1,=0X50007008   @GPIOF
            LDR      R2,[R0].text 
.global _start
_start: 
            @使能GPIOE和F时钟
            LDR     r0,=0x50000A28
            LDR      r1,[R0]
            ORR     R1,R1,#(0X3<<4)
            STR      R1,[R0]

          @配置GPIOE和F的MODER寄存器
            LDR     r0,=0x50006000   @GPIOE
            LDR     R1,=0X50007000   @GPIOF
            LDR      R2,[R0]
            BIC       R2,R2,#(0X3<<20)
            BIC       R2,R2,#(0X3<<16)
            ORR     R2,R2,#(0X1<<20)
            ORR     R2,R2,#(0X1<<16)
            STR      R2,[R0]
            LDR      R2,[R1]
            BIC       R2,R2,#(0X3<<20)
            ORR     R2,R2,#(0X1<<20)
            STR      R2,[R1]

             @配置GPIOE和F的OTYPER寄存器
            LDR     r0,=0x50006004   @GPIOE
            LDR     R1,=0X50007004   @GPIOF
            LDR      R2,[R0]
            BIC       R2,R2,#(0X1<<10)
            BIC       R2,R2,#(0X1<<8)
            STR      R2,[R0]
            BIC       R2,R2,#(0X3<<20)
            BIC       R2,R2,#(0X3<<16)
            STR      R2,[R0]
            LDR      R2,[R1]
            BIC       R2,R2,#(0X3<<20)
            STR      R2,[R1]


            @配置GPIOE和F的PUPDR寄存器
            LDR     r0,=0x5000600C   @GPIOE
            LDR     R1,=0X5000700C   @GPIOF
            LDR      R2,[R0]
            BIC       R2,R2,#(0X3<<20)
            BIC       R2,R2,#(0X3<<16)
            STR      R2,[R0]
            LDR      R2,[R1]
            BIC       R2,R2,#(0X3<<20)
            STR      R2,[R1]
LOOP:
           BL  LED_ON
           BL  DELAY
           BL  LED_OFF
           BL  DELAY
           B  LOOP

LED_ON:
            @GPIOE
            LDR     r0,=0x50006014
            LDR      r1,[R0]
            ORR      R1,R1,#(0X1<<10)
            ORR      R1,R1,#(0X1<<8)
            STR      R1,[R0]
            @GPIOF
            LDR     r0,=0x50007014
            LDR      r1,[R0]
            ORR      R1,R1,#(0X1<<10)
            STR      R1,[R0]
            MOV PC,LR

LED_OFF:
             @GPIOE
            LDR     R0,=0x50006014
            LDR      R1,[R0]
            BIC      R1,R1,#(0X1<<10)
            BIC      R1,R1,#(0X1<<8)
            STR      R1,[R0]
            @GPIOF
            LDR     r0,=0x50007014
            LDR      r1,[R0]
            BIC      R1,R1,#(0X1<<10)
            STR      R1,[R0]
            MOV PC,LR

DELAY:
            LDR R3,=0X10000000
MM:
            CMP R3,#0
            SUBNE R3,R3,#1
            BNE MM
            MOV PC,LR
.end

Makefile

复制代码
NAME=asm-led
CROSS_COMPILE = arm-linux-gnueabihf-

CC = $(CROSS_COMPILE)gcc

LD = $(CROSS_COMPILE)ld
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump

all:
	
	$(CC) -O0 -g -c $(NAME).S -o $(NAME).o
	
	$(LD) -Ttext=0xC0008000 $(NAME).o -o $(NAME).elf 
	 
	$(OBJCOPY) -O binary $(NAME).elf  $(NAME).bin

	$(OBJDUMP) -D $(NAME).elf > $(NAME).dis
clean:
	rm -rf *.elf *.bin *.o *.dis

install:
	
	sudo cp $(NAME).bin  /mnt/hgfs/share/
相关推荐
星火开发设计10 小时前
类型别名 typedef:让复杂类型更简洁
开发语言·c++·学习·算法·函数·知识
Gorgous—l10 小时前
数据结构算法学习:LeetCode热题100-多维动态规划篇(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)
数据结构·学习·算法
Hello_Embed11 小时前
libmodbus 移植 STM32(基础篇)
笔记·stm32·单片机·学习·modbus
●VON12 小时前
Flutter for OpenHarmony 21天训练营 Day03 总结:从学习到输出,迈出原创第一步
学习·flutter·openharmony·布局·技术
香芋Yu12 小时前
【大模型教程——第四部分:大模型应用开发】第1章:提示工程与上下文学习 (Prompt Engineering & ICL)
学习·prompt
LYS_061812 小时前
寒假学习10(HAL库1+模数电10)
学习
runningshark12 小时前
【项目】示波器学习与制作
学习
€81112 小时前
Java入门级教程24——Vert.x的学习
java·开发语言·学习·thymeleaf·数据库操作·vert.x的路由处理机制·datadex实战
自可乐13 小时前
n8n全面学习教程:从入门到精通的自动化工作流引擎实践指南
运维·人工智能·学习·自动化