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

本文主要是介绍正点原子[第二期]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" 寄存器。

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

 

这篇关于正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-9.1-LED灯(模仿STM32驱动开发实验)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951739

相关文章

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1