正点原子阿尔法ARM开发板-IMX6ULL(三)——汇编LED驱动实验-上

news2024/11/13 9:51:30

文章目录

  • 一、原理分析
    • 1.1 对于IMX6ULL的IO初始化
    • 1.2 IO的复用(MUX)
    • 1.3 电气属性寄存器(PAD)
      • 1.3.1 SRE(bit0)
      • 1.3.2 DSE(bit5:3)
      • 1.3.3 SPEED(bit7:6)
      • 1.3.4 ODE(bit11)
      • 1.3.5 PKE(bit12)
      • 1.3.6 PUE(bit13)
      • 1.3.7 PUS(bit15:14)
      • 1.3.8 HYS(bit16)
    • 1.4 配置GPIO
  • 二、汇编补充
  • 三、驱动编写
    • 3.1 使能CCGR
    • 3.2 选择复用方式

一、原理分析

初始化一些SOC外设,
SOC外设通常包括但不限于以下几种:存储器管理单元(MMU)、通用输入/输出(GPIO)接口、并行和串行接口(如USB、SPI、I2C等)、定时器和计数器、中断控制器、模拟和数字信号处理模块等。

初始化DDR ,IMX6ULL、一般将SP指针指向DDR、设置好C语言环境

1.1 对于IMX6ULL的IO初始化

使能时钟,CCGR0 ~ CCGR6这7个寄存器控制着IMX6ULL所有外设时钟的使能。为了简单,设置CCGR0 ~ CCGR6这7个寄存器全部为OXFFFFFFFF.相当于使能所有外设时钟。
一个有两位,当都设为11,是即全部使能,当7个都是11时,即全部使能

1.2 IO的复用(MUX)

寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
首先根据LED所在端口时GPIO1_3,确定端口号,之后查看参考手册寻找复用
在这里插入图片描述
只有右下角的4位是对于模式进行选择
在这里插入图片描述
每一个值,就是一种模式,设置为0101=5,就复用为GPIO了

1.3 电气属性寄存器(PAD)

寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是设置GPIO3的电气属性,包括压摆率、速度、驱动能力、开漏、上下拉等
在这里插入图片描述

1.3.1 SRE(bit0)

SRE是设置压摆率,,设置压摆率,当此位为0的时候是低压摆率,当为1的时候是高压摆率。这里的压摆率就是 IO电平跳变所需要的时间,比如从0到1需要多少时间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低。如果你的产品要过 EMC的话那就可以使用小的压摆率,因为波形缓和,如果你当前所使用的 IO做高速通信的话就可以使用高压摆率

由于不要过EMC检测,所以设置为0

1.3.2 DSE(bit5:3)

用来设置 IO的驱动能力,
在这里插入图片描述
位数字越大,电阻越小,驱动能力越强

1.3.3 SPEED(bit7:6)

当IO用作输出,SPEED就是设置IO速度
在这里插入图片描述

1.3.4 ODE(bit11)

当 IO作为输出的时候,此位用来禁止或者使能开路输出,此位为0的时候禁止开路输出, 当此位为1的时候就使能开路输出功能。

1.3.5 PKE(bit12)

此位用来使能或者禁止上下拉 /状态保持器功能,为0时禁止上下拉 /状态保持器,为 1时使能上下拉和状态保持器。

1.3.6 PUE(bit13)

作为输入的时候,这个位用来设置 IO使用上下拉还是状态保持器。当为 0的时候使用状态保持器,当为 1的时候使用上下拉。状态保持器在

1.3.7 PUS(bit15:14)

设置上拉和下拉
在这里插入图片描述

1.3.8 HYS(bit16)

迟滞比较器(没看懂)

在整理这些电气属性时,不需要全部搞懂

1.4 配置GPIO

配置输入输出

在这里插入图片描述
设置GP1O_DR寄存器bit3为1.也就是设置为输出模式。设置GPIO_DR寄存器的bit3.为1表示输出高电平,为0表示输出低电平。·

二、汇编补充

对于MOV,MOVS以及LDR和STR是最常用的

LDR是,可以将一个地址进行保存(可以用立即数表达地址,然后这段地址的别名就是寄存器Rx中,而LDR中,[Rx],表示取值,即Rx表示地址,[Rx]表示这个地址上所存储的值)
在这里插入图片描述
STR指令就是写入,
STR R1, [R0] @表示R1的值写入R0所在地址中,也即覆盖了[R0]原本的值
在这里插入图片描述

在这里插入图片描述
这段汇编就是 a=b
解释一下:
第一行:将B的地址立即数,存入R0
第二行:读取B地址的数放入R1
第三行:将A的地址立即数,存入R0
第四行:将R1(此时不用中括号)中的值写入R0(R0需要中括号)

三、驱动编写

3.1 使能CCGR

首先打开linux操作系统,创建文件夹、工作区。
之后根据的原理分析的步骤写汇编
第一步就是把,CCGR的寄存器全部使能,需要找到地址,进入参考手册18章,找到
在这里插入图片描述

    ldr r0, =0x020C4068 @写入CCGR0的地址
    ldr r1, =0xFFFFFFFF @要写入的数据(全部使能)
    str r1, [r0]        @写入CCGR0

    ldr r0, =0x020C406C @写入CCGR1的地址(由于CCGR都是紧挨着的,每个间隔4位)
    str r1, [r0]        @写入CCGR1

    ldr r0, =0x020C4070 @写入CCGR2的地址
    str r1, [r0]        @写入CCGR2

    ldr r0, =0x020C4074 @写入CCGR3的地址
    str r1, [r0]        @写入CCGR3

    ldr r0, =0x020C4078 @写入CCGR4的地址
    str r1, [r0]        @写入CCGR4

    ldr r0, =0x020C407C @写入CCGR5的地址
    str r1, [r0]        @写入CCGR5

    ldr r0, =0x020C4080 @写入CCGR6的地址
    str r1, [r0]        @写入CCGR6

3.2 选择复用方式

下一步就是配置复用方式,由于LED是GPIO3控制,所以找到
在这里插入图片描述

    /*配置GPIO1_3,使复用方式变为GPIO
    写入0101,即5
    寄存器是IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
    */
    ldr r0, =0x020E0068 @写入IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的地址
    ldr r1, =0x5        @要写入的数据
    str r1, [r0]        @写入

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

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

相关文章

6.5椒盐噪声

在OpenCV中联合C给一张图片加上椒盐噪声(Salt and Pepper Noise)可以通过随机选择像素点并将其置为黑色(0)或白色(255)来实现。椒盐噪声是一种随机噪声,通常表现为图像中的孤立黑点(…

Windows环境下 VS2022 编译 LAME 源码

LAME LAME 是一个非常流行的开源 MP3 编码器库,它的全称是 “LAME Ain’t an MP3 Encoder”,这是一个带有讽刺意味的名字,因为 LAME 实际上是一个功能强大的 MP3 编码器。LAME 的开发始于 1998 年,目的是创建一个开放源代码的库&a…

AIPaperGPT写论文靠谱吗?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 在信息爆炸的今天,学术写作的挑战日益增加,而AIPaperGPT作为一款旨在提升写作效率的工具,其可靠性自然成为了用户关注的焦点。本文将从多个维度对AIPaperGPT进行全面评估&…

(java+Seleniums3)自动化测试实战

一.web自动化测试基础 密码的加密处理--是在前端JavaScript 二.selenium IDE录制 打开火狐浏览器: 点击 寻找更多附加组件 输入: 选择: 跳转:点击 安装完成,打开之后是这个页面: 录制一个新的测试用例在一个…

黑马点评17——多级缓存-Lua语法

文章目录 Lua语法初始Lua变量和循环条件控制、函数 变量和循环函数和条件控制 Lua语法 初始Lua https://www.lua.org/ 魔兽的一些插件就是用lua开发的。 centOs已经装好了lua,直接用~ 变量和循环 条件控制、函数 变量和循环 函数和条件控制

python项目无法启动?在终端运行 manage.py runserver 8000 没反应该怎么解决

运行 manage.py runserver 8000 没反应,出现提示语句: 根据提示修改命令再次运行 .\manage.py runserver 8000 仍然没反应 解决办法: 1、添加当前目录到 PATH:临时将当前目录添加到 PATH 环境变量中。使用以下命令: …

如何理解有效值电流?电流的均方根值

电流的有效值就是电流的均方根。 有效值电流定义:将一直流电与一交流电分别通过相同阻值的电阻,如果相同时间内两电流通过电阻产生的热量相同,就说这一直流电的电流值是这一交流电的有效值。 如果说电流就是直流电,那么电流的有效…

一、数据结构和算法概述

文章目录 一、数据结构的介绍二、线性结构和非线性结构 一、数据结构的介绍 二、线性结构和非线性结构

Numpy中常用的数学方法

目录 1、数学运算符2、比较运算符3、常用的数学函数4、常用的统计函数 1、数学运算符 import numpy as npa np.array([10,4,6,7]) b np.arange(4) # 两数组值相加 cab # 数组的值平方 db**2 # 两数组对应的值相乘 ea*b # 两数组对应的值相除 fc/a # 两数组对应的值取余 gc…

JDBC的介绍续

四 JDBC的事务支持 4.1 银行转账案例演示 4.4.1 案例分析: 1.需求:一个账号fromAccount向另一个账号toAccount转入money元钱 2.分析: - 检查两个账号是否存在,不存在的话,结束转账行为 - 检查转出账号的里金…

N 皇后

题目 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’…

RP2040 C SDK 64位定时器功能使用

RP2040 C SDK 64位定时器功能使用 🧨RP2040的64位定时器功能介绍参见:https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#group_hardware_timer 🎉RP2040有一个单64位计数器,每微秒递增一次看起来很复杂&#xf…

[基于 Vue CLI 5 + Vue 3 + Ant Design Vue 3 搭建项目] 02 配置 nodejs 淘宝镜像仓库

文章目录 为什么要配置淘宝镜像仓库呢如何查看镜像仓库如何配置镜像仓库 为什么要配置淘宝镜像仓库呢 主要是因为默认的镜像仓库是国外的,当我们使用 npm 安装依赖的时候会很慢或者失败,我们配置国内的镜像仓库这样就可以加速我们安装镜像的过程&#x…

这些加密软件功能你都知道吗?

1.透明加密与无感操作: 透明加密是许多现代加密软件的核心功能之一,它允许用户在无感知的情况下对文件进行加密和解密。这意味着用户无需改变日常操作习惯,加密和解密过程在后台自动完成,确保了数据的安全性同时不影响工作效率。…

【阿雄不会写代码】全国职业院校技能大赛GZ036第十套

也不说那么多了,要用到这篇博客,肯定也知道他是干嘛的,给博主点点关注点点赞!!!这样博主才能更新更多免费的教程,不然就直接丢付费专栏里了,需要相关文件请私聊

关于OceanBase MySQL 模式中全局索引 global index 的常见问题

在OceanBase的问答区和开源社区钉钉群聊中,时常会有关于全局索引 global index的诸多提问,因此,借这篇博客,针对其中一些普遍出现的问题进行简要的解答。 什么是 global index ? 由于 MySQL 不具备 global index 的概…

利用TCP编程实现FTP功能

模拟FTP核心原理:客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果文件存在,那么清空…

uboot源码分析uboot启动流程,uboot-CMD命令调用关系

uboot的最终目的是引导启动内核加载系统,根据这个线索我们可以首先找到uboot引导内核的main函数,查看系统引导的执行跳转的函数 main_loop。 下面对uboot函数的调用关系和主要调用函数进行分析。 一、uboot函数调用关系梳理 函数调用如下: …

Ollama 本地运行大模型(LLM)完全指南

文章介绍了 Ollama 本地运行大模型(LLM)的方方面面, 包括安装运行、对话、自定义模型、系统提示配置、调试、开发、存储、如何作为服务、OpenAI 的兼容等。 这一年来,我已经习惯了使用线上大模型 API 来工作,只要网络…

2025毕业设计免费指导!!

本人专注于Android/java/PHP/Python/人工智能/数据库/微信小程序技术等领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在图像识别、网站开发和微信小程序的开发,很是熟悉和了解;本人也是多年的全栈…