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一样需要设置时钟

代码如下:

cpp 复制代码
/**************************************************************
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, =0X10B0
    str 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寄存器【控制输入输出】

实验结果如下:

相关推荐
YunB西风英1 小时前
(STM32笔记)十二、DMA的基础知识与用法 第二部分
笔记·stm32·嵌入式硬件·学习·dma·嵌入式
大邳草民1 小时前
Math Reference Notes: 矩阵基础
笔记·线性代数·矩阵
墨楠。1 小时前
数据结构学习记录-线性表
数据结构·学习
东京老树根2 小时前
Excel 技巧09 - 通过IF筛选数据,并给对象单元格赋值背景色 (★)
笔记·学习·excel
BoBoo文睡不醒2 小时前
Luggage Lock( The 2021 ICPC Asia Shenyang Regional Contest )
笔记
羊村懒哥2 小时前
haproxy+httpd网站架构,实现负载均衡实验笔记
笔记·架构·负载均衡
边城仔3 小时前
【MySQL数据库】JDBC总结
数据库·学习·mysql·jdbc·orm·连接池·basedao
大丈夫立于天地间3 小时前
OSPF - 路由过滤的几种方法
网络·网络协议·学习·算法·智能路由器·信息与通信
AI趋势预见3 小时前
GARCH指导的神经网络在金融市场波动性预测中的应用
人工智能·深度学习·神经网络·学习·机器学习·金融
bylander3 小时前
【AI学习】地平线首席架构师苏箐关于自动驾驶的演讲
人工智能·学习