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

效果图

思维导图

相关推荐
女神下凡3 小时前
芯参谋(38):NAND_MCP_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
剑指offer.7 小时前
ARM裸机开发-SPI
arm开发·嵌入式硬件·嵌入式·arm
sunoo-2298 小时前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习
狂奔蜗牛(bradley)10 小时前
把 EtherCAT 初始化从 FPGA 搬到 ARM:命令通道的接口设计与11个坑
arm开发·人工智能·fpga开发·架构
女神下凡1 天前
芯参谋(37):EEPROM_电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
女神下凡2 天前
芯参谋(30):EMMC eMCP 软件设计规范
arm开发·单片机·嵌入式硬件·设计规范
SKH.2 天前
ARM-uart
arm开发·单片机
AOI小白新手上路2 天前
韦东山《ARM 架构与编程》基于I.MX6ULL 3-1 硬件知识_LED 原理图 · 学习笔记
arm开发·学习·架构
一条破秋裤3 天前
TCP 缓冲区:用户空间 stdio 与内核 Socket 缓冲
arm开发·网络协议·tcp/ip
Horn Still Sounds3 天前
IMX6ULL裸机|I2C通信协议 + ADC模数转换学习笔记
arm开发·笔记·单片机·嵌入式硬件