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

效果图

思维导图

相关推荐
询问QQ:48773927820 小时前
基于MATLAB的时变滑膜仿真技术研究:非线性控制的角速度跟踪与误差分析
arm开发
切糕师学AI1 天前
ARM 架构中的 R15 程序计数器(PC)
arm开发·嵌入式·pc·程序计数器·寄存器
piaoroumi2 天前
AM62X内核裁剪
arm开发
切糕师学AI2 天前
ARM 架构中,R14链接寄存器(LR)是什么?
arm开发·寄存器·link register
切糕师学AI2 天前
ARM多核系统数据一致性深度解析:从硬件协议到软件实践
arm开发·多核·缓存一致性
猫猫的小茶馆2 天前
【ARM】内核移植(编译)
linux·arm开发·stm32·单片机·嵌入式硬件·mcu·pcb工艺
fruge2 天前
SIMD 编程实践:在 openEuler 上 x86 AVX 与 ARM Neon 性能探索
arm开发
智算菩萨2 天前
深度剖析U盘启动WINPE技术体系:从底层原理到企业级应用实践
arm开发·系统安全·系统维护
szxinmai主板定制专家2 天前
JETSON orin+FPGA+GMSL+AI协作机器人视觉感知
网络·arm开发·人工智能·嵌入式硬件·fpga开发·机器人
无奈笑天下2 天前
银河麒麟高级服务器版本【更换bond绑定的网卡】操作方法
linux·运维·服务器·arm开发·经验分享