全志R128 SDK HAL 模块开发指南之 LPUART

模块介绍

LPUART 驱动主要实现设备驱动的底层细节,并为上层提供一套标准的 API 接口以供使用。

模块配置

配置路径如下:

Kernel Setup --->Drivers Setup --->SoC HAL Drivers --->LPUART Devices --->[*] enable lpuart driver

源码结构

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

hal/source/lpuart/             ---- 驱动源码
├── hal_lpuart.c
├── Kconfig
├── Makefile
├── platform
│   ├── lpuart-sun20iw2p1.h    ---- 平台地址,引脚复用等配置
│   └── ...
├── platform-lpuart.h
└── lpuart.h
include/hal/                   ---- 驱动APIs声明头文件
└── hal_lpuart.h

模块接口说明

需要包含头文件

#include <hal_lpuart.h>

初始化 LPUART 驱动

函数原型:

int32_t hal_lpuart_init(int32_t lpuart_port)

参数:

  • lpuart_port:LPUART 端口号

返回值:

  • SUNXI_HAL_OK: 成功
  • HAL_LPUART_STATUS_ERROR: 失败

卸载 LPUART 驱动

函数原型:

int32_t hal_lpuart_deinit(int32_t lpuart_port)

参数:

  • lpuart_port:LPUART 端口号

返回值:

  • SUNXI_HAL_OK: 成功

设置波特率及参数

函数原型:

int32_t hal_lpuart_control(lpuart_port_t lpuart_port, int cmd, void *args)

参数:

  • lpuart_port_t:LPUART 端口号
  • cmd:预留,暂未使用
  • args:指向 _lpuart_config_t 类型变量的数组

返回值:

  • SUNXI_HAL_OK: 成功
  • HAL_LPUART_STATUS_ERROR: 失败

接收处理

函数原型:

int32_t hal_lpuart_receive(int32_t dev, uint8_t *data, uint32_t num)

参数:

  • dev:LPUART 端口号
  • data: 接收数据缓冲区
  • num: 接收数据长度

返回值:

  • size: 成功接收的字节数

接收对比处理

函数原型:

int32_t hal_lpuart_rx_cmp(lpuart_port_t lpuart_port, uint8_t cmp_len, uint8_t *cmp_data);

参数:

  • lpuart_port:LPUART 端口号
  • cmp_len:比较数据的长度
  • cmp_data:比较的数据

返回值:

  • SUNXI_HAL_OK: 成功
  • HAL_LPUART_STATUS_ERROR: 失败

启用接收对比处理回调

函数原型:

int32_t hal_lpuart_enable_rx_cmp(lpuart_port_t lpuart_port, lpuart_callback_t cb, void *arg);

参数:

  • lpuart_port:LPUART 端口号
  • cb:处理回调函数
  • arg:回调函数的参数

返回值:

  • SUNXI_HAL_OK: 成功
  • HAL_LPUART_STATUS_ERROR: 失败

禁用接收对比处理回调

函数原型:

int32_t hal_lpuart_disable_rx_cmp(lpuart_port_t lpuart_port);

参数:

  • lpuart_port:LPUART 端口号

返回值:

  • SUNXI_HAL_OK: 成功
  • HAL_LPUART_STATUS_ERROR: 失败

配置PM绕过模式

函数原型:

int32_t HAL_LPUART_SetBypassPmMode(lpuart_port_t lpuart_port, uint8_t mode);

参数:

  • lpuart_port:LPUART 端口号
  • mode:配置模式

返回值:

  • SUNXI_HAL_OK: 成功
  • HAL_LPUART_STATUS_ERROR: 失败

模块使用范例

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <hal_log.h>
#include <hal_cmd.h>
#include <hal_timer.h>
#include <hal_lpuart.h>
#include <hal_uart.h>/* find a free uart_port or pc com as source */
#define UART_TEST UART_1
#define TEST_LEN 5static void cmd_usage(void)
{printf("Usage:\n""\t hal_lpuart <port> <baudrate>\n");
}void test_recv_data(lpuart_port_t port)
{printf("enter recv data test\n");hal_lpuart_enable_rx_data(port, NULL, NULL);/* use uart as source */hal_uart_init(UART_TEST);hal_uart_send(UART_TEST, "a", 1);/* use pc com as source */printf("enter\n");hal_sleep(5);hal_lpuart_disable_rx_data(port);
}static void compare_callback(void *arg)
{printf("data compare success!\n");
}void test_cmp_data(lpuart_port_t port)
{printf("enter cmp data test\n");char cmp[TEST_LEN + 1] = "abcde";if (hal_lpuart_init(port)) {printf("lpuart %d not inited\n", port);return;}hal_lpuart_rx_cmp(port, TEST_LEN, cmp);hal_lpuart_enable_rx_cmp(port, compare_callback, NULL);/* use uart as source, stop bit of uart should be 2 */hal_uart_init(UART_TEST);hal_uart_send(UART_TEST, cmp, TEST_LEN);/* use pc com as source */printf("enter abcde\n");hal_sleep(5);hal_lpuart_disable_rx_cmp(port);
}void lpuart_reset_multiplex()
{lpuart_multiplex(LPUART_0, UART_0);lpuart_multiplex(LPUART_1, UART_1);
}int cmd_test_lpuart(int argc, char **argv)
{if (argc != 3) {cmd_usage();return -1;}lpuart_port_t port;uint32_t baudrate;port = strtol(argv[1], NULL, 0);baudrate = strtol(argv[2], NULL, 0);if (hal_lpuart_init(port) != SUNXI_HAL_OK) {printf("Fail to init lpuart\n");return -1;}if (port == 0) {lpuart_multiplex(LPUART_0, UART_TEST);} else if (port == 1) {lpuart_multiplex(LPUART_1, UART_TEST);}test_recv_data(port);test_cmp_data(port);lpuart_reset_multiplex();return 0;
}FINSH_FUNCTION_EXPORT_CMD(cmd_test_lpuart, hal_lpuart, lpuart hal APIs tests)

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

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

相关文章

torch与cuda\cudnn和torchvision的对应

以上图片来源于这篇博客 于是&#xff0c;我需要手动下载0.9.0torchvision 直接在网站https://pypi.tuna.tsinghua.edu.cn/simple/后面加上torchvision&#xff0c;就不用ctrlF搜torchvision了&#xff0c;即进入下面这个网站&#xff0c;找到对应版本的包下载安装即可 https…

android 音频调试技巧

常用命令 查看当前声卡信息 cat proc/asound/cards bengal_515:/ # cat /proc/asound/cards0 [bengalidpsndcar]: bengal-idp-snd- - bengal-idp-snd-cardbengal-idp-snd-card1 [Loopback ]: Loopback - LoopbackLoopback 1查看PCM设备列表 cat proc/asound/pcm ben…

Github设置clone慢的解决方案

Github设置代理clone依然慢的解决方案 1、前提&#xff1a; 注意&#xff1a; 必须要有科学上网&#xff01;必须要有科学上网&#xff01;必须要有科学上网&#xff01;重要的事情说三遍&#xff1b; 2、http/https方案&#xff08;git clone时使用http&#xff09;&#x…

MirrorLayer可以正常触摸屏幕原理分析

背景&#xff1a; 上次blog分享了给学员朋友们布置的作业&#xff0c;今天来进行简单的揭秘。 问题&#xff1a; 在多屏互动时候有一个屏幕的画面是一个MirrorLayer&#xff0c;另一个屏幕画面是真实的&#xff0c;即2个屏幕上有一个是MirrorLayer&#xff0c;这个时候疑问就…

【C++基础入门】四、程序流程结构(水仙花数、乘法口诀、七和七的倍数、随机数猜数字)

四、程序流程结构 C/C支持最基本的三种程序运行结构&#xff1a;顺序结构、选择结构、循环结构 顺序结构&#xff1a;程序按顺序执行&#xff0c;不发生跳转选择结构&#xff1a;依据条件是否满足&#xff0c;有选择的执行相应功能循环结构&#xff1a;依据条件是否满足&…

【Django-ninja】使用schema

在Django Ninja中&#xff0c;"schema"主要是指帮助描述和规范你的API的工具&#xff0c;以便系统能够自动生成文档并提供验证。通俗地说&#xff0c;它有两个主要作用&#xff1a; API文档生成器&#xff1a; Schema 让 Django Ninja 能够自动生成互动式的API文档。…

windows下利用verdaccio私服让npm构建速度上来

一.verdaccio的准备 上一篇文章&#xff0c;我写了的&#xff0c;看这里。windows下使用verdaccio构建npm私服环境-CSDN博客 二.用nrm实现npm源管理 虽然英语不好&#xff0c;我猜这个工具的缩写的意思是npm resource manage&#xff0c;哈哈。 1.安装nrm 输入npm install…

探索元宇宙:未来游戏的新纪元

元宇宙游戏是一种融合了虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;、人工智能&#xff08;AI&#xff09;等技术的游戏形态&#xff0c;将现实世界与虚拟世界相结合&#xff0c;创造出一个更为真实、沉浸和交互性强的游戏体验。以下是元宇宙游戏…

Virtual DOM的实现原理

Virtual DOM的实现原理 课程目标 了解什么是虚拟DOM,以及虚拟DOM的作用Snabbdom的基本使用&#xff08;Vue内部的虚拟Dom是改造了开源库Snabbdom&#xff09;Snabbdom的源码解析 在面试的时候经常会问到虚拟DOM是怎么工作的&#xff0c;通过查看Snabbdom源码&#xff0c;可以…

机器学习---半监督学习(基于分岐的方法)

1. 基于分歧的方法 与生成式方法、半监督SVM、图半监督学习等基于单学习器利用未标记数据不同&#xff0c;基于分歧的方 法(disagreement--based methods)使用多学习器&#xff0c;而学习器之间的“分歧”(disagreement)对未标记 数据的利用至关重要。 1.2 协同训练 “协同…

实验一 古典密码算法的设计与实现

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;简单外包单 &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c;永远…

猫什么时候发腮?猫咪发腮指南!这些生骨肉冻干发腮效果好

猫什么时候发腮是许多猫主人非常关心的问题。在猫咪的成长过程中&#xff0c;发腮是一项重要的体征&#xff0c;也是猫咪成熟的标志。主人需要在适龄的年龄段加强营养补给&#xff0c;可以让让猫咪拥有可爱的肉嘟嘟脸型&#xff0c;不要错失最佳发腮期。那么&#xff0c;什么时…

花瓣网美女图片爬取

爬虫基础案例01 花瓣网美女图片 网站url&#xff1a;https://huaban.com 图片爬取 import requests import json import os res requests.get(url "https://api.huaban.com/search/file?text%E7%BE%8E%E5%A5%B3&sortall&limit40&page1&positionsear…

【论文阅读笔记】Advances in 3D Generation: A Survey

Advances in 3D Generation: A Survey 挖个坑&#xff0c;近期填完摘要 time&#xff1a;2024年1月31日 paper&#xff1a;arxiv 机构&#xff1a;腾讯 挖个坑&#xff0c;近期填完 摘要 生成 3D 模型位于计算机图形学的核心&#xff0c;一直是几十年研究的重点。随着高级神经…

第2章 Linux 中执行命令

第2章 Linux 中执行命令 命令格式 命令 [选项] [参数....] 在linux 中命令分为内部命令和外部命令。 ctrll 可以清屏 查看帮助的命令 在使用命令之前&#xff0c;我们可以通过帮助来查看这个命令的格式和使用方式。在 Linux 中有两个帮助命令&#xff0c; help 和 man help…

第96讲:MySQL高可用集群MHA的核心概念以及集群搭建

文章目录 1.MHA高可用数据库集群的核心概念1.1.主从复制架构的演变1.2.MHA简介以及架构1.3.MHA的软件结构1.4.MHA Manager组件的启动过程1.5.MHA高可用集群的原理 2.搭建MHA高可用数据库集群2.1.环境架构简介2.2.搭建基于GTID的主从复制集群2.2.1.在三台服务器中分别搭建MySQL实…

Prometheus 企业级监控使用总结

一、监控概念&误区 监控是管理基础设施和业务的核心工具&#xff0c;监控应该和应用程序一起构建和部署&#xff0c;没有监控&#xff0c;将无法了解你的系统运行环境&#xff0c;进行故障诊断&#xff0c;也无法阻止提供系统性的性能、成本和状态等信息。 误区&#xff…

监控系统的评分标准

一、监控概念 监控是有效管理基础设施和业务的关键工具。正确的监控应当与应用程序一同构建和部署&#xff0c;因为缺乏监控会导致对系统运行环境的不了解&#xff0c;阻碍故障诊断&#xff0c;以及无法及时获取关键的性能、成本和状态等信息。 然而&#xff0c;我们需要注意一…

CSS 选择器与相关规则详解

CSS&#xff08;Cascading Style Sheets&#xff09;的选择器是网页样式设计中至关重要的工具&#xff0c;它们允许开发者精确地定位并应用样式到HTML文档中的元素。下面将逐一介绍几种主要的选择器类型&#xff0c;以及相关的注释和规则。 1. 类选择器 (Class Selector) 类选…

法兰缺损零件设计加工替换盾构机扫描建模厂家抄数修图出CAD图纸

在现代工业生产中&#xff0c;法兰缺损零件的问题时有发生&#xff0c;这不仅会影响设备的正常运行&#xff0c;还会给企业带来巨大的经济损失。为了解决这一问题&#xff0c;CASAIM中科广电三维扫描和3D打印设计加工技术的运用成为了关键。 首先&#xff0c;CASAIM中科广电需要…