【linux-汇编-点灯之思路-程序】

目录

  • 1. ARM汇编中的一些注意事项
  • 2. IMXULL汇编点灯的前序:
  • 3. IMXULL汇编点灯之确定引脚:
  • 4. IMXULL汇编点灯之引脚功能编写:
    • 4.1 第一步,开时钟
    • 4.2 第二步,定功能(MUX)
    • 4.3 第三步,定电气属性(PAD)
    • 4.4 第四步,定输出/输入

1. ARM汇编中的一些注意事项

  
在 ARM 中,MOV 指令和 LDR 指令的区别主要体现在以下几个方面:

  1. 数据传输方向:MOV 指令只能在寄存器之间移动数据,或者将立即数移动到寄存器中;而 LDR 指令可以将数据从内存中读取到寄存器中。
  2. 立即数的使用:MOV 指令对立即数的范围有要求,只能是由 8 位连续有效位通过偶数次移位能得到的数;LDR 指令的伪指令形式(如 LDR R0, =0xabcdef)则没有立即数范围的限制。
  3. 功能差异:MOV 不能用于将数据从内存移动到 CPU,而 LDR 可以。LDR 伪指令和 LDR 指令虽然名字相似,但作用不同,LDR 伪指令可以将立即数或地址值写入寄存器,而 LDR 指令用于从内存中读取数据到寄存器。

  汇编也是一种编程语言,既然是语言就是有通用的逻辑,和C语言的逻辑一样,汇编也有包括,赋值,逻辑运算,循环,跳转,以及对应硬件的部分的中断之类的,具体对用要实现什么逻辑功能,可以百度对用的逻辑指令和注意事项,多用才能记得熟练;

2. IMXULL汇编点灯的前序:

  在STM32学习过程中,对应的要把一个LED灯点亮,总体思路就是控制对应的硬件引脚的高低电平,那么对于IMXULL而言,也是同样的;
  在STM32中配置一个引脚的具体步骤如下:

  1. 开时钟
  2. 定电气属性,包括速度、模式、上下拉之类的
  3. 有没有复用,把复用功能指定好
  4. 定IO口是输出还是输入,IO口(Input/Ouput的缩写,不指定输出或者输出模式,就无法进行有效的控制)如下图:
    在这里插入图片描述

  因此对于IMXULL而言,步骤也是如此;但是在STM32中是用C语言实现的,但是IMXULL中是由汇编实现的,但是具体的内在逻辑是一致的;

3. IMXULL汇编点灯之确定引脚:

  每个芯片厂商对自己的引脚都有自己的一套命名规则,而对于NXP一个引脚命令规则有两个,因为其采用了:IOMUXC(Input-Ouput-Muxing-Control)模式,也就是一个引脚可以进行很多种复用功能
  关注两点,一个引脚有两个名称,对应两个不同的寄存器地址,分别是MUX(Muxng)配置模式和PAD(Pad)配置电器属性:

  • IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03:配置GPIO1_IO03引脚的功能,MUX配置模式,PAD配置电气属性
  • IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03:配置电气属性,与MUX是一一对应的,PAD的意思是焊盘

  IOMUXC_SW_MUX_ CTL_PAD_GPIO1_IO03:数据手册说明
在这里插入图片描述
   IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03:数据手册说明
在这里插入图片描述

4. IMXULL汇编点灯之引脚功能编写:

4.1 第一步,开时钟

  确定完引脚后,第一步就是开启时钟,这里为了简便表示可以把时钟全部打开,找到GPIO1时钟介绍的数据手册:把对应位设置为11就是开启时钟,这里为了简便,把CCR0~CCR6的时钟全部开启:
在这里插入图片描述
  具体汇编实现如下:这里不用MOV指令,是因为这些文件是烧录在SD卡上,启动后加载到RAM内存中,也就是在存储中对这些值进行访问,取到这些值后再放到寄存器中,因此取值用的是ldr

.global _start @全局标号_start:/*初始化使能所有外设时钟*/ldr r0,=0x020c4068 @CCGR0ldr r1,=0xffffffff @要向CCGR0写入的数据str r1,[r0] @将0xffffffff写入到CCGR0中ldr r0,=0x020c406c @CCGR1str r1,[r0]ldr r0,=0x020c4070 @CCGR2str r1,[r0]ldr r0,=0x020c4074 @CCGR3str r1,[r0]ldr r0,=0x020c4078 @CCGR4str r1,[r0]ldr r0,=0x020c407c @CCGR5str r1,[r0]ldr r0,=0x020c4080 @CCGR6str r1,[r0]

4.2 第二步,定功能(MUX)

  第二步就是配置GPIO1_IO3引脚的的复用模式是GPIO1功能,也就是IO口(输入和输出的功能),也就是令:IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03=0x0101=5,也就是在GPIO1_IO03对应的寄存器地址写入5的内容,具体汇编实现如下:

/*第二步 复用引脚:GPIO1_IO03  PIN的复用为GPIO 设置:IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03=5IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的地址为:0x020E0068*/ldr r0,=0x020E0068 @IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03地址ldr r1,=0x5 @要向IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03写入的数据str r1,[r0] @将0x5写入到0x020E0068对应寄存器中

4.3 第三步,定电气属性(PAD)

  第三步就是配置GPIO1_IO3引脚的电气属性,也就是配置:IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03:寄存器的电气属性,其中具体可参考数据手册,具体就是如下:

/* 第三步:配置电气属性GPIO1_1O03的电气属性:* 也就是寄存器:IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03* 寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03地址: 0x020E02F4* bit0:        0       低速率* bit5:3       110     R0/6* bit7:6       10      100MHZ* bit11:       0       关闭,开路输出* bit12:       1       使能保持* bir13:       0       keeper* bit15:14     00      100K下拉* bit16:      0       关闭hys* total:       0x10B0*/ldr r0,=0x020E02F4 @IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03ldr r1,=0x10B0 @要向IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03写入的数据str r1,[r0] @

4.4 第四步,定输出/输入

  第四步就是配置GPIO1_IO3的功能,首先对于一个GPIO而言,要想输出0或者1,那么不能凭空输出吧,因此要先对引脚赋值为1或者0,然后让这个引脚进行输出,不然单单一个输出,输出的数据是0还是1呢?所以就是先写数据,然后进行输出,总体思路就是这样,由于我们配置的模式是GPIO(General Purpose Input/Output)的模式,因此在参考手册中找到对应的GPIO的章节,这里注意GPIO和IIC或者其他的模式一样,每一个模式都有对应的寄存器介绍,只需找到对应的寄存器的介绍说明就行:这里截取GPIO_IO3的GPIO模式的对应说明参考手册:要注意我们配置的是GPIO1,但是在GPIOx这里的地址是:0x0209C000
  其中DR(data register)寄存器就是设置数据的,而DIR寄存器就是设置输入还是输出的;两个寄存器是挨着的,地址的便宜是4,可以根据参考手册看出来
在这里插入图片描述
在这里插入图片描述

/*  设置GPIO1的功能 *  设置GPIO1_GDIR寄存器,设置GPIO1_GPIO3为输出  *  GPIO1_GDIR寄存器的地址是:209_C004*  设置:GPIO1_GDIR寄存器bit3为1,也就是:GPIO1_GPIO3为输出*/ldr r0,=0x0209c004ldr r1,=0x8str r1,[r0]
/*  打开LED,也就是设置GPIO1_IO03为低0 
*   GPIO1_DR的地址为:0x0209c000
*   */ldr r0,=0x0209c000ldr r1,=0str r1,[r0]loop:b loop

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

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

相关文章

服务器遭受攻击后的黑洞状态应对策略及防护机制解析

引言 在网络安全领域中,当服务器遭受大规模DDoS攻击或其他恶意流量冲击时,为了保护服务的稳定性和其他正常用户的使用体验,往往会采取一种紧急防护手段——将服务器置于黑洞状态。所谓黑洞状态,即网络服务商暂时屏蔽掉对服务器的…

“中国汉字”的英语表达|柯桥考级英语生活英语商务口语培训

汉字,又称中文字、中国字、方块字。汉字是表意文字,一个汉字通常表示汉语里的一个词或一个语素,这就形成了音、形、义统一的特点。 我们通常用“Chinese character”表示“汉字”而不用“Chinese word”. 🔴 例句: C…

QT:信号和槽

文章目录 信号和槽connect函数槽自定义槽第一种第二种 信号和槽 这里的信号和Linux的信号一样吗? 答案是差不多,但是也有一定的区别,而且也是两个不同的概念 信号有三个概念,一个是信号源,这个信号是由谁发送的&…

信息管理与信息系统就业方向及前景分析

信息管理与信息系统(IMIS)专业的就业方向十分广泛,包含计算机方向、企业信息化管理、数据处理和数据分析等,随着大数据、云计算、人工智能、物联网等技术的兴起,对能够处理复杂信息系统的专业人才需求激增,信息管理与信息系统就业…

Storm 技术揭秘:掌握实时大数据处理的终极神器!

Storm 是一个开源的分布式实时计算系统,由 Twitter 公司开发并贡献给 Apache 基金会。它可以处理大量的数据流,进行实时的数据挖掘、数据分析和数据可视化等任务。Storm 具有高容错性、可扩展性和低延迟的特点,适用于需要快速响应的场景&…

15、ESP32 Wifi

ESP32 的 WIFI 功能是模块内置的&#xff0c;通过 ESP32 的基础库调用一些函数就可以轻松使用它。 Wifi STA 模式&#xff1a; 让 ESP32 连接附近 WIFI&#xff0c;可以上网访问数据。 // 代码显示搜索连接附近指定的 WIFI // 通过 pin 按键可断开连接#include <WiFi.h>…

纯血鸿蒙APP实战开发——主页瀑布流实现

介绍 本示例介绍使用ArkUIWaterFlow组件和LazyForEach实现瀑布流场景。该场景多用于购物、资讯类应用。 效果图预览 使用说明 加载完成后显示整个列表&#xff0c;超过一屏时可以上下滑动。 实现思路 创建WaterFlowDataSource类&#xff0c;实现IDataSource接口的对象&…

JAVA面试之MQ

如何保证消息的可靠传输&#xff1f;如果消息丢了怎么办 数据的丢失问题&#xff0c;可能出现在生产者、MQ、消费者中。 &#xff08;1&#xff09;生产者发送消息时丢失&#xff1a; ①生产者发送消息时连接MQ失败 ②生产者发送消息到达MQ后未找到Exchange(交换机) ③生产者发…

第一次用ssh登录树莓派or linux服务器出现Permission denied (publickey)

authenticity of host ) cant be established ssh userip Permission denied (publickey) 解决办法&#xff1a; 第一步&#xff1a; PasswordAuthentication yes 第二步&#xff1a; service sshd restart 这两步一步都不能少 注意&#xff01;

如何搭建本地的 NPM 私有仓库 Nexus

NPM 本地私有仓库&#xff0c;是在本地搭建NPM私有仓库&#xff0c;对公司级别的组件库进行管理。在日常开发中&#xff0c;经常会遇到抽象公共组件的场景&#xff0c;在项目内部进行公用。新的项目开始时&#xff0c;也会拷贝一份创建一个新的项目&#xff0c;这样做不易于管理…

k8s部署maven项目

failed to verify certificate: x509: certificate signed by unknown authority 今天在执行kubectl get nodes的时候报的证书验证问题&#xff0c;看了一圈首次搭建k8s的都是高频出现的问题。 couldn’t get current server API group list: Get “https://kubernetes.docker…

虚拟机网络桥接模式无法通信,获取到的ip为169.254.X.X

原因&#xff1a;VMware自动选择的网卡可能不对 解决&#xff1a;编辑-虚拟网络编辑器-更改桥接模式-选择宿主机物理网卡&#xff0c;断开虚拟机网络连接后重新连接即可

能源监控新方案:IEC104转MQTT网关在新能源发电中的应用

需求背景 近些年&#xff0c;我国新能源产业快速发展&#xff0c;光伏、风电等新能源项目高速增长&#xff0c;新能源发电已经成为国家能源结构的重要组成部分。 打造数字化、智能化、信息化的电力物联网系统&#xff0c;实现光伏风电等新能源发电站的远程监控、远程维护是新能…

每日一题-贪心算法

目录 前言 买入股票的最佳时机(1) 买入股票的最好时机(2) 前言 当你踏上贪心算法的旅程&#xff0c;仿佛置身于一场智慧的盛宴&#xff0c;每一步都是对问题解决方案的审慎选择&#xff0c;每一次决策都是对最优解的向往。贪心算法以其简洁高效的特性&#xff0c;被广泛运用于…

【golang学习之旅】Go的 switch 分支语句

系列文章 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】Go 的循环结构 【golang学习之旅】Go里面 if 条件判断语句 目录 系列文章switch 分支fallthrough 关键字无条件 switch switch 分支 有些时候需…

esp32-cam 1. 出厂固件编译与测试

0. 环境 - ubuntu18 - esp32-cam - usb转ttl ch340 硬件连接 esp32-camch340板子U0RTXDU0TRXDGNDGND5V5V 1. 安装依赖 sudo apt-get install vim sudo apt install git sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial p…

Qt 信号槽中信号重名解决办法

1、类似与Qt4中的写法&#xff1a; 2、函数指针 3、泛型 connect(ui->combox, QOverload<int>::of(&QCombox::currentIndexChanged), this ,&mainwindow::onindexchange);

LLM应用:让大模型prompt总结生成Mermaid流程图

生成内容、总结文章让大模型Mermaid流程图展示&#xff1a; mermaid 美人鱼, 是一个类似 markdown&#xff0c;用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具&#xff0c;您可以在文档中嵌入一段 mermaid 文本来生成 SVG 形式的图形 Prompt 示例&#xff1a;用横向…

001_Langchain

LangChain LangChain 是一个开源框架,旨在帮助开发者使用大型语言模型(LLMs)和聊天模型构建端到端的应用程序。它提供了一套工具、组件和接口,以简化创建由这些模型支持的应用程序的过程。LangChain 的核心概念包括组件(Components)、链(Chains)、模型输入/输出(Mode…

《汇编语言》- 读书笔记 - 附注

《汇编语言》- 读书笔记 - 附注 附注1&#xff1a;Intel 系列微处理器的3种工作模式1. 实模式2. 保护模式保护模式 与 实模式 的主要区别寻址能力内存保护特权级别任务管理和虚拟内存 为何需要保护模式访问受保护资源 3. 虚拟 8086 模式4. 长模式&#xff08;Long Mode&#xf…