ARM---day02

汇编点灯


.text 
.global _start
_start:@1.设置GPIOE寄存器的时钟使能  RCC_MP_AHB4ENSETR[5:4]->1     0x50000a28
LDR R0,=0X50000A28
LDR R1,[R0]  @从r0为起始地址的4 5字节数据取出放在R1
ORR R1,R1,#(0x3<<4)  @第4 5位设置为1
STR R1,[R0]  @写回@2.设置PE10管脚为输出模式  GPIOE_MODER[21:20]->01   0x50006000
LDR R0,=0x50006000
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)   @[21:20]清0
BIC R1,R1,#(0x3<<16)   @[17:16]清0
ORR R1,R1,#(0x1<<20) 
ORR R1,R1,#(0x1<<16)
STR R1,[R0] @设置PF10管脚为输出模式
LDR R0,=0x50007000
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)   @[21:20]清0
ORR R1,R1,#(0x1<<20) 
STR R1,[R0]@3.设置PE8、PE10管脚为推挽输出  GPIOE_OTYPER[10,8]->0 0   0X50006004
LDR R0,=0X50006004
LDR R1,[R0]
BIC R1,R1,#(0x1<<8)
BIC R1,R1,#(0x1<<10)
STR R1,[R0] @设置PF10管脚为推挽输出  GPIOE_OTYPER[10]->0   0X50007004
LDR R0,=0X50007004
LDR R1,[R0]
BIC R1,R1,#(0x1<<10)
STR R1,[R0] @4.设置PE10 PE8管脚为低速输出   GPIOE_OSPEEDR[21:20,17:16]->00,00  0X50006008
LDR R0,=0x50006008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21:20]清0
BIC R1,R1,#(0x3<<16)
STR R1,[R0] @设置PF10管脚为低速输出   GPIOF_OSPEEDR[21:20]->00  0X50007008
LDR R0,=0x50007008
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21:20]清0
STR R1,[R0] @5.设置PE10 PE8管脚输出时没有上拉下拉电阻  GPIOE_PUPDR[21:20,17:16]->00,00  0X5000600C
LDR R0,=0x5000600c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
BIC R1,R1,#(0x3<<16)
STR R1,[R0] @设置PF10管脚输出时没有上拉下拉电阻  GPIOE_PUPDR[21:20]->00  0X5000700C
LDR R0,=0x5000700c
LDR R1,[R0]
BIC R1,R1,#(0x3<<20)@[21L20]清0
STR R1,[R0] @6. PE10 PE8 PF10交替输出高低电平      
@GPIOE_ODR[10,8]->1(高电平)  0(低电平)    0X50006014
@GPIOF_ODR[10]->1  0    0x50007014
@LED1亮灭交替
loop:@亮LDR R0,=0X50006014LDR R1,[R0]ORR R1,R1,#(0x1<<10)STR R1,[R0]BL delay@灭LDR R0,=0X50006014LDR R1,[R0]BIC R1,R1,#(0x1<<10)STR R1,[R0]LDR R0,=0X50007014LDR R1,[R0]ORR R1,R1,#(0x1<<10)    STR R1,[R0]BL delayLDR R0,=0X50007014LDR R1,[R0]BIC R1,R1,#(0x1<<10)STR R1,[R0]LDR R0,=0X50006014LDR R1,[R0]ORR R1,R1,#(0x1<<8)    STR R1,[R0]BL delayLDR R0,=0X50006014LDR R1,[R0]BIC R1,R1,#(0x1<<8)STR R1,[R0]b loop@封装延时函数delay:LDR R4,=0X10000000
mm:cmp r4,#0subne r4,r4,#1bne mmmov pc,lr  @程序返回
.end

C语言点灯

GPIO.h

#ifndef __GPIO_H__
#define __GPIO_H__#define RCC_BAS ((volatile unsigned int*)0x50000000)
#define GPIOE_BAS ((volatile unsigned int*)0x50006000)typedef struct gpio_t
{volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigned int OSPEEDR;volatile unsigned int PUPDR;volatile unsigned int IDR;volatile unsigned int ODR;
}gpio_t;typedef enum gpio_states_t
{GPIO_RESET,GPIO_SET	
}gpio_states_t;#define GPIOE (gpio_t*)0x50006000
#define RCC_MP_AHB4ENSETR (*(volatile unsigned int*)0x50000A28)
void hal_gpio_init(gpio_t *gpio,unsigned int pin);
void hal_gpio_write(gpio_t *gpio,unsigned int pin, gpio_states_t state);
gpio_states_t hal_gpio_read(gpio_t *gpio, unsigned int pin);
#endif //__GPIO_H__

GPIO.c

#include "gpio.h"// gpio初始化函数 
// 函数的参数: 
// 		gpio : 那组的GPIO引脚
// 		pin : 哪个引脚
void hal_gpio_init(struct gpio_t *gpio,unsigned int pin)
{// 1. 设置 GPIO引脚为输出模式 gpio->MODER &= (~(0x3 << (pin * 2)));gpio->MODER |= (0x1 << (pin * 2));// 2. 设置 GPIO引脚为推挽输出gpio->OTYPER &= ~(1<<pin);// 3. 设置 GPIO引脚为低速模式 gpio->OSPEEDR &= (~(3<<(pin*2)));gpio->OSPEEDR |= (1<<(pin*2));// 4. 设置 GPIO引脚禁止上拉和下拉gpio->PUPDR &= (~(3<<(pin*2)));
}// 函数功能:gpio引脚输出高低电平
// 函数的参数:
// 		gpio : 那组的GPIO引脚
// 		pin : 哪个引脚
// 		state : 引脚的状态
// 函数返回值:无
void hal_gpio_write(struct gpio_t *gpio, unsigned int pin, gpio_states_t state)
{// 5. 设置GPIO引脚输出高低电瓶if(state != GPIO_RESET){gpio->ODR |= state<<pin;	}else{gpio->ODR &= state<<pin;}
}// 函数功能:gpio 引脚输出的状态
// 函数的参数: 
// 		gpio : 那组的GPIO引脚
// 		pin : 哪个引脚
// 函数的返回值: 
// 		引脚的输入状态
gpio_states_t hal_gpio_read(gpio_t *gpio, unsigned int pin)
{return GPIO_RESET;
}

main.c

#include "gpio.h"
void delay(unsigned int a)
{while(a--);
}
int main()
{RCC_MP_AHB4ENSETR |= 1<<4;hal_gpio_init(GPIOE,10);while(1){hal_gpio_write(GPIOE,10,GPIO_SET);delay(1000000);hal_gpio_write(GPIOE,10,GPIO_RESET);delay(1000000);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶学习笔记(二)——Apollo入门

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《2023星火培训【感知专项营】》免费课程—>传送门 文章目录 前言 Ubuntu Linux文件系统 Linux指令…

Apache Tomcat安装、运行

介绍 Apache Tomcat是下面多个规范的一个开源实现&#xff1a;Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication。这些规范是 Jakarta EE 平台的一部分。 Jakarta EE 平台是Java EE平…

Springboot项目log4j与logback的Jar包冲突问题

异常信息关键词&#xff1a; SLF4J: Class path contains multiple SLF4J bindings. ERROR in ch.qos.logback.core.joran.spi.Interpreter24:14 - no applicable action for [properties], current ElementPath is [[configuration][properties]] 详细异常信息&#xff1a…

C/C++ 进程间通信system V IPC对象超详细讲解(系统性学习day9)

目录 前言 一、system V IPC对象图解 1.流程图解&#xff1a; ​编辑 2.查看linux内核中的ipc对象&#xff1a; 二、消息队列 1.消息队列的原理 2.消息队列相关的API 2.1 获取或创建消息队列&#xff08;msgget&#xff09; 实例代码如下&#xff1a; 2.2 发送消息到消…

c++视觉图像线性混合

图像线性混合 使用 cv::addWeighted() 函数对两幅图像进行线性混合。alpha 和 beta 是两幅图像的权重&#xff0c;它们之和应该等于1。gamma 是一个可选的增益&#xff0c;这里设置为0。 你可以通过调整 alpha 的值来改变混合比例。如果 alpha0.5&#xff0c;则两幅图像等权重…

最短路径专题8 交通枢纽 (Floyd求最短路 )

题目&#xff1a; 样例&#xff1a; 输入 4 5 2 0 1 1 0 2 5 0 3 3 1 2 2 2 3 4 0 2 输出 0 7 思路&#xff1a; 由题意&#xff0c;绘制了该城市的地图之后&#xff0c;由给出的 k 个编号作为起点&#xff0c;求该点到各个点之间的最短距离之和最小的点是哪个&#xff0c;并…

C语言学生成绩录入系统

一、系统概述 该系统是一个由链表创建主菜单的框架&#xff0c;旨在快速创建学生成绩录入系统的主菜单结构。其主要任务包括&#xff1a; 实现链表的创建、插入和遍历功能&#xff0c;用于存储和展示学生成绩录入系统各个模块的菜单项。 2. 提供用户友好的主菜单界面&#xf…

Redis的五种常用数据类型

1.字符串 String的数据结构是简单的Key-Value模型&#xff0c;Value可以是字符串&#xff0c;也可以是数字。 String是Redis最基本的类型&#xff0c;是二进制安全的&#xff0c;意味着Redis的string可以包含任何数据&#xff0c;比如jpg图片。 一个redis中字符串value最大是…

AT9110H-单通道低压 H桥电机驱动芯片

AT9110H能够驱动一个直流有刷电机或其它诸如螺线管的器件。输出驱动模块由PMOSNMOS功率管构成的H桥组成&#xff0c;以驱动电机绕组。AT9110H能够提供高达12V1A的驱动输出。 AT9110H是SOP8封装&#xff0c;且是无铅产品&#xff0c;符合环保标准。 AT9110H具有一个PWM (IN1/IN2…

视频下载plus+:一款强大的视频下载小程序

引言 在当下&#xff0c;随着视频号的火爆和用户数量的不断增加&#xff0c;视频下载已经成为了众多用户追求的目标。尽管市面上有很多视频下载助手&#xff0c;但是很多人对于如何下载视频还是摸不着头脑。今天我将向大家推荐一款我自己使用并且非常好用的视频下载小程序——…

SpringBoot-黑马程序员-学习笔记(一)

8.pom文件中的parent 我们使用普通maven项目导入依赖时&#xff0c;通常需要在导入依赖的时候指定版本号&#xff0c;而springboot项目不需要指定版本号&#xff0c;会根据当前springboot的版本来下载对应的最稳定的依赖版本。 点开pom文件会看到这个&#xff1a; 继承了一个…

arm-三盏灯流水

.text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R0,0x50000A28 LDR R1,[R0] ORR R1,R1,#(0x3<<4) 第四位第五位都设置为1 STR R1,[R0] 写回2.设置PE10管脚为输出模式 GPIOE_MODER[21:20]->01 0x5000…

[Go版]设计模式——Template模版方法模式

目录 模板方法&#xff08;Template Method&#xff09;模式的说明核心思想设计优点 Go语言实现该模式的示例代码 模板方法&#xff08;Template Method&#xff09;模式的说明 核心思想 定义一个算法的骨架&#xff0c;将一些步骤的实现延迟到子类。 设计优点 将通用的模版…

扭线机控制

扭线机属于线缆加工设备&#xff0c;线缆加工设备种类非常多。有用于网线绞合的单绞&#xff0c;双绞机等&#xff0c;有关单绞机相关算法介绍&#xff0c;大家可以查看专栏相关文章&#xff0c;有详细介绍&#xff0c;常用链接如下&#xff1a; 线缆行业单绞机控制算法&#…

【软考】9.1 顺序表/链表/栈和队列

《线性结构》 顺序存储和链表存储 每个元素最多只有一个出度和一个入度&#xff0c;表现为一条线状链表存储结构&#xff1a;每个节点有两个域&#xff0c;即数据&#xff0c;指针域&#xff08;指向下一个逻辑上相邻的节点&#xff09; 时间复杂度&#xff1a;与其数量级成正…

ARM硬件断点

hw_breakpoint 是由处理器提供专门断点寄存器来保存一个地址&#xff0c;是需要处理器支持的。处理器在执行过程中会不断去匹配&#xff0c;当匹配上后则会产生中断。 内核自带了硬件断点的样例linux-3.16\samples\hw_breakpoint\data_breakpoint.c static void sample_hbp_h…

【Docker】简易版harbor部署

文章目录 依赖于docker-compose下载添加执行权限测试 安装harbor下载解压修改配置文件部署配置开机自启动登录验证 使用harbor登录打标签上传下载 常见问题 依赖于docker-compose 下载 curl -L “https://github.com/docker/compose/releases/download/2.22.0/docker-compose-…

基于SVM+TensorFlow+Django的酒店评论打分智能推荐系统——机器学习算法应用(含python工程源码)+数据集+模型(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型训练及保存3. 模型应用 系统测试1. 训练准确率2. 测试效果3. 模型应用 相关其它博客工程源代码下载其它资料下载 前言 本项目以支持向量机&#xff08;SVM&#xff09;技术为核心&#xff0c;…

C语言 - 数组

目录 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 数组作为函数参数 4.1…

【Vue面试题十一】、Vue组件之间的通信方式都有哪些?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;Vue组件之间的通信方式都…