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

效果图

思维导图

相关推荐
女神下凡19 小时前
芯参谋(69):LED恒流驱动芯片电路设计指南
arm开发·人工智能·单片机·嵌入式硬件·设计规范
工控存储研习21 小时前
瑞芯微平台存储系统设计:DDR、eMMC、SPI NOR、SPI NAND怎么配才合理
arm开发
szxinmai主板定制专家1 天前
ARM 还是 x86?CODESYS 数控机床控制器选型、FPGA 取舍与实时性真相
arm开发·人工智能·fpga开发·zynq·1024程序员节·codesys
工控存储研习1 天前
eMMC分区方案设计:Boot分区、系统分区、数据分区怎么分才合理
arm开发
女神下凡1 天前
芯参谋(68):ADC模数转换器电路设计指南
arm开发·单片机·嵌入式硬件·硬件工程·设计规范
chu_bingzhi2 天前
ARM异常处理
arm开发
武汉万象奥科2 天前
T153芯片解析:ARM+RISC-V异构架构,集成三路千兆网
arm开发·嵌入式硬件·物联网·arm核心板
黑马水牛2 天前
RK3588系列:01-系统烧录与开发环境搭建
arm开发·嵌入式硬件
像枫一样3 天前
STM32串口轮询收发实战教程
arm开发·c++·stm32·单片机·嵌入式硬件·fpga开发·51单片机
晚枫歌F3 天前
dpdk实现kni
arm开发