ARM——点灯实验

循环点灯

  1. RCC寄存器使能GPIOE、GPIOF组寄存器
  2. 修改GPIOx组寄存器下的值
    1. 通过GPIOx_MODER寄存器设置为输出模式
    2. 通过GPIOx_OTYOER寄存器设置为推挽输出类型
    3. 通过GPIOx_OSPEEDR寄存器设置为低速输出
    4. 通过GPIOx_PUPDR寄存器设置为禁止上下拉电阻
  3. 点灯 通过GPIOx_ODR寄存器设置为高电平
  4. 灭灯 通过GPIOx_ODR寄存器设置为低电平
复制代码
.text 
.global _start
_start: 
	/**********LED1点灯**************/

@用RCC寄存器使能GPIOE、GPIOF寄存器
RCC_INIT:
	@使能GPIOE组控制器
	ldr r0,=0x50000A28
	ldr r1,[r0]
	orr r1,r1,#(0x1<<4)
	str r1,[r0]
	@使能GPIOF组控制器
	ldr r0,=0x50000A28
	ldr r1,[r0]
	orr r1,r1,#(0x1<<5)
	str r1,[r0]


LED1_INIT:
@修改GPIOE_MODER寄存器
	ldr r2,=0x50006000
	ldr r3,[r2]
	bic r3,r3,#(0x1<<21)
	orr r3,r3,#(0x1<<20)
	str r3,[r2]

	
	ldr r2,=0x50007000
	ldr r3,[r2]
	bic r3,r3,#(0x1<<21)
	orr r3,r3,#(0x1<<20)
	str r3,[r2] 
	
	ldr r2,=0x50006000
	ldr r3,[r2]
	bic r3,r3,#(0x1<<17)
	orr r3,r3,#(0x1<<16)
	str r3,[r2] 

@修改GPIOE_OTYPER寄存器
	ldr r4,=0x50006004
	ldr r5,[r4]
	bic r5,r5,#(0x1<<10)
	str r5,[r4]

	ldr r4,=0x50007004
	ldr r5,[r4]
	bic r5,r5,#(0x1<<10)
	str r5,[r4]

	ldr r4,=0x50006004
	ldr r5,[r4]
	bic r5,r5,#(0x1<<8)
	str r5,[r4]


@修改GPIOE_OSPEEDR寄存器
	ldr r6,=0x50006008
	ldr r7,[r6]
	bic r7,r7,#(0x1<<21)
	bic r7,r7,#(0x1<<20)
	str r7,[r6]

	ldr r6,=0x50007008
	ldr r7,[r6]
	bic r7,r7,#(0x1<<21)
	bic r7,r7,#(0x1<<20)
	str r7,[r6]

	ldr r6,=0x50006008
	ldr r7,[r6]
	bic r7,r7,#(0x1<<17)
	bic r7,r7,#(0x1<<16)
	str r7,[r6]


@修改GPIOE_PUPDR寄存器

	ldr r8,=0x5000600C
	ldr r9,[r8]
	bic r9,r9,#(0x1<<21)
	bic r9,r9,#(0x1<<20)
	str r9,[r8]

	ldr r8,=0x5000700C
	ldr r9,[r8]
	bic r9,r9,#(0x1<<21)
	bic r9,r9,#(0x1<<20)
	str r9,[r8]

	ldr r8,=0x5000600C
	ldr r9,[r8]
	bic r9,r9,#(0x1<<17)
	bic r9,r9,#(0x1<<16)
	str r9,[r8]


loop:
	bl LED1_ON
	bl delay_1s
	bl LED1_OFF
	bl delay_1s
	bl LED2_ON
	bl delay_1s
	bl LED2_OFF
	bl delay_1s
	bl LED3_ON
	bl delay_1s
	bl LED3_OFF
	bl delay_1s
	b loop

LED1_ON:
	ldr r10,=0x50006014
	ldr r11,[r10]
	orr r11,r11,#(0x1<<10)
	str r11,[r10]
	mov pc,lr

LED2_ON:
	ldr r10,=0x50007014
	ldr r11,[r10]
	orr r11,r11,#(0x1<<10)
	str r11,[r10]
	mov pc,lr

LED3_ON:
	ldr r10,=0x50006014
	ldr r11,[r10]
	orr r11,r11,#(0x1<<8)
	str r11,[r10]
	mov pc,lr

@ 大概1s的延时函数
delay_1s:
	mov r3, #0x10000000
	mm:
	cmp r3, #0
	subne r3, r3, #1
	bne mm
	mov pc,lr

LED1_OFF:
	ldr r10,=0x50006014
	ldr r11,[r10]
	bic r11,r11,#(0x1<<10)
	str r11,[r10]
	mov pc,lr

LED2_OFF:
	ldr r10,=0x50007014
	ldr r11,[r10]
	bic r11,r11,#(0x1<<10)
	str r11,[r10]
	mov pc,lr

LED3_OFF:
	ldr r10,=0x50006014
	ldr r11,[r10]
	bic r11,r11,#(0x1<<8)
	str r11,[r10]
	mov pc,lr


.end

效果图

思维导图

相关推荐
小呆瓜历险记10 小时前
ARM架构
linux·arm开发·架构·异常
南玖yy18 小时前
x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力
开发语言·汇编·arm开发·边缘计算
s1ckrain1 天前
ARM笔记-ARM伪指令及编程基础
arm开发·嵌入式
szxinmai主板定制专家2 天前
基于RK3576+FPGA+CODESYS工控板的运动控制模块方案
大数据·arm开发·人工智能·fpga开发
2401_859049082 天前
Git使用
arm开发·git·stm32·单片机·mcu·算法
s1ckrain2 天前
ARM笔记-ARM处理器及系统结构
arm开发·嵌入式
s1ckrain2 天前
ARM笔记-嵌入式系统基础
arm开发·嵌入式
MaoXian_n2 天前
[ARM][汇编] 02.ARM 汇编常用简单指令
arm开发·驱动开发·单片机·嵌入式硬件
让子弹飞023 天前
Keil软件中STM32(ARM)与C51兼容方法
arm开发·stm32·嵌入式硬件
小诸葛的博客3 天前
Flannel后端为UDP模式下,分析数据包的发送方式——tun设备(三)
arm开发