linux IMX6 汇编点亮一个LED灯
驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动。
IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD_GPIO1_IO00,是根据功能来命名的

每个引脚都包含这两个寄存器,表中的 XXXX 表示引脚的名字,例如本芯片中有一个名为 GPIO1_IO03 的引脚,编号为 GPIO1.3,你可以在参考手册的 IOMUXC 章节中找到它的 这 两 个 寄 存 器 : IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO04 以 及IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO04,以下简称 MUX 寄存器及 PAD 寄存器。根据寄存器说明即可对该引脚进行相应的配置。

可以看到,该寄存器主要有两个配置域,分别是 SION 和 MUX_MODE,其中 SION用于设置引脚在输出模式下同时开启输入通道。重点是 MUX_MODE 的配置,它使用 4 个寄存器位表示可选的 ALT0~ALT8这 9 个模式,若配置为 ALT5 则引脚会用作普通的 GPIO功能,用于输出高、低电平。

相对来说 PAD 寄存器的配置项就更丰富了,而且图中仅是该寄存器的部分说明,仔细看这些配置项,如 HYS 设置使用施密特模式的滞后功能,PUS 配置上下拉电阻的阻值,其它的还包含 PUE、PKE、ODE、SPEED、DSE 及SRE 的配置。
接下来则是要使用汇编来给这些寄存器赋值,并驱动它。
流程:
1、使能时钟
2、复用为GPIO
3、配置寄存器管脚
4、设置管脚方向
5、拉低管脚,点亮LED
.global _start _start:
ldr R0, =0X020C406C //赋值给R0 时钟的地址
ldr R1, =0x0C000000 //开启GPIO1的时钟
str R1, [R0] //赋值 ldr R0, =0X020E0068 //赋值给R0 IO3的地址
ldr R1, =0x00000005 //IO3设置复用为GPIO_IO3
str R1, [R0] //赋值 ldr R0, =0X020E02F4 //赋值给R0 IO3的设置地址
ldr R1, =0x000010B0 //配置管脚寄存器
str R1, [R0] //赋值 ldr R0, =0X0209C004 //GDIR
ldr R1, =0x00000008 //输出
str R1, [R0] //赋值 loop:
bl led_on
bl delay
bl led_off
bl delay
b loop led_on:
ldr R0, =0X0209C000 //DR
ldr R1, =0x00000000 //输出低
str R1, [R0] //赋值
mov pc, lr //返回被调用处 led_off:
ldr R0, =0X0209C000 //DR
ldr R1, =0x00000008 //输出低
str R1, [R0] //赋值
mov PC, LR //返回被调用处 delay:
move R0, #0x4000
for:
sub R0, #
cmp R0, #
bne for
mov PC, LR //返回被调用处
这个代码初始化了GPIO1_3管脚,使用了delay函数,使led灯能闪烁
linux IMX6 汇编点亮一个LED灯的更多相关文章
- 点亮一个led灯
/********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...
- 进阶之路(基础篇) - 001 亮一个led灯
/********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...
- 单片机基础——使用GPIO输出点亮一个LED灯
1. 准备工作 硬件准备 开发板首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接. 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码,可参考MDK安装教程 ...
- 在 S5PV210 的 开发板上 点亮 一个 LED 灯
参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用 xshell 工具 连接 开发板 ,winscp 工具 连接 开发板 , 准 ...
- 《STM32CubeMX配置STM32H743XI工程》第一讲《初始化UART,重定义printf函数,点亮一个LED灯》
1.打开STM32CubeMX软件->新建一个工程(软件自行到ST官网下载安装) 2.输入对应的芯片型号(本次基于野火STM32H743XI Pro 开发板)点击Start Project生成项 ...
- 第一个程序点亮一个LED灯
#include <reg52.h> // 引用52包文件 可以理解为命名空间 sbit P1_0 = P1^0; // 定义P1管脚0 void main() ...
- 51单片机---点亮一个LED灯
1 程序源码 #include <REGX52.H> `包含51单片机的头文件` sbit led = P0^0; int main(void) { while(1) { led = 1; ...
- 韦东山嵌入式Linux学习笔记04--点亮开发板的一个LED灯
搜索开发板原理图LED的走线 LED8是网线接口的指示灯. 在这里我们尝试用汇编代码控制D10, 也就是LED1,它连接到EINT4/GPF4,读取芯片手册 有原理图可知,如果需要 ...
- 点亮一个led
1:RS232电平:计算机串口 高电平为-12v,低电平为+12v,所以计算机与单片机进行通信的时候需要加电平转换芯片max232(高电平为-9到-12,低电平为+3到+12之间的. max232通常 ...
随机推荐
- 难题解决:Mycat数据库中间件+Mybatis批量插入数据并返回行记录的所有主键ID
一.mybatis的版本必须为3.3.1及其以上 项目所依赖的mybatis的版本必须为3.3.1及其以上,低版本的不行,保证hap项目的依赖的mybatis的jar的版本必需为需要的版本: 二.在 ...
- Java中的static(1)【持续更新】——关于Eclipse的No enclosing instance of type ... 错误的理解和改正
No enclosing instance of type SomeClass is accessible. Must qualify the allocation with an enclosing ...
- Windows Error的错误代码
时不时会用到,记录下 0操作成功完成. 1功能错误. 2系统找不到指定的文件. 3系统找不到指定的路径. 4系统无法打开文件. 5拒绝访问. 6句柄无效. 7存储控制块被损坏. 8存储空间不足,无法处 ...
- 两小无猜的爱恨情仇--java =+和+=揭秘
故事背景 当一个人问另一个人“敢不敢”的时候,另一个人必须说“敢”,这就是游戏的规则.小男孩朱利安和小女孩苏菲的相遇即开始于这样一场孩童的闹剧,一个精美的铁盒子就是他们游戏的见证.说脏话,扰乱课堂,在 ...
- redis系列之------简单的动态字符串(SDS)
前言 Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的 ...
- python常用算法学习(3)
1,什么是算法的时间和空间复杂度 算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大 ...
- 52个有效方法(4) - 多用类型常量,少用#define预处理指令
局部常量 在实现文件中使用 static const 来定义"只在编译单元内可见的常量"(translation-unit-specific constant).其命名规则为在前面 ...
- 如何去除CFormView的Scrollbar
第一种方法: 重载 OnSize(UINT nType, int cx, int cy) 在CFormView::OnSize(nType, cx, cy)下面添加一句 ShowScrollBar(S ...
- Spring Boot (十五): 优雅的使用 API 文档工具 Swagger2
1. 引言 各位在开发的过程中肯定遇到过被接口文档折磨的经历,由于 RESTful 接口的轻量化以及低耦合性,我们在修改接口后文档更新不及时,导致接口的调用方(无论是前端还是后端)经常抱怨接口与文档不 ...
- COGS 2089. 平凡的测试数据
[题目描述] 树链剖分可以干什么? “可以支持在树中快速修改一个点信息,快速询问一条链信息” LCT可以干什么? “可以支持树链剖分支持的特性,并且支持快速链接两个棵树,或者断开某条边” 那我现在要出 ...