linux学习笔记(2)----汇编LED灯实验

MX6ULL IO 

IO的复用功能

 这里的只使用了低五位,用来配置io口,其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的,GPIO1_IO00 一共可以复用为 9种功能 IO,分别对应 ALT0~ALT8。每种对应了不同的功能

io的属性配置

 HYS(bit16)用来使能迟滞比较器,当 IO 作为输入功能的时候有 效,用于设置输入接收器的施密特触发器是否使能。如果需要对输入波形进行整形的话可以使 能此位。此位为 0 的时候禁止迟滞比较器,为 1 的时候使能迟滞比较器。

 PUS(bit15:14)用来设置上下拉电阻的,一共有四种选项可以选择,如下所示:

位设置 含义

00     100K 下拉

01     47K 上拉

10     100K 上拉

11      22K 上拉

PUE(bit13) IO 作为输入的时候,这个位用来设置 IO 使用上下
拉还是状态保持器。当为 0 的时候使用状态保持器,当为 1 的时候使用上下拉。状态保持器在
IO 作为输入的时候才有用,顾名思义,就是当外部电路断电以后此 IO 口可以保持住以前的状
态。
PKE(bit12) 此位用来使能或者禁止上下拉 / 状态保持器功能,为
0 时禁止上下拉 / 状态保持器,为 1 时使能上下拉和状态保持器。
SPEED(bit7:6) IO 用作输出的时候,此位用来设置 IO
度,设置如表 8.1.4.2 所示:
位设置 速度
00         低速 50M
01         中速 100M
10         中速 100M
11         最大速度 200M
DSE(bit5:3) IO 用作输出的时候用来设置 IO 的驱动能力,
总共有 8 个可选选项,如表 8.1.4.3 所示:
位设置 速度
000 输出驱动关闭
001         R0(3.3V 下 R0 260 Ω, 1.8V R0 150 Ω,接 DDR 的时候是 240 Ω )
010         R0/2
011         R0/3
100         R0/4
101         R0/5
110         R0/6
111         R0/7
SRE(bit0) 设置压摆率,当此位为 0 的时候是低压摆率,当为 1
的时候是高压摆率。这里的压摆率就是 IO 电平跳变所需要的时间,比如从 0 1 需要多少时
间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低。如
果你的产品要过 EMC 的话那就可以使用小的压摆率,因为波形缓和,如果你当前所使用的 IO
做高速通信的话就可以使用高压摆率。

GPIO的功能配置

前面配置了当前的IO口为GPIO口,这一步将配置GPIO的功能配置。

 配置GPIO的功能看的是上面的8个寄存器。

GPIOx_DR

GPIO 被配置为输出功能以后,向指定的位写入数据那么相应的 IO 就会输出相应的高低电平。

GPIOx_GDIR 

 用来设置io口的方向

GPIOx_PSR

PSR 寄存器也是一个 GPIO 对应一个位,读取相应的位即可获取对应的 GPIO 的状态,也就是 GPIO 的高低电平值

GPIOx_ICR1和GPIOx_ICR2 

 

 ICR1 用于 IO0~15 的配置,ICR2 用于 IO16~31 的配置。ICR1 寄存器中一个 GPIO 用两个位

00   低电平触发
01   高电平触发
10   上升沿触发 
11   下降沿触发

GPIOx_ISR

 ISR 寄存器也是 32 位寄存器,一个 GPIO 对应一个位,只要某个 GPIO 的中断发生,那么  

ISR 中相应的位就会被置 1

GPIOx_EDGE_SEL

 EDGE_SEL 寄存器用来设置边沿中断,这个寄存器会覆盖 ICR1 ICR2 的设置,同样是一 个 GPIO 对应一个位。如果相应的位被置 1,那么就相当与设置了对应的 GPIO 是上升沿和下降 沿(双边沿)触发

时钟设置

和stm32一样需要设置时钟

代码如下:

/**************************************************************
Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.
文件名	: 	 mian.c
作者	   : 左忠凯
版本	   : V1.0
描述	   : 裸机实验1 汇编点灯使用汇编来点亮开发板上的LED灯,学习和掌握如何用汇编语言来完成对I.MX6U处理器的GPIO初始化和控制。
其他	   : 无
论坛 	   : www.wtmembed.com
日志	   : 初版V1.0 2019/1/3 左忠凯创建
**************************************************************/.global _start  /* 全局标号 *//** 描述:	_start函数,程序从此函数开始执行此函数完成时钟使能、*		  GPIO初始化、最终控制GPIO输出低电平来点亮LED灯。*/
_start:/* 例程代码 *//* 1、使能所有时钟 */ldr r0, =0X020C4068 	/* CCGR0 */ldr r1, =0XFFFFFFFF  str r1, [r0]		ldr r0, =0X020C406C  	/* CCGR1 */str r1, [r0]ldr r0, =0X020C4070  	/* CCGR2 */str r1, [r0]ldr r0, =0X020C4074  	/* CCGR3 */str r1, [r0]ldr r0, =0X020C4078  	/* CCGR4 */str r1, [r0]ldr r0, =0X020C407C  	/* CCGR5 */str r1, [r0]ldr r0, =0X020C4080  	/* CCGR6 */str r1, [r0]/* 2、设置GPIO1_IO03复用为GPIO1_IO03 */ldr r0, =0X020E0068	/* 将寄存器SW_MUX_GPIO1_IO03_BASE加载到r0中 */ldr r1, =0X5		/* 设置寄存器SW_MUX_GPIO1_IO03_BASE的MUX_MODE为5 */str r1,[r0]/* 3、配置GPIO1_IO03的IO属性	*bit 16:0 HYS关闭*bit [15:14]: 00 默认下拉*bit [13]: 0 kepper功能*bit [12]: 1 pull/keeper使能*bit [11]: 0 关闭开路输出*bit [7:6]: 10 速度100Mhz*bit [5:3]: 110 R0/6驱动能力*bit [0]: 0 低转换率*/ldr r0, =0X020E02F4	/*寄存器SW_PAD_GPIO1_IO03_BASE */ldr r1, =0X10B0str r1,[r0]/* 4、设置GPIO1_IO03为输出 */ldr r0, =0X0209C004	/*寄存器GPIO1_GDIR */ldr r1, =0X0000008		str r1,[r0]/* 5、打开LED0* 设置GPIO1_IO03输出低电平*/ldr r0, =0X0209C000	/*寄存器GPIO1_DR */ldr r1, =0		str r1,[r0]/** 描述:	loop死循环*/
loop:b loop 				

因为需要LED0亮,所以就只需要配置DR寄存器【控制电平】和GDIR寄存器【控制输入输出】

实验结果如下:

 

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

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

相关文章

在线餐饮油烟实时监测系统的设计与实现

安科瑞 华楠 摘 要:为了解决传统油烟检测方法中成本高、效率低、实时性差等问题,设计开发了一种在线油烟实时监测系统;系统由采集、通讯、服务器和用户交互四个模块组成;采集模块采集油烟数据,通过GPRS通讯技术将数据发…

KL15 是什么?ACC,crank,on等

KL含义 KL is the abbreviation for klemme which is the German term for connector / connection.KL是“ klemme”的缩写,这是德语中连接器或连接的术语。 KL30 ,通常表示电瓶的正极。positive KL31,通常表示电瓶的负极。negative KL15, 通…

面试题:JS中的String常见方法有哪些?

面试题:说不出五个就尴尬了!我目前只写了几个方法,待更新中。。。 1、length2、slice()3、substr()4、substring()5、split()6、indexOf() 1、length 作用:检测字符串的长度。 let str abcde console.log(str.length) // 52、sl…

Git rebase、merge、cherry-pick用法

项目开发过程中,一般会有一个主分支,用来进行版本发布,研发会新建一个属于自己的开发分支,一个功能开发完成后会合入主分支 新建分支 D:\workspace\android>git checkout -b develop_test origin/develop_main Switched to a…

在外地ssh远程连接家里ubuntu服务器(Coplar内网穿透)

官网:https://www.cpolar.com/ 步骤: 按照官网文档(https://www.cpolar.com/docs)在家里ubuntu上安装,并且开通隧道即可,不需要在自己笔记本安装 需要注意的是: 可以先安装ssh许可&#xff0c…

微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发)

前言 最近在做微信小程序项目中,有一个功能就是做一个商品列表分页限流然后实现上拉加载下拉刷新功能,遇到了一个使用scroll-viwe组件下拉刷新事件始终不触发问题,网上很多说给scroll-view设置一个高度啥的就可以解决,有些人设置了…

hadoop与HDFS交互

一、利用Shell命令与HDFS进行交互 在进行HDFS编程实践前,需要首先启动Hadoop。可以执行如下命令启动Hadoop: cd /usr/local/hadoop ./sbin/start-dfs.sh #启动hadoop Hadoop支持很多Shell命令,其中fs是HDFS最常用的命令,利用fs…

ChatGPT的功能与特点

随着人工智能技术的不断发展,ChatGPT作为OpenAI公司开发的基于GPT-3.5架构的大型语言模型,正引领着智能交互的新纪元。ChatGPT的功能与特点使其能够在多个领域展现出惊人的能力,本文将深入探讨ChatGPT的功能与特点,以及它在人工智…

HCIA-datacom数通题库和录播视频资料

HCIA-Datacom,是华为数通认证的初级考试,培训与认证具备数通基础通用知识和技能水平的工程师,只是入门了解数通的一些基础通用知识,适用于小白了解和学习数通知识点起点。 个人建议还是有必要考的,如果在企业考试考试…

Kubernetes (k8s)理论介绍

一:K8s 简介 1、K8s作用 2、K8s 来历 3、为什么要用 K8S? 4、Kubernetes 功能 二:Kubernetes 集群架构与组件 1、Kubernetes 集群架构与组件 2、核心组件 -Master 组件 (1)Kube-apiserver (2)Kube…

【数据预测】基于蜣螂优化算法DBO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#53】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 蜣螂优化算法DBO2. 变分模态分解VMD3. 核极限学习机KELM4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 1. 蜣螂…

实现Feed流的三种模式:拉模式、推模式和推拉结合模式

在互联网产品中,Feed流是一种常见的功能,它可以帮助我们实时获取我们关注的用户的最新动态。Feed流的实现有多种模式,包括拉模式、推模式和推拉结合模式。在本文中,我们将详细介绍这三种模式,并通过Java代码示例来实现…

关于BQ27427的配置问题

EVM是TI家做的BQ27427的开发板,这款芯片还挺新的。 大概是这样,一块开发板要一千多块钱,使用的时候还出现了一些奇怪的问题。 配置使用的是买的盗版的EV2400,就是黑色的那个东西,使用的通信方式IIC。 TI手册上写的软件…

Spring框架 —— AOP面向切面编程

前言 前面荔枝已经梳理了Spring框架中的IOC部分的知识,接下来荔枝继续梳理Spring框架的另一大重点:AOP面向切面编程。在这篇文章中,荔枝会着重弄清楚AOP的概念并对实现AOP的两种方式进行梳理,同时荔枝也会相应给出代码样例。毕竟荔…

AGI如何提高智力水平

AGI(Artificial General Intelligence)是一种新型的人工智能系统,具有人类智能的多个方面,能够在各种不同的任务和环境中进行决策和执行。要提高AGI的智力水平,需要从多个方面进行研究和改进。 改进算法和模型&#x…

远程访问本地mysql

文章目录 一、设置本地mysql允许外部访问找到mysql配置文件my.ini &#xff0c;linux环境是my.cnf配置mysql配置文件 二、创建外部访问的mysql用户三、配置mysql用户的权限四、配置防火墙端口五、连接查看本地ip地址 参考 连接命令 mysql -h <host> -P <port> -u &…

Server - 网络粘包原因

网络粘包是指发送方发送的数据被接收方一次性接收的现象&#xff0c;导致接收方无法正确解析数据的边界。网络粘包的原因主要有以下几点&#xff1a; 帧定界错误&#xff1a;在数据传输过程中&#xff0c;接收方无法准确判断每一帧的起始和结束位置&#xff0c;可能将多个帧合并…

后端接收json格式的字符串出现json格式错误

问题描述&#xff1a;在进行接口测试时&#xff0c;出现了一个问题&#xff0c;json格式错误&#xff0c;前端在接口传的其中一个参数是一个字符串&#xff0c;此字符串就是一个json格式的数据&#xff0c;此参数需要在后台执行相对应的业务&#xff0c;业务需要的就是一个json…

rust里用什么表示字节类型?

在Rust中&#xff0c;字节可以使用 u8 类型来表示。 u8 是一个无符号8位整数类型&#xff0c;可以表示0到255之间的值&#xff0c;对应于一个字节的范围。 以下是一个示例&#xff0c;演示了如何声明和使用字节&#xff1a; fn main() {let byte: u8 65; // 表示字母A的ASCI…

Linux【网络基础】IP协议

文章目录 一、IP协议&#xff08;1&#xff09;IP地址协议概念和理解&#xff08;2&#xff09;IP地址协议格式&#xff08;3&#xff09;网络号和主机号&#xff08;4&#xff09;地址管理&#xff08;一&#xff09;分配IP地址方法&#xff08;二&#xff09;CIDR分配IP地址&…