新唐NUC980使用记录(5.10.y内核):在用户应用中使用GPIO

2023-10-31

目的

GPIO是最基础的外设,使用频率也非常高,这篇文章将简单体验在NUC980 Liunx用户应用中使用GPIO功能。

这篇文章中内容均在下面的开发板上进行测试:
《新唐NUC980使用记录:自制开发板(基于NUC980DK61YC)》

开发板中提供了两组共四个直连到GPIO口上的轻触按钮和发光二极管,可以方便地进行GPIO功能测试:
在这里插入图片描述

这篇文章是在下面文章基础上进行的:
新唐NUC980使用记录(5.10.y内核):访问以太网(LAN8720A) & 启用SSH

使用参考与演示

使用参考

在用户应用中使用GPIO完全可参考之前的文章:
新唐NUC980使用记录:在用户应用中使用GPIO

根据上面文章这里用到的几个GPIO口编号换算如下:
PB13 = 32 x 1(PA) + 13 = 45
PF10 = 32 x 5(PA/PB/PC/PD/PE) + 10 = 170
PE10 = 32 x 4(PA/PB/PC/PD) + 10 = 138
PE12 = 32 x 4(PA/PB/PC/PD) + 12 = 140

存在的问题

前面的文章中有一些引脚和其它功能有冲突,通过修改内核选项来避开冲突。这篇文章中因为 5.10.y内核 默认使用设备树了,所以通过修改设备树来处理该问题。首先尝试下看看会有哪些引脚有冲突:
在这里插入图片描述

可以看到除了 PF10 ,其它引脚都被占用了。

问题定位

查看内核目录下 arch/arm/boot/dts/nuc980.dtsi 文件,可以看到相关引脚引用情况:
在这里插入图片描述

上面 pins = < ... > 中每一行代表一个 pin 。每个 pin 第一个值表示第几组,GPIOA = 0、GPIOB = 1、GPIOC = 2,以此类推;第二个值表示这组的第几个口,这里0xD=13,结合前面的这个 pin 就是 PB13 ;第三个值表示 multi-function ,可以看到这里等于2,和前面冲突信息中一致。

在这里插入图片描述

可以看到 PB13 默认是被用于 外部中断2 了。

同样方法我们可以找到 PE10 和 PE12 :
在这里插入图片描述
在这里插入图片描述

可以看到PE10和PE12被usbh_ehci占用了。

修改设备树

定位到问题之后就可以处理的,这里修改我们使用的设备树文件 nuc980-dev-v1.0.dts

# cd ~/nuc980-sdk/NUC980-linux-5.10.y/
gedit arch/arm/boot/dts/nuc980-dev-v1.0.dts

内容修改要点如下(完整的文件可以参考本文结尾):

/ {
	apb {
		gpio: gpio@b0004000 {
			pinctrl-0 = <>;
			eint2-config = <0 0 0>;
			eint3-config = <0 0 0>;
		};
	};
	ahb {
		usbh_ehci@b0015000 {
			pinctrl-0 = <>; /*disable PWREN and OVC*/
			ov_active = <1>; /*disable PWREN and OVC*/
			status = "okay";
		};
	};
};

修改完成后编译:

# 设置编译工具链
# export ARCH=arm; export CROSS_COMPILE=arm-buildroot-linux-gnueabi-
# export PATH=$PATH:/home/nx/nuc980-sdk/buildroot-2023.02/output/host/bin

# 编译生成设备树文件
make dtbs

# 编译完成后拷贝到电脑上再拷贝到SD卡中
# sudo cp arch/arm/boot/dts/nuc980-dev-v1.0.dtb /media/sf_common/

# 我这里开发环境和开发板在同一局域网中,所以可以直接通过网络将dtb文件拷贝到开发板上
# 在开发板中挂载boot分区
# mount /dev/mmcblk0p1 /mnt/
# 在ubuntu中使用scp命令拷贝dtb文件到开发板上
# scp arch/arm/boot/dts/nuc980-dev-v1.0.dtb root@192.168.31.142:/mnt/
# 拷贝完成后重启开发板即可测试
# reboot

使用测试

使用的方式参考之前文章即可,这里稍微演示下几个引脚的导出,证明前面调整确实解决了冲突:
在这里插入图片描述

总结

GPIO是最基础的外设,使用频率非常高,同时在用户应用中使用GPIO也是比较简单的,基础的使用参考上面这些内容就差不多了。

设备树文件内容

/*
 * Device Tree Source for NUC980 DEV board
 *
 * Copyright (C) 2018 Nuvoton Technology Corp.
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */
/dts-v1/;

#include "nuc980.dtsi"

/ {
	model = "Nuvoton NUC980 DEV V1.0";
	compatible = "nuvoton,nuc980-dev-v1.0", "nuvoton,nuc980";

	chosen {
		bootargs = "console=ttyS0,115200n8 noinitrd rootfstype=ext4 root=/dev/mmcblk0p2 rw rootwait mem=64M";
	};

	apb {
		uart1: serial@b0071000 {
			status = "disabled";
		};

		uart2: serial@b0072000 {
			status = "disabled";
		};

		uart3: serial@b0073000 {
			status = "disabled";
		};

		uart4: serial@b0074000 {
			status = "disabled";
		};

		uart5: serial@b0075000 {
			status = "disabled";
		};

		uart6: serial@b0076000 {
			status = "disabled";
		};

		uart7: serial@b0077000 {
			status = "disabled";
		};

		uart8: serial@b0078000 {
			status = "disabled";
		};

		uart9: serial@b0079000 {
			status = "disabled";
		};

		can0: can@b00a0000 {
			status = "disabled";
		};

		can1: can@b00a1000 {
			status = "disabled";
		};

		rtc: rtc@b0041000 {
			status = "disabled";
		};

		gpio: gpio@b0004000 {
			pinctrl-0 = <>;
			eint2-config = <0 0 0>;
			eint3-config = <0 0 0>;
		};

		nadc: nadc@b0043000 {
			status = "disabled";
		};

		pwm0: pwm@b0058000 {
			status = "disabled";
		};

		pwm1: pwm@b0059000 {
			status = "disabled";
		};


		etimer0: etimer0@b0050000 {
			status = "disabled";
		};

		etimer1: etimer1@b0050100 {
			status = "disabled";
		};

		etimer2: etimer2@b0051000 {
			status = "disabled";
		};

		etimer3: etimer3@b0051100 {
			status = "disabled";
		};

		i2c0: i2c0@b0080000 {
			status = "disabled";
		};

		i2c1: i2c1@b0081000 {
			status = "disabled";
			pinctrl-0 = <&pinctrl_i2c1_PB>;
		};


		i2c2: i2c2@b0082000 {
			status = "disabled";
			pinctrl-0 = <&pinctrl_i2c2_PB>;
		};

	};

	ahb {

		usbh_ehci@b0015000 {
			pinctrl-0 = <>; /*disable PWREN and OVC*/
			ov_active = <1>;/*disable PWREN and OVC*/
			status = "okay";
		};
		usbh_ohci@b0017000{
			status = "okay";
		};

		usbdev@b0016000 {
			status = "okay";
		};

		fmi@b0019000 {
			status = "disabled";
		};

		sdh@b0018000 {
			status = "okay";
		};

		emac0@b0012000 {
			status = "okay";
		};
		emac1@b0022000 {
			status = "disabled";
		};
		ccap0@b0024000 {
			status = "disabled";
		};
		i2c_gpio0: i2c-gpio-0 {
			status = "disabled";
		};
		ccap1@b0014000 {
			status = "disabled";
		};
		i2c_gpio1: i2c-gpio-1 {
			status = "disabled";
		};
		dma@b0008000 {
			status = "okay";
		};

		i2s: i2s@b0020000 {
			status = "disabled";
		};

		i2s_pcm: i2s_pcm {
			status = "disabled";
		};

		sound {
			compatible = "nuvoton,nuc980-audio";
			i2s-controller = <&i2s>;
			i2s-platform = <&i2s_pcm>;
			status = "disabled";
		};
		ebi: ebi@b0010000 {
			status = "disabled";
		};
	};
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新唐NUC980使用记录(5.10.y内核):在用户应用中使用GPIO 的相关文章

随机推荐

  • 永久设置pip指定国内镜像源(含Windows和Linux)

    永久设置pip指定国内镜像源 含Windows和Linux 前言 首先来看一下Python临时指定安装的镜像源 命令格式 sudo pip3 install 包名 i 镜像源url eg sudo pip3 install redis i
  • MySQL_第00章_MySQL数据库基础篇大纲

    第00章 写在前面 一 MySQL数据库基础篇大纲 MySQL 数据库基础篇分为 5 个篇章 1 数据库概述与MySQL安装篇 第 01 章 数据库概述 第 02 章 MySQL 环境搭建 2 SQL之SELECT使用篇 第 03 章 基本
  • 决策树的训练过程

    决策树 以分类有毒和无毒蘑菇为例 这里的原始数据是agaricus lepiota data文件 每一行代表一个样本 每一列代表一个特征 这里一共8024个样本 每个样本有22个特征 其中第一列是样本标签 标示有毒 p 和无毒 e 除此之外
  • UE4游戏提取的通用步骤(21_9_8)

    准备工具 1 UEViewer最新版本 Umodel的新名 2 UnrealPakTool最新版本 用于查看uproject文件确认版本号 3 Uasset Reader新版 用于查看Uasset的内容 可有可无 4 NotePad 文本查
  • C语言实现通讯录

    对于通讯录中的每一个成员 有姓名 年龄 电话等信息 所以可以通过结构体实现通讯录 通讯录的功能如下 1 可以保存自定义最大数量人的信息 年龄 age 性别 sex 姓名 name 地址 addr 电话 tele 2 可以对存储的信息进行增删
  • 搭建Harbor2.1.0最新版私有镜像仓库

    文章目录 搭建Harbor仓库 Harbor是什么 为什么会用到Harbor Harbor的三种安装方式 离线安装 测试推送镜像 搭建Harbor仓库 Harbor是什么 为什么会用到Harbor harbor是构建企业级私有docker镜
  • 【转】C++类(Class)总结,经典易懂

    C 类 Class 总结 一 C 类的定义 C 中使用关键字 class 来定义类 其基本形式如下 class 类名 public 行为或属性 protected 行为或属性 private 行为或属性 示例 定义一个点 Point 类 具
  • Niushop开源商城系统-宝塔部署

    1 登录宝塔网址 在网站 添加站点 2 上传文件到根目录 3 选择之前在官网下载下的源码进行上传 4 上传到根目录之后进行解压 5 检查php版本以及php fileinfo扩展是否已安装 6 访问搭好的项目 用域名访问来进行安装 7 安装
  • Latex添加空格

    Latex添加空格
  • zabbix使用手动、自动、使用api添加agent

    添加主机 开启一个server2 装上zabbix agent yum install zabbix agent 4 0 5 1 el7 x86 64 rpm y 现在server1上添加 上一篇文章的快速搭建zabbix的方法 手动添加
  • 【postgres】3、源码结构

    文章目录 PostgreSQL的使用形态 PostgreSQL的结构 Potgres 常驻进程 Postgres 子进程 其他的进程 Writer process WAL writer process Archive process sta
  • 大对象属性JPA映射

    大对象类型的数据库表字段 以MySQL为例 保存字符数据的数据库表字段类型一般选择char varchar nchar nvarchar 保存二进制数据的数据库表字段类型一般选择binary varbinary 但是 这些类型保存的数据长度
  • R语言机器学习之caret包详解(二:模型的训练以及调参)

    R语言机器学习之caret包详解 二 模型的训练以及调参 前言 caret包模型调优的策略 示例 以及一些小tips 前言 在之前的博客中我们详细介绍过了数据的拆分策略 各种数据处理的方法 各种交叉验证的方法 并且以示例介绍了R函数crea
  • java ssh 远程执行_Java SSH远程执行Shell脚本实现(转)

    远程执行shell脚本类 author l public classRmtShellExecutor privateConnection conn 远程机器IP privateString ip 用户名 privateString usr
  • JavaScript之数据类型

    一 数据类型 JavaScript中有7中数据类型 分为基本数据类型和引用数据类型两大类 1 基本数据类型 Number 数字 整数或浮点数 例如3 14或 42 String 字符串 字符串是一系列字符 例如 Hello World Bo
  • IsKindOf RUNTIME_CLASS

    CObject IsKindOf BOOL IsKindOf const CRuntimeClass pClass const This function tests pClass to see if 1 it is an object o
  • webpack loader执行顺序 css-loader和style-loader的底层执行原理

    我们在使用webpack对代码进行处理时 难免会用到loader对文件进行处理 多个loader对一个文件进行处理 难免会涉及到哪些loader先执行的问题 下面让我们来了解一下 首先 我们所写的loader是从下到上执行的 如下图 假设存
  • openGL之API学习(二零八)客户端 服务器端 client server

    Client 客户端 存储在CPU存储器中的 并且在应用程序中执行 或者在主系统内存的驱动程序中执行 驱动程序会将渲染命令和数组组合起来 发送给服务器执行 Server 服务器 在PC或Mac电脑上 服务器指的其实就是图形加速卡上的硬件和内
  • 雷达原理_有源干扰_间歇采样直接、重复、循环转发干扰_含MATLAB实现代码

    间歇采样直接 重复 循环转发干扰 间歇采样转发干扰是在雷达脉冲周期内对雷达信号进行间歇采样 并通过干扰机将采样的信号进行处理和转发 从而生成相干的假目标信号 这种干扰方式的原理可分为直接转发 重复转发和逐次循环转发三种方式 直接转发是指在两
  • 新唐NUC980使用记录(5.10.y内核):在用户应用中使用GPIO

    文章目录 目的 使用参考与演示 使用参考 存在的问题 问题定位 修改设备树 使用测试 总结 设备树文件内容 目的 GPIO是最基础的外设 使用频率也非常高 这篇文章将简单体验在NUC980 Liunx用户应用中使用GPIO功能 这篇文章中内