正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-9.1-LED灯(模仿STM32驱动开发实验)

 前言:

本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。

引用:

正点原子IMX6U仓库 (GuangzhouXingyi) - Gitee.com

《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》

正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档

正文:

本文是 “正点原子[第二期]Linux之ARM(MX6U)裸机篇--第9.1讲” 的读书笔记。第9.1 介绍了

0.  SMT32 格式的LED驱动程序示例

对于STM32而言,使用一个结构体将一个外设的所有寄存器都放在一起,这样就相当于寄存器抽象为外设了。

1. 设计C语言 LED 灯程序,模仿STM32 LED灯驱动程序

在结构体中添加寄存器的时候,一定要注意寄存器的连续性,如果不连续的话要添加寄存器占位。

2. 模仿STM32驱动程序进行源码编写

2.1 创建 imx6u.h 文件,把寄存器组织为结构体

创建 imx6u.h 文件,并模仿STM32驱动程序把寄存器组织为结构体,我们先根据《IMX6ULL参考手册.pdf》中寄存器的地址,在 imx6u.h 文件中的寄存器基地址 BASE。

查找 《IMX6ULL参考手册.pdf》中CCM寄存器的起始基地址,并定义为宏 '#typedef CCM_BASE':

查找 《IMX6ULL参考手册.pdf》中CCM_ANALOG 寄存器的起始基地址,并定义为宏 '#typedef CCM_ANALOG_BASE':

查找 《IMX6ULL参考手册.pdf》中 IOMUXC_SW_MUX  寄存器的起始基地址,并定义为宏 '#typedef IOMUXC_SW_MUX_BASE':

查找 《IMX6ULL参考手册.pdf》中 IOMUXC_SW_PAD  寄存器的起始基地址,并定义为宏 '#typedef IOMUXC_SW_PAD_BASE': 

同样方法,查找 《IMX6ULL参考手册.pdf》中GPIO1~GPIO5的寄存器起始基地址,并 定义为宏 '#define GPIOx_BASE' :

参考正点原子提供的第“9.1讲”视频教程的附带源码目录中的 'imx6u.h' 文件和STM32 LED驱动程序文件中,把寄存器组织成 C语言结构体的方法,在 mx6u.h 文件中定义 I.MX6U 的寄存器C语言结构体定义。

定义C语言结构体的时候,有一些细节需要注意:

  1. 把 I.MX6U 外设寄存器地址组成C语言结构体,利用了C语言结构体中结构体成员地址依次递增的特性。
  2. 所以需要注意《IMX6ULL参考手册.pdf》文档中,I.MX6U 的外设寄存器地址是不是连续的,特别需要注意的是,I.MX6U 的外设寄存器从 base 基地址开始大部分是连续的但也有几个寄存器的地址中间有不连续的,寄存器地址跳过了几个地址,对于这种情况需要再C语言结构体定义以留下占位成员。

例如, CCM 寄存器其里的如下两个寄存器之间是不连续了,两个寄存器之间间隔了 8个byte的空间。

按照 《IMX6ULL参考手册.pdf》中 “18.6 CCM Memory Map/Register Definition” 中 CCM 寄存器的地址顺序,在 imx6u.h 中定义CCM 寄存器结构体。每个CCM寄存器的名字作为结构体中的一个成员,结构体体总成员的名字按照手册中寄存器地址的顺序排序。

2.2 编写 start.s 汇编文件

3. 编译

4.烧录SD卡验证

5. 总结:

5.1 VSCode Compare插件

使用 VSCode的 compare 插件来比较两个文本文件的差异,使用方法步骤如下:

  1. 在VSCode中按下 "F1" 键
  2. 在出现的搜索框里输入 "compare" 进行搜索,vscode会自动进行补全。
  3. 选择 "Compare With",打开需要比较的文件,进行比较两个文本文件的差异。

5.2 VSCode TabNine AI 自动代码补全

使用 VSCode 插件 TabNine AI 智能补全工具,实现自动代码 AI 人工智能补全。TabNine 分为收费版和免费版,收费版提供基本代码AI补全功能,收费版提供高级的AI功能。TabNine 会分析你写的源码文件自动提供AI代码补全,也就是你写的源码越多 TabNine AI 代码补全就越精准。实际使用了一些 TabNine AI 代码补全超级好用,一用一个不吱声,推荐。

5.3 发现正点原子示例源码 imx6u.h 的一点小错误

发现了正点原子"9.1讲 模仿STM32驱动程序”视频教程提供示例源码 imx6u.h 里的一点小错误:在 《IMX6ULL参考手册.pdf》手册中章节“18.7 CCM Analog Memory Map/Register Definition”里面,手册定义了 6 个和 AUTO 相关的寄存器,但是在正点原子提供的示例源码 “ imx6u.h” 只有5个AUTO寄存器,丢失了一个 "AUDO_NUM" 寄存器。

哈哈,也算本人发现的一点小错误。正点原子的示例源码和视频教程还是质量很高的,根正点原子哥点赞。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA:Server‘s certificate is not trusted(服务器的证书不受信任)

IDEA:Server‘s certificate is not trusted(服务器的证书不受信任) 打开idea,发现一个莫名其妙的证书弹出来,还关不掉发现组织名是 Doctorcom LTD.百度了下 不知道是什么东西 这也不是下面这种破解了idea的情况 30069…

Ajax.

目录 1. 服务器相关的基础概念 1.1 服务器 1.2 客户端 1.3 服务器对外提供的资源 1.4 数据也是资源 1.5 资源与 URL 地址 1.6 什么是 Ajax 2. Ajax 的基础用法 2.1 POST 请求 2.2 GET 请求 2.3 DELETE 请求 2.4 PUT 请求 2.5 PATCH 请求 3. axios 3.1 axios 的基…

IoTDB 入门教程 问题篇①——内存不足导致datanode服务无法启动

文章目录 一、前文二、问题三、分析四、继续分析五、解决问题 一、前文 IoTDB入门教程——导读 二、问题 执行启动命令,但是datanode服务却无法启动,查询不到6667端口 bash sbin/start-standalone.sh 进而导致数据库连接也同样失败 [rootiZ2ze30dygwd6…

Go 语言(三)【面向对象编程】

1、OOP 首先,Go 语言并不是面向对象的语言,只是可以通过一些方法来模拟面向对象。 1.1、封装 Go 语言是通过结构体(struct)来实现封装的。 1.2、继承 继承主要由下面这三种方式实现: 1.2.1、嵌套匿名字段 //Add…

实操——使用uploadify插件(php版和Java版) 与 Dropzone.js插件分别实现附件上传

实操——使用uploadify插件(php版和Java版)与 Dropzone.js插件分别实现附件上传 1. 使用uploadify插件上传1.1 简介1.1.1 简介1.1.2 参考GitHub 1.2 后端PHP版本的uploadify1.2.1 下载项目的目录结构1.2.2 测试看界面效果1.2.3 附页面代码 和 PHP代码 1.…

ctfshow——SQL注入

文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之③:数据分析之二(大小模型协同)

一、概述 随着新一代信息技术在产业数字化中的应用,产生了大量多源多模态信息以及响应的信息处理模式,数据孤岛、模型林立的问题也随之产生,使得业务系统臃肿、信息处理和决策效率低下,面对复杂任务及应用场景问题求解效率低。针…

【iOS】消息流程分析

文章目录 前言动态类型动态绑定动态语言消息发送objc_msgSendSEL(selector)IMP(implementation)IMP高级用法 MethodSEL、IMP、Method总结流程概述 快速查找消息发送快速查找的总结buckets 慢速查找动态方法解析resolveInstanceMet…

如何远程访问服务器?

在现代信息技术的快速发展下,远程访问服务器已成为越来越多用户的需求。远程访问服务器能够让用户随时随地通过网络连接服务器,实现数据的传输和操作。本文将介绍远程访问服务器的概念,以及一种广泛应用于不同行业的远程访问解决方案——【天…

软考之零碎片段记录(二十九)+复习巩固(十七、十八)

学习 1. 后缀式(逆波兰式) 2. c/c语言编译 类型检查是语义分析 词法分析。分析单词。如单词的字符拼写等语法分析。分析句子。如标点符号、括号位置等语言上的错误语义分析。分析运算符、运算对象类型是否合法 3. java语言特质 即时编译堆空间分配j…

2024抖音AI图文带货班:在这个赛道上 乘风破浪 拿到好效果

课程目录 1-1.1 AI图文学习指南 1.mp4 2-1.2 图文带货的新机会 1.mp4 3-1.3 2024年优质图文新标准 1.mp4 4-1.4 图文如何避免违规 1.mp4 5-1.5 优质图文模板解析 1.mp4 6-2.1 老号重启 快速破局 1.mp4 7-2.2 新号起号 不走弯路 1.mp4 8-2.3 找准对标 弯道超车 1.mp4 9…

深度学习之基于Tensorflow卷积神经网络公共区域行人人流密度可视化系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在公共区域,如商场、火车站、地铁站等,人流密度的监控和管理对于确保公共安全…

anaconda的安装和Jupyter Notebook修改默认路径

anaconda的安装 就一个注意事项:在结尾时候记得配置系统环境变量 要是没有配置这个环境变量,后面就不能cmd启动Jupyter Notebook Jupyter Notebook修改默认路径 我们要找到Jupyter Notebook的配置文件 输入下面指令 jupyter notebook --generate-config就可以找到存放配置文…

Linux图形化界面怎么进入?CentOS 7图形界面切换

CentOS 7默认只安装命令行界面。要切换到图形界面,需要先检查系统是否安装图形界面,在终端输入以下命令: systemctl get-default若是返回结果是“multi-user.target”表示系统没有安装图形界面;若是返回结果是“graphical.target…

上传jar到github仓库,作为maven依赖存储库

记录上传maven依赖包到github仓库问题 利用GitHubPackages作为依赖的存储库踩坑1 仓库地址问题踩坑2 Personal access tokens正确姿势一、创建一个普通仓库,比如我这里是fork的腾讯Shadow到本地。地址是:https://github.com/dhs964057117/Shadow二、生成…

【分享】如何将word格式文档转化为PDF格式

在日常的办公和学习中,我们经常需要将Word文档转换为PDF格式。PDF作为一种通用的文件格式,具有跨平台、易读性高等优点,因此在许多场合下都更为适用。那么,如何实现Word转PDF呢?本文将介绍几种常用的方法,帮…

Git推送本地项目到gitee远程仓库

Git 是一个功能强大的分布式版本控制系统,它允许多人协作开发项目,同时有效管理代码的历史版本。开发者可以克隆一个公共仓库到本地,进行更改后将更新推送回服务器,或从服务器拉取他人更改,实现代码的同步和版本控制。…

Stability AI 推出稳定音频 2.0:为创作者提供先进的 AI 生成音频

概述 Stability AI 的发布再次突破了创新的界限。这一尖端模型以其前身的成功为基础,引入了一系列突破性的功能,有望彻底改变艺术家和音乐家创建和操作音频内容的方式。 Stable Audio 2.0 代表了人工智能生成音频发展的一个重要里程碑,为质量…

PHP算命源码_最新测算塔罗源码_可以运营

功能介绍 八字精批、事业财运、姓名分析、宝宝起名、公司测名、姓名配对、综合详批、姻缘测算、牛年感情、PC版测算、八字合婚、紫微斗数、鼠年运程、月老姻缘、许愿祈福、号码解析、塔罗运势、脱单占卜、感情继续、脱单占卜、塔罗爱情、心理有你、能否复合、暗恋对象、是否分…

JavaScript任务执行模式:同步与异步的奥秘

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…