LED闪烁(汇编)

该汇编程序是基于S5P6818X芯片(cortex-A53)的一个简单汇编程序,实现LED闪烁功能
其他芯片也可参考该汇编逻辑

	.text
	.global _start
_start:
	@ 1. 设置GPIOA28引脚为GPIO功能
	@ GPIOAALTFN1[25:24] = 0b00
	@ 0xC001A024 为GPIOAALTFN1寄存器的地址

	ldr r0, =0xC001A024 		@在寄存器r0中存入GPIO控制寄存器GPIOAALTFN1的地址
	ldr r1, [r0]				@加载GPIO控制寄存器GPIOAALTFN1的数据到r1
	bic r1, r1, #(0x3 << 24) 	@清除24  25 两个位的数据
	str r1, [r0]				@更新GPIOAALTFN1寄存器

	@ 2. 设置GPIOA28引脚模式(0:输入 1:输出) 
	@ GPIOAOUTENB[28] = 0b1 
	@ 0xC001A004 为GPIOAALTFN1寄存器的地址

	ldr r0, =0xC001A004			@在寄存器r0中存入GPIO控制寄存器GPIOAOUTENB的地址
	ldr r1, [r0]				@加载GPIO控制寄存器GPIOAOUTENB的数据到r1
	orr r1, #(0x1 << 28)		@将28位置1 设置为OUTPUT模式
	str r1, [r0]				@更新GPIOAALTFN1寄存器

@循环
loop:
	bl red_on       @ 点亮RED灯
	bl delay1s      @ 延时1s
	bl red_off      @ 熄灭RED灯
	bl delay1s      @ 延时1s
	b loop

@ 点亮RED灯
red_on:
	@ 设置GPIOA28引脚输出高电平
	@ GPIOAOUT[28] = 0b0
	@ 0xC001A000 为GPIOAOUT寄存器的地址
	ldr r0, =0xC001A000			@在寄存器r0中存入GPIO控制寄存器GPIOAOUT的地址
	ldr r1, [r0]				@加载GPIO控制寄存器GPIOAOUT的数据到r1
	orr r1, #(0x1 << 28)		@将28位置1
	str r1, [r0]				@更新GPIOAOUT寄存器
	mov pc, lr 					@跳回主循环

@ 熄灭RED灯
red_off:
	@ 设置GPIOA28引脚输出低电平
	@ GPIOAOUT[28] = 0b0
	@ 0xC001A000 为GPIOAOUT寄存器的地址
	ldr r0, =0xC001A000			@在寄存器r0中存入GPIO控制寄存器GPIOAOUT的地址
	ldr r1, [r0]				@加载GPIO控制寄存器GPIOAOUT的数据到r1
	bic r1, #(0x1 << 28)		@将28位清理零
	str r1, [r0]				@更新GPIOAOUT寄存器
	mov pc, lr 					@跳回主循环

@ 1s的延时函数
delay1s:
	ldr r3, =0x10000000		@设置计数次数
	mm:
	cmp r3, #0 				@r3 与 0比较 看是否计数到零
	subne r3, r3, #1 		@r3 - 1
	bne mm					@跳转到对比
	mov pc, lr 				@计数结束跳转到主循环

	.end
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值