OpenHarmony(鸿蒙南向)——平台驱动指南【DAC】

往期知识点记录:

  • 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
  • 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
  • 持续更新中……

概述

功能简介

DAC(Digital to Analog Converter)是一种通过电流、电压或电荷的形式将数字信号转换为模拟信号的设备,主要用于:

  • 作为过程控制计算机系统的输出通道,与执行器相连,实现对生产过程的自动控制。

  • 在利用反馈技术的模数转换器设计中,作为重要的功能模块呈现。

DAC接口定义了完成DAC传输的通用方法集合,包括:

  • DAC设备管理:打开或关闭DAC设备。

  • DAC设置目标值:设置DAC设备需要将数字信号转成模拟信号的目标值。

基本概念

  • 分辨率

分辨率指的是DAC模块能够转换的二进制位数,位数越多分辨率越高。

  • 转换精度

精度是指输入端加有最大数值时,DAC的实际输出值和理论计算值之差,DAC转换器的转换精度与DAC转换器的集成芯片结构和接口电路配置有关。理想情况下,DAC的转换精度越小越好,因此为了获得更高精度的DAC转换结果,首先要保证选择的DAC转换器具备足够高的分辨率。其次,接口电路的器件或电源存在误差时,会造成DAC转换的误差,若这些误差超过一定程度,就会导致DAC转换错误。

  • 转换速度

转换速度一般由建立时间决定。从输入由全0突变为全1时开始,到输出电压稳定在FSR±½LSB范围(或以FSR±x%FSR指明范围)内为止,这段时间称为建立时间,它是DAC的最大响应时间,所以用它衡量转换速度的快慢。

满量程范围FSR(Full Scale Range),是指DAC输出信号幅度的最大范围,不同的DAC有不同的满量程范围,该范围可以用正、负电流或者正、负电压来限制。

最低有效位LSB(Least Significant Byte),指的是一个二进制数字中的第0位(即最低位)。

运作机制

在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型配置器),如果采用独立服务模式,则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。DAC模块接口适配模式采用统一服务模式(如图1)。

DAC模块各分层的作用为:接口层提供打开设备、写入数据和关闭设备的接口。核心层主要提供绑定设备、初始化设备以及释放设备的能力。适配层实现其它具体的功能。

说明
核心层可以调用接口层的函数,核心层通过钩子函数调用适配层函数,从而适配层可以间接的调用接口层函数,但是不可逆转接口层调用适配层函数。

图 1 DAC统一服务模式

约束与限制

DAC模块当前仅支持轻量和小型系统内核(LiteOS-A)。

使用指导

场景介绍

DAC模块的主要工作是以电流、电压或电荷的形式将数字信号转换为模拟信号,主要应用于音频设备中。日常所见的音响、耳机等,均使用DAC模块作为数模转换的通道。

接口说明

DAC模块提供的主要接口如下所示,具体API详见//drivers/hdf_core/framework/include/platform/dac_if.h。

表 1 DAC驱动API接口功能介绍

接口名接口描述
DevHandle DacOpen(uint32_t number)打开DAC设备。
void DacClose(DevHandle handle)关闭DAC设备。
int32_t DacWrite(DevHandle handle, uint32_t channel, uint32_t val)设置DA目标值。

开发步骤

使用DAC设备的一般流程如图2所示。

图 2 DAC使用流程图

打开DAC设备

在进行DA转换之前,首先要调用DacOpen打开DAC设备,打开函数如下所示:

DevHandle DacOpen(uint32_t number);
c

表 2 DacOpen参数和返回值描述

参数参数描述
numberuint32_t类型,DAC设备号。
返回值返回值描述
NULL打开DAC设备失败。
设备句柄打开的DAC设备句柄。

假设系统中存在2个DAC设备,编号从0到1,现在打开1号设备。

DevHandle dacHandle = NULL;    // DAC设备句柄// 打开DAC设备
dacHandle = DacOpen(1);
if (dacHandle == NULL) {HDF_LOGE("DacOpen: open dac fail.\n");return NULL;
}
c
设置DA目标值
int32_t DacWrite(DevHandle handle, uint32_t channel, uint32_t val);
c

表 3 DacWrite参数和返回值描述

参数参数描述
handleDevHandle类型,DAC设备句柄。
channeluint32_t类型,DAC设备通道号。
valuint32_t类型,设置DA的值。
返回值返回值描述
HDF_SUCCESS写入DA目标值成功
负数写入DA目标值失败
// 通过DAC_CHANNEL_NUM设备通道写入目标val值
int32_t ret;
ret = DacWrite(dacHandle, DAC_CHANNEL_NUM, val);
if (ret != HDF_SUCCESS) {HDF_LOGE("DacWrite: tp DAC write reg fail!,ret:%d", ret);DacClose(dacHandle);return ret;
}
c
关闭DAC设备

DAC通信完成之后,需要关闭DAC设备,关闭函数如下所示:

void DacClose(DevHandle handle);
c

表 4 DacClose参数和返回值描述

参数参数描述
handleDAC设备句柄。
返回值返回值描述

关闭DAC设备示例:

DacClose(dacHandle);    // 关闭DAC设备
c

使用实例

DAC设备的具体使用方式可以参考如下示例代码,示例代码步骤主要如下:

  1. 根据设备号DAC_DEVICE_NUM打开DAC设备得到设备句柄。

  2. 通过DAC的设备号以及设备通道设置val的值,如果写入失败则关闭设备句柄。

  3. 访问完毕DAC设备后,则关闭该设备句柄。

运行结果:根据输入的val通过打印日志得到输出的结果。

#include "dac_if.h"          // DAC标准接口头文件
#include "hdf_log.h"         // 标准日志打印头文件// 设备号0,通道号1 
#define DAC_DEVICE_NUM 0
#define DAC_CHANNEL_NUM 1// DAC例程总入口 
static int32_t TestCaseDac(void)
{// 设置要写入的val值uint32_t val = 2;int32_t ret;DevHandle dacHandle;// 打开DAC设备 dacHandle = DacOpen(DAC_DEVICE_NUM);if (dacHandle == NULL) {HDF_LOGE("%s: Open DAC%u fail!", __func__, DAC_DEVICE_NUM);return -1;}// 写入数据 ret = DacWrite(dacHandle, DAC_CHANNEL_NUM, val);if (ret != HDF_SUCCESS) {HDF_LOGE("%s: tp DAC write reg fail!:%d", __func__, ret);DacClose(dacHandle);return -1;}// 访问完毕关闭DAC设备 DacClose(dacHandle);HDF_LOGI("%s: function tests end.", __func__);return 0;
}

最后

经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?

为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

在这里插入图片描述

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

鸿蒙开发面试真题(含参考答案):

在这里插入图片描述

《OpenHarmony源码解析》:

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片
在这里插入图片描述

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

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

相关文章

LLM - 使用 RAG (检索增强生成) 多路召回 实现 精准知识问答 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142629289 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 RAG (R…

windows下 Winobj.exe工具使用说明c++

1、winobj.exe工具下载地址 WinObj - Sysinternals | Microsoft Learn 2、接下来用winobj.exe查看全局互斥&#xff0c;先写一个小例子 #include <iostream> #include <stdlib.h> #include <tchar.h> #include <string> #include <windows.h>…

【Vue】从后端返回数据如何保留文本的格式,包括换行

目录 一、使用场景 二、解决方案一&#xff1a;pre标签 三、解决方案二&#xff1a;v-html 一、使用场景 我数据库有个字段是带有换行符的varchar类型&#xff0c;比如有值为&#xff1a; 物质名称&#xff1a;空气\n温度&#xff1a;10\n压力&#xff1a;10 那么这种情况下…

VS2017安装Installer Projects制作Setup包

下载安装扩展包 VS2017默认未安装Installer Projects Package&#xff0c;需要联机下载&#xff1a; 也可网页上下载离线InstallerProjects.vsix文件&#xff1a; https://visualstudioclient.gallerycdn.vsassets.io/extensions/visualstudioclient/microsoftvisualstudio20…

字符串相关知识

目录 一、Java中的字符串 1. 定义与创建 2. 字符串操作 &#xff08;1&#xff09;连接 &#xff08;2&#xff09;获取长度 &#xff08;3&#xff09;查找子串 &#xff08;4&#xff09;字符串比较 &#xff08;5&#xff09; 字符串转换 &#xff08;6&#xff09…

Python pyppeteer 与playwright 模拟浏览器请求 部署服务器遇到的坑

在服务器部署遇到的问题 在服务器上部署后如果遇到代码执行卡主问题 通过debug 显示 代码到 browser await launch(headlessFalse)卡主了 ,由于服务器没有浏览器的图形化环境,所以只能将修改为无头浏览器的模式启动 browser await launch(headlessTrue) async def crawling…

FPGA IP 和 开源 HDL 一般去哪找?

在FPGA开发的世界中&#xff0c;IP核和HDL模块是构建复杂数字系统的基石。它们如同乐高积木&#xff0c;让开发者能够快速搭建和重用经过验证的电路功能。但你是否曾感到迷茫&#xff0c;不知道从哪里寻找这些宝贵的资源&#xff1f;本文将为你揭开寻找FPGA IP核和HDL模块资源的…

Tesla T4 P2P测试

Tesla T4 P2P测试 一.测试环境二.测试步骤1.获取设备信息2.查看PCIE拓扑结构3.选择9B、9E这二张4.查看逻辑设备ID5.设置环境变量(需要用逻辑设备ID,通过UUID跟smi看到的物理ID关联)6.不同地址的原子操作2.P2P与非P2P的性能差异3.GPU带宽测试 Tesla T4 P2P测试 通过物理ID找到逻…

2024PT展,现场精华

9月25-27日&#xff0c;2024年国际信息通信展&#xff08;简称PT展&#xff09;在北京国家会议中心召开。 小枣君去了现场&#xff0c;也拍了一些照片&#xff0c;特此分享给大家。 会场离“奥林匹克公园”地铁站很近&#xff1a; Logo设计得还是挺好看的&#xff1a; 熟悉的场…

一区黏菌算法+双向深度学习+注意力机制!SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

一区黏菌算法双向深度学习注意力机制&#xff01;SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 一区黏菌算法双向深度学习注意力机制&#xff01;SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元…

探索机器人快换盘技术的未来之路:智能化与协作的革新

在当今快速发展的科技时代&#xff0c;机器人已成为众多领域不可或缺的得力助手。其中&#xff0c;机器人快换盘技术作为提升机器人灵活性和应用广度的重要技术&#xff0c;正经历着前所未有的变革与创新。下面请随我们一起深入探讨这一技术的未来发展趋势。 一、人工智能&…

数据工程师岗位常见面试问题-2(附回答)

数据工程师已成为科技行业最重要的角色之一&#xff0c;是组织构建数据基础设施的骨干。随着企业越来越依赖数据驱动的决策&#xff0c;对成熟数据工程师的需求会不断上升。如果您正在准备数据工程师面试&#xff0c;那么应该掌握常见的数据工程师面试问题&#xff1a;包括工作…

Flink Lookup Join的工作原理、性能优化和应用场景

目录 1 Flink Lookup Join的工作原理 1.1 数据流处理与维表关联 1.2 键值对查询 1.3 数据时效性与准确性 2 Flink Lookup Join的实现方法 2.1 SQL语句编写 2.2 系统架构与数据流 3 Flink Lookup Join的性能优化 3.1 数据存储与索引 3.2 连接算法优化 3.3 资源配置与…

第19周JavaWeb编程实战-MyBatis实现OA系统 1-OA系统

办公OA系统项目开发 课程简介 本课程将通过慕课办公OA平台的开发&#xff0c;讲解实际项目开发中必须掌握的技能和设计技巧。课程分为三个主要阶段&#xff1a; 需求说明及环境准备&#xff1a; 基于RBAC的访问控制模块开发&#xff1a; 多级请假审批流程开发&#xff1a; …

matlab-对比两张图片的HSV分量的差值并形成直方图

%对比两张图片的HSV分量的差值并形成直方图&#xff0c;改个路径就能用&#xff0c;图片分辨率要一致 close all; clear all; clc; I1imread(E:\test\resources\image\1.jpg); I2imread(E:\test\resources\image\2.jpg); HSV1 rgb2ntsc(I1); HSV2 rgb2ntsc(I2); %HSV,HSV 代…

Android Webview和ScrollView冲突和WebView使用总结

1.因为Webview和ScrollView都用滑动事件&#xff0c;导致webview很难被滑动&#xff0c;即使被滑动了一点也非常不顺畅2.解决滑动冲突问题后发现&#xff0c;如果webview嵌套的html中含有轮播图等还是有问题。 使用自定义ScrollWebView解决这个问题 public class ScrollWebVi…

<<迷雾>> 第 4 章 电子计算机发明的前夜 示例电路

莫尔斯电报示意图 info::操作说明 鼠标单击开关切换开合状态 通电后, 线圈产生磁力从而将铁片开关(衔铁臂)吸引下来 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch04-01-morse-te…

Shopline对接需要注意的问题

Shopline对接是一项复杂而细致的工作&#xff0c;为了确保对接的顺利进行&#xff0c;并保证系统的稳定性和可靠性&#xff0c;需要注意以下几个方面。 1.API文档的详细阅读 功能理解&#xff1a; 仔细阅读Shopline提供的API文档&#xff0c;全面了解每个接口的功能、参数、返…

AI学习指南深度学习篇-Adadelta的Python实践

AI学习指南深度学习篇-Adadelta的Python实践 深度学习是人工智能领域的一个重要分支&#xff0c;近年来在各个领域都取得了显著的成就。在深度学习的模型训练中&#xff0c;优化算法起着至关重要的作用&#xff0c;其中Adadelta是一种常用的优化算法之一。本篇博客将使用Pytho…

初始docker以及docker的基本使用!!!

文章目录 虚拟化技术Docker/podman 命令通用命令查看docker 当前版本管理docker运行 镜像操作[image]列出本地所有镜像拉取镜像删除镜像把docker中的镜像打包成文件把镜像文件加载到docker中上传镜像 容器操作[container]创建容器docker run的参数选项列出所有容器启动容器停止…