对 FINTEK F81866A 芯片组上的 GPIO 引脚进行编程

2024-04-23

我有一个德承DE-1000 http://www.cincoze.com/goods_info.php?id=10工业 PC,具有芬泰克 F81866A http://www.fintek.com.tw/index.php/i-o-controller-and-i-f-management/item/59-f81866a芯片组。我必须管理 DIO 引脚来读取物理按钮的输入并设置 LED 的开/关。我有 C++ 编程经验,但没有低/硬件级别的经验。

在PC附带的文档中,有以下C代码:

#define AddrPort 0x4E
#define DataPort 0x4F

//<Enter the Extended Function Mode>
WriteByte(AddrPort, 0x87)
WriteByte(AddrPort, 0x87) //Must write twice to entering Extended mode

//<Select Logic Device>
WriteByte(AddrPort, 0x07)
WriteByte(DataPort, 0x06)
//Select logic device 06h

//<Input Mode Selection> //Set GP74 to GP77 input mode
WriteByte(AddrPort, 0x80) //Select configuration register 80h
WriteByte(DataPort, 0x0X)
//Set (bit 4~7) = 0 to select GP 74~77 as Input mode.

//<input Value>
WriteByte(AddrPort, 0x82) // Select configuration register 82h
ReadByte(DataPort, Value) // Read bit 4~7(0xFx)= GP74 ~77 as High.

//<Leave the Extended Function Mode>
WriteByte(AddrPort, 0xAA)

据我了解,上面的代码应该读取四个输入 PIN 的值(因此每个 PIN 应该读取 1),但我真的很难理解它实际上是如何工作的。我已经理解了逻辑(选择一个地址并向其读/写一个十六进制值),但我无法弄清楚什么样的C指令WriteByte() and ReadByte()是。另外我也不明白哪里Value在行中ReadByte(DataPort, Value)来自。它应该一起读取 4 个 PIN,因此它应该是某种“字节”类型,并且它的第 4-7 位应该包含 1,但我再次无法真正理解该行的含义。

我找到了一个回答类似的芯片 https://stackoverflow.com/questions/24484193/fintek-f71869a-gpio-control,但这并没有帮助我理解。

请给我建议或指出一些相关文档。


该芯片看起来相当典型超级输入/输出控制器 https://en.wikipedia.org/wiki/Super_I/O,它基本上是所有“慢”外设都组合到单个芯片组中的集线器。

Coreboot 有一个 wiki 页面讨论如何访问超级I/O https://www.coreboot.org/Developer_Manual/Super_IO.


在PC架构上,Port I/O是使用特殊的CPU指令来完成的,即in and out。这些是特权指令,只能从内核模式驱动程序(Ring 0)或已被授予 I/O 特权的用户空间进程使用。

幸运的是,这在 Linux 中很容易。查看手册页outb和朋友 http://man7.org/linux/man-pages/man2/outb.2.html.

您可以使用 ioperm(2) 或 iopl(2) 告诉内核允许用户空间应用程序访问相关 I/O 端口。如果不这样做将导致应用程序收到分段错误。

因此我们可以将您的函数调整为 Linux 环境,如下所示:

/* Untested: Use at your own risk! */
#include <sys/io.h>
#include <stdio.h>

#define ReadByte(port)          inb(port)
#define WriteByte(port, val)    outb(val, port)

int main(void)
{
    if (iopl(3) < 0) {
        fprintf(stderr, "Failed to get I/O privileges (are you root?)\n");
        return 2;
    }


    /* Your code using ReadByte / WriteByte here */
}

Warning

使用此方法直接与超级 IO 对话时,您应该非常小心,因为您的操作系统几乎肯定具有以下设备驱动程序:also与芯片对话。

The right实现此目的的方法是编写一个与其他内核代码正确协调的设备驱动程序,以避免并发访问设备。

Linux 内核提供对至少一些超级 I/O 设备的 GPIO 访问;将其中之一移植到您的平台应该很简单。看IT87xx 芯片组的拉取请求 https://lwn.net/Articles/487166/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 FINTEK F81866A 芯片组上的 GPIO 引脚进行编程 的相关文章

  • SL4 AutoCompleteBox 重复筛选结果问题

    我在 AutoCompleteBox 过滤方面遇到问题 它似乎记住了之前的过滤器 例如 我输入 A 它会返回 1 项 我删除 A 并输入 Z 这应该返回 1 项 问题是它返回 A 过滤器加上 Z 的结果 我删除 Z 并输入 S 这会带回 2
  • 必须打开存储才能执行此操作 - System.IO.Packaging.Package

    我正在使用 System IO Packaing Package 类来压缩文件 我的应用程序的多个实例可以同时运行 并读取和保存文件 当处理小文件时 一切似乎都很好 但是当涉及大文件时 如果应用程序的两个实例同时保存 我会收到一个异常 消息
  • 在运行时设置 DataGridView 上的 DataFormatString?

    是否可以在运行时设置 ASP NET DataGridView 中的列或单元格的 DataFormatString 属性 这应该有效 BoundField priceField grid Columns 0 as BoundField pr
  • 在 GCC 和 Clang 下,使用 lambda 的简单 RAII 包装器的复制初始化意外失败

    我在创建一个简单的 RAII 包装器时遇到了一个意想不到的问题 更不用说下面代码的逻辑不完整性了 复制构造函数和赋值运算符未删除等 这意味着是一个SSCCE 令我印象深刻的是复制初始化我的包装器与临时 lambda 的结果会导致编译错误 而
  • C# 中附加/分离事件处理程序的不同方式有什么区别

    我的问题有两个部分 首先 我们可以通过以下两种方式附加事件处理程序 myObject MyEvent new EventHandler MyHandler myObject MyEvent MyHandler 据我了解 这两者是等价的 在第
  • 如何在 Windows 窗体中运行屏幕保护程序作为其背景?

    如何在 Windows 窗体中运行屏幕保护程序作为其背景 用户还可以在屏幕保护程序运行时与表单控件进行交互 为什么这个 我们有一个案例 需要在用户时运行 Windows Bubbles 屏幕保护程序 可以继续与表单控件交互吗 您可以使用以下
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 使用 openssl 检查服务器安全协议

    我有一个框架应用程序 它根据使用方式连接到不同的服务器 对于 https 连接 使用 openssl 我的问题是 我需要知道我连接的服务器是否使用 SSL 还是 TLS 以便我可以创建正确的 SSL 上下文 目前 如果我使用错误的上下文尝试
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • QThread - 使用槽 quit() 退出线程

    我想在线程完成运行时通知对象 但是 我无法让线程正确退出 我有以下代码 处理器 cpp thread new QThread tw new ThreadWorker connect tw SIGNAL updateStatus QStrin
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • 将 tar.gz 转换为 zip

    我的 Ubuntu 网络服务器上有大量 gzip 压缩档案 我需要将它们转换为 zip 我认为这可以通过脚本来完成 但是我应该使用什么语言 以及如何解压缩和重新压缩文件 我会用一个bash 1 单行 for f in tar gz do r
  • 任务编辑文档预览组件Alfresco

    第一个问题 我想以工作流程任务编辑的形式实现文档预览 我该怎么做 我尝试去适应document details xml and document details ftl to workflow details xml and workflo
  • R 中按值传递

    当尝试调用 grid arrange 将多个图放在同一个 ggplot2 图上时 我首先构建一个我想要的图的列表 然后我构建相应的参数列表来调用 grid arrange 如所解释的在上一个问题中 https stackoverflow c
  • 使用登录名签出 svn+ssh

    我想从存储库中签出一些内容 但是我输入 svn co svn ssh URL 我被要求输入密码 我想他使用的用户名来自我的控制台 但两者不一样 那么我如何使用不同的登录名使用 svn ssh 签出某些内容呢 SSH 允许您在连接 URL 中
  • 通过python从netCDF中提取特定位置的数据

    我是 Python 的新手 也是 NetCDF 的新手 如果我不清楚 请道歉 我有一个包含多个变量的 nc 文件 我需要以新的顺序从这些 nc 文件中提取数据 我的 nc 文件有 8 个变量 经度 纬度 时间 u10 v10 swh mwd
  • 如何“安装”Action Bar Sherlock?

    我正在尝试使用 Action Bar Sherlock 构建示例项目 Action Bar Styled 我在这里下载包含 ABS 的 zip 文件http actionbarsherlock com http actionbarsherl
  • ReactJS onclick 添加或删除类到另一个元素

    我正在努力将我的普通 jQuery 代码转换为 React JS 我是 React 新手 我有以下代码 add click function nav addClass show remove click function nav remov
  • 如何将单个部分中的 Sphinx 章节分成不同的文件?

    我正在使用出色的 Sphinx 工具来创建一些文档 并且我试图通过将同一部分的章节分成单独的文件来保持代码库的模块化形式 请参阅此处了解 章节 和 部分 的定义 http www sphinx doc org en stable rest
  • Homestead 给出 404 Not Found

    我正在尝试启动并运行 Homestead 2 0 以用于 Laravel 的本地开发 我跟着Laracast https laracasts com lessons say hello to laravel homestead two 但我
  • 画布已被跨源数据本地图像污染

    这个问题已经被问了很多次 但我只是不明白为什么这种情况会发生在我身上 基本上 我有一个画布和一个图像 当我尝试这样做时 var canvas document getElementById somecanvas var ctx canvas
  • 使用 NodeJS 和 Restify 重定向客户端

    我正在使用 NodeJS Restify 和 PassportJS 为 SPA 构建 REST 后端以进行身份 验证 除了最后一步之外 一切正常 即将客户端从后端 login facebook callback 重定向到应用程序的主页 我在
  • Ninject + ASP.NET MVC + InRequestScope

    我的 Ninject 有问题 我的绑定规则 this Bind
  • 从搜索中排除文件夹,但不从项目列表中排除

    我有几个不同的项目具有相同的core 我需要的只是将所有非当前项目标记为excluded以避免搜索它们 简单搜索 shift cmd n 等 换句话说 我想获得以下搜索结果core current project 有什么办法吗close一些
  • Angular:如何以法语格式显示日期

    我是 Angular 初学者 我阅读了 Angular 的文档 对于这样一个基本的事情来说很难 我希望我的应用程序中的日期和其他内容具有法语区域设置 而不是默认的 en US 我开始阅读这篇 Angular文档 https angular
  • 在 showModalBottomSheet 外部单击时,如何控制传递给 Navigator.pop() 的内容?

    我启动一个模态底部工作表 然后使用返回的数据作为其未来 var modalFuture showModalBottomSheet modalFuture then data Use data 我通过以下方式从模态小部件返回数据 Naviga
  • 为什么不允许 constexpr 局部变量作为默认函数参数?

    我想我明白为什么 C 不允许local变量作为默认函数参数 int main auto local 1024 auto lambda auto arg1 local illegal use of local variable as defa
  • 如何获取通知下拉背景颜色,并在启用夜间模式时确定最佳文本颜色?

    最近 我的用户向我发送了以下屏幕截图 当时启用了 Android 9 0 Pie 与 Android 操作系统夜间模式 正如您所看到的 股票名称不可见 因为股票名称采用了黑色 在正常的白色主题中 它应该如下所示 这是我用来突出显示文本颜色的
  • 架构问题:GWT 还是 Vaadin 创建桌面应用程序?

    我们计划创建一个提要阅读器 as a Windows 桌面和 iPad 应用程序 正如我们希望能够显示网站 AND 运行 我们自己的 JavaScript在此应用程序中 我们考虑将应用程序作为 HTML CSS JavaScript 交付
  • 我应该将 FLV 文件放在哪里才能在本地 Red5 服务器上进行流式传输?

    我安装了最新的 Red5 服务器 但我不确定将 flv 文件放在哪里来进行流式传输 没有像我在网上找到的一些教程那样的 streams 或 ofla 目录 我应该将 flv 文件放在哪里来进行流式传输 Red5 附带了一些演示 但默认情况下
  • 对 FINTEK F81866A 芯片组上的 GPIO 引脚进行编程

    我有一个德承DE 1000 http www cincoze com goods info php id 10工业 PC 具有芬泰克 F81866A http www fintek com tw index php i o controll