全志R128 SDK HAL 模块开发指南——GPADC

GPADC

模块介绍

GPADC 是 12bit 采集精度的模数转换模块,支持 4 路通道,模拟输入范围 0-1.8v,最高采样率 1MHZ,并且支持数据比较,自校验功能,同时工作于可配置的四种工作模式:

  • Single mode:在指定的通道完成一次转换并将数据放在响应数据寄存器中;
  • Single-cycle mode:在指定的通道完成一个周期转换并将数据放在响应数据寄存器中;
  • Continuous mode:在指定的通道持续转换并将数据放在响应数据寄存器中;
  • Burst mode:边采样边转换并将数据放入 32 字节的 FIFO,支持中断控制。

一般来说 GPADC 接口用于 KEY 模块按键的读取,一般包括 VOL+、VOL-、HOME、MENU、ENTER 等等,GPADC0 用于 KEY 的电路如上图。AVCC-AP 为 1.8V 的供电,不同的按键按下,GPADC 口的电压不同,CPU 通过对这个电压的采样来确定具体是那一个按键按下。如下图,VOL+、VOL-、MENU、ENTER、HOME对应的电压分别为 0.21V、0.41V、0.59V、0.75V、0.88V。

在这里插入图片描述

模块配置

其 menuconfig 的配置如下:

Kernel Setup --->Drivers Setup --->SoC HAL Drivers --->GPADC devices --->[*] enable gpadc driver[*] enbale gpadc hal APIs Test command

源码结构

GPADC 模块源码结构如下所示:

rtos-hal/
|--hal/source/gpadc/hal_gpadc.c    // hal层接口代码
|--include/hal/sunxi_hal_gpadc.h   // 头文件

模块接口说明

头文件:

#include <sunxi_hal_gpadc.h>

GPADC 初始化接口

GPADC 模块初始化,主要初始化时钟,中断以及采样率配置等

int hal_gpadc_init(void)

参数:

返回值:

  • 0 代表成功
  • 负数代表失败

GPADC 通道配置接口

选择并配置 GPADC 某个通道

hal_gpadc_status_t hal_gpadc_channel_init(hal_gpadc_channel_t channal)

参数:

  • channel:通道号

返回值:

  • 0 代表成功
  • 负数代表失败

GPADC 通道取消配置接口

取消 GPADC 某个通道配置

hal_gpadc_status_t hal_gpadc_channel_exit(hal_gpadc_channel_t channal)

参数:

  • channel:通道号

返回值:

  • 0 代表成功
  • 负数代表失败

GPADC 去初始化接口

GPADC 模块去初始化

hal_gpadc_status_t hal_gpadc_deinit(void)

参数:

返回值:

  • 0 代表成功
  • 负数代表失败

GPADC 注册回调接口

向应用层提供注册回调接口的功能

hal_gpadc_status_t hal_gpadc_register_callback(hal_gpadc_channel_t channal, gpadc_callback_t user_callback)

参数:

  • channel:通道号
  • user_callback:应用层回调接口

返回值:

  • 0 代表成功
  • 负数代表失败

模块使用范例

读取电压

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>#include <hal_log.h>
#include <hal_cmd.h>
#include <sunxi_hal_gpadc.h>int channel = -1;int cmd_test_gpadc(int argc, char **argv)
{int ret = -1;uint32_t vol_data;printf("Run gpadc test\n");if (argc < 2){hal_log_err("usage: hal_gpadc channel\n");return -1;}ret = hal_gpadc_init();if (ret) {hal_log_err("gpadc init failed!\n");return -1;}channel = strtol(argv[1], NULL, 0);if (channel < 0 || channel > CHANNEL_NUM){hal_log_err("channel %d is wrong, must between 0 and %d\n", CHANNEL_NUM);return -1;}hal_gpadc_channel_init(channel);vol_data = gpadc_read_channel_data(channel);printf("channel %d vol data is %u\n", channel, vol_data);hal_gpadc_channel_exit(channel);hal_gpadc_deinit();return 0;
}FINSH_FUNCTION_EXPORT_CMD(cmd_test_gpadc, hal_gpadc, gpadc hal APIs tests)

回调方式读取电压

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>#include <hal_log.h>
#include <hal_cmd.h>
#include <sunxi_hal_gpadc.h>int channel = -1;int sunxigpadc_irq_callback(uint32_t dada_type, uint32_t data)
{int vol_data;data = ((VOL_RANGE / 4096) * data);vol_data = data / 1000;printf("channel %d vol data: %d\n", channel, vol_data);hal_gpadc_channel_exit(channel);hal_gpadc_deinit();return 0;
}int cmd_test_gpadc_callback(int argc, char **argv)
{int ret = -1;uint32_t vol_data;printf("Run gpadc test\n");if (argc < 2){hal_log_err("usage: hal_gpadc channel\n");return -1;}ret = hal_gpadc_init();if (ret) {hal_log_err("gpadc init failed!\n");return -1;}channel = strtol(argv[1], NULL, 0);if (channel < 0 || channel > CHANNEL_NUM){hal_log_err("channel %d is wrong, must between 0 and %d\n", CHANNEL_NUM);return -1;}hal_gpadc_channel_init(channel);hal_gpadc_register_callback(channel, sunxigpadc_irq_callback);return 0;
}FINSH_FUNCTION_EXPORT_CMD(cmd_test_gpadc_callback, hal_gpadc callback, gpadc hal APIs tests callback)

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

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

相关文章

科学高效备考2024年汉字小达人:历年真题详细解析-古诗文专题10

距离2024年第11届汉字小达人比赛还有七个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#xff0c…

JAVA的sort用法详解(二维数组排序,List<>排序,lambada表达式,自定义类型排序)

目录 前言&#xff1a; 一维数组降序&#xff1a; 方法1.Comparator接口&#xff1a; 代码实现&#xff1a; 方法2.Collections.reverseOrder()&#xff1a; 代码实现&#xff1a; 二维数组排序&#xff1a; 代码如下&#xff1a; List<>排序&#xff1a; 代码…

Ansible-1

Ansible是一款自动化运维、批量管理服务器的工具&#xff0c;批量系统配置、程序部署、运行命令等功能。基于Python开发&#xff0c;基于ssh进行管理&#xff0c;不需要在被管理端安装任何软件。Ansible在管理远程主机的时候&#xff0c;只有是通过各种模块进行操作的。 需要关…

Linux 注入依赖环境

文章目录 配置依赖程序安装 JDK安装 Tomcat安装 mysql 配置依赖程序 下面配置依赖程序都以CentOS为例。 安装 JDK 可以直接使用 yum(CentOS) 直接进行安装。 先搜索&#xff0c;确定软件包的完整名称。 yum list | grep jdk再进行安装 进行安装的时候一定要先确保处在“管理…

【详细讲解React 快速入门教程】

&#x1f525;博主&#xff1a;程序员不想YY啊&#x1f525; &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f4ab; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f308;希望本文对您有所裨益&#xff0c;如有…

【C语言】strcmp 的使⽤和模拟实现

前言 这篇文章将要带我们去实现模拟一个strcmp函数 首先我们要知道strcmp函数的定义 strcmp()定义和用法 我们先看一下strcmp在cplusplus网站中的定义 链接: link int strcmp ( const char * str1, const char * str2 );比较两个字符串将 C 字符串 str1 与 C 字符串 str2 …

Java Stream API之reduce方法详解

Java 8引入的Stream API为Java开发者带来了函数式编程的风格&#xff0c;使得数据处理变得更加简洁和高效。在这众多的流操作中&#xff0c;reduce()方法是一个非常强大且灵活的工具&#xff0c;它可以将流中的元素组合起来&#xff0c;生成单一的汇总结果。本文旨在深入探讨re…

ajaxpro CVE-2021-23758 漏洞记录

1. 一般出现在asp.net的站点 打开页面&#xff0c;源代码会看到 类似/ajaxpro/gust_search,wlms.ashx路径 如果有源代码的话&#xff0c;copy aspx all.txt 去掉分号中间空格批量请求。 2. ajaxpro组件存在CVE-2021-23758漏洞&#xff0c;标有属性[AjaxPro.AjaxMethod]或[A…

openssl AF_ALG引擎使用

cmd AF_ALG是Linux提供的一种虚拟接口&#xff0c;用于访问内核中的加密算法。在Linux中&#xff0c;可以使用AF_ALG接口配合加密算法框架&#xff08;Crypto API&#xff09;来进行加密操作。 以下是一个使用AF_ALG和openssl进行加密操作的例子&#xff1a; # 加密 openssl…

C++ 内存泄漏-原因、避免、定位

大家好&#xff01;作为C/C开发人员&#xff0c;内存泄漏是最容易遇到的问题之一&#xff0c;这是由C/C语言的特性引起的。C/C语言与其他语言不同&#xff0c;需要开发者去申请和释放内存&#xff0c;即需要开发者去管理内存&#xff0c;如果内存使用不当&#xff0c;就容易造成…

smarteye server内置对多种第三方协议(28181/RTSP/RTMP)的输入、输出的支持

smarteye server内置支持了多种协议的输入转换、转换输出&#xff0c;包括GB28181、RTSP、RTMP等等。 目前smarteye server可支持的输入、输出的协议有&#xff1a;RTSP in/out, ONVIF in, RTMP in/out&#xff0c;GB28181 in/out。 常用的即smarteye server可作为国标28181…

最新海外投资理财源码 amazon多语言投资理财系统源码 区块链理财项目平台源码 共享充电宝系统

一款新UI的海外多语言刷单系统&#xff0c;支持后台在线添加订单派单、预约派单、余额宝等功能 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88949885 更多资源下载&#xff1a;关注我。

Unity生命周期函数(自己记忆用)

在Unity中&#xff0c;每个游戏对象&#xff08;GameObject&#xff09;都可以附加一个或多个脚本&#xff08;Script&#xff09;&#xff0c;这些脚本继承自MonoBehaviour类。MonoBehaviour类定义了一系列的生命周期函数&#xff0c;这些函数在游戏的不同阶段被自动调用&…

python模糊字符串匹配库fuzzywuzzy

一、概述 Python的fuzzywuzzy库是一个强大的模糊字符串匹配工具&#xff0c;基于Levenshtein距离算法&#xff0c;可用于处理文本相似度匹配任务。本文将深入探讨fuzzywuzzy库的各种功能和用法&#xff0c;结合详细的描述和丰富的示例代码&#xff0c;带领大家全面了解这个工具…

38. 单调递增的数字(力扣LeetCode)

文章目录 738. 单调递增的数字题目描述思路贪心算法代码逻辑梳理&#xff1a; 738. 单调递增的数字 题目描述 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&am…

LabVIEW单片机的废气再循环EGR检测系统

LabVIEW单片机的废气再循环EGR检测系统 实现了一种基于LabVIEW和STM32F103VET6单片机的EGR&#xff08;废气再循环&#xff09;检测系统&#xff0c;监测和控制船用二冲程柴油机的EGR运行状态。通过替代传统的NI采集卡&#xff0c;系统不仅降低了成本&#xff0c;同时也提升了数…

C++经典面试题目(七)

1、什么是引用&#xff1f;请解释引用的概念和用法。 当谈论引用时&#xff0c;指的是在 C 中的一种类型。引用提供了对变量的别名&#xff0c;它允许通过不同的名称访问同一个变量。引用在 C 中常用于函数参数传递、返回值传递和操作符重载等场景。 引用的概念和用法&#x…

SECFLOAT: Accurate Floating-Point meets Secure 2-Party Computation

2022 IEEE Symposium on Security and Privacy (SP) 目录 1.概述2.SECFLOAT设计2.1 为什么标准库不适合2PC?2.3 本文贡献2.2 SECFLOAT的设计2.2.1为什么它的设计可以解决问题&#xff1f;2.2.2实现 1.概述 问题&#xff1a; 密码学工作中使用的现有函数是不精确的&#xff0…

ROS2从入门到精通0-4:ROS2核心架构与常用指令大全

目录 0 专栏介绍1 ROS2核心架构1.1 工作空间1.2 功能包 2 ROS2常用指令2.1 功能包相关2.2 节点运行相关2.3 话题相关2.4 参数相关2.4 录制包、播放包相关2.5 服务相关2.6 动作相关2.7 生命周期相关 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布…

八道Python入门级题目及答案详解

前言 介绍Python作为一门流行的编程语言&#xff0c;易学易用的特点。强调通过练习题目来加深对Python语法和编程概念的理解。 题目一&#xff1a;计算两个数的和 描述&#xff1a;编写一个Python程序&#xff0c;计算两个数的和&#xff0c;并输出结果。举例&#xff1a;输…