带硬件FIFO的串口驱动程序设计思路

2023-11-13

串口具有硬件FIFO可以降低中断频率,对于需要高波特率数据传输,MCU本身速度比较慢,或有更高级优先级中断需要及时处理的场合就显得比较重要。通常,即便串口本身带硬件FIFO,在编写串口驱动程序时,仍然需要在上层在加一层软件FIFO(或RingBuffer),本文在串口中断的基础上介绍带硬件FIFO的串口驱动程序设计。

1.串口发送

串口发送有上层应用主动发起,设计起来相对简单。

中断开启:开启硬件FIFO空中断或发送完成(TXC)中断(初始化时关闭,在发送函数中打开)。

1)发送接口

函数原型:

uint32_t UART_SendBuf(uint8_t *pData, uint32_t nLength);

思路:

a)首次数据传输,将数据丢入软件FIFO中,从软件FIFO中取最大为硬件FIFO深度的的数据丢入硬件FIFO,置位数据传输标志,开启串口传输完成中断(TXC),返回。

b)正在数据传输中(ISR TXC已开启),将数据丢入软件FIFO中,返回。

2)发送ISR

a)从软件FIFO中取最大为硬件FIFO深度的数据丢入硬件FIFO,返回。

b)若从软件FIFO中取数据为空,关闭串口传输完成中断,返回。

2.串口接收

串口接受由外部数据传入,因此由ISR驱动。

中断开启:开启硬件FIFO Level中断,Timeout中断。

1)接收接口

函数原型:

uint32_t UART_RecvBuf(uint8_t *pData, uint32_t nLength);

思路:

软件FIFO不空,读取指定长度数据,返回。

2)接收ISR(硬件FIFO达到Level中断)

a)检查硬件Level中断标志位,读取硬件FIFO中所有数据,丢入软件FIFO中,返回。

b)检查硬件Timeout中断标志位,读取硬件FIFO中所有数据,丢入软件FIFO中,返回。这一步主要是考虑到接收数据未达到Level时的情况。

总结:本文介绍了带硬件FIFO的串口驱动程序设计思路,对于需要使用硬件FIFO的串口驱动程序可以参考。

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

带硬件FIFO的串口驱动程序设计思路 的相关文章

  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方社区库接口RC522模块库调用及示例进行复现及分析 了解RDIF及非接触式IC卡的原理及操作方法 实现功能 利用已知的A
  • I2C总线的通讯距离

    关于I2C总线 I2C总线不适合远距离通信 尤其是使用线缆与接口器件进行通信时一般不选择 I2C 使用I2C总线都是在用一个开发板上或者距离比较近 如果是远距离通信 比如说超过2米 这个时候对硬件就有特殊的要求了 通信线缆小于0 2米 一般
  • eclipse + armgcc + pyocd(CMSIS-DAP) 进行嵌入式MCU Debug

    eclipse armgcc pyocd CMSIS DAP 进行嵌入式MCU Debug 由于中美贸易战的影响 备用方案将采用国产MCU 经过乱开发委员会的评估 认为华大 HDSC 的MCU性价比不错 但是keil官网找不到所选芯片的pd
  • 带硬件FIFO的串口驱动程序设计思路

    串口具有硬件FIFO可以降低中断频率 对于需要高波特率数据传输 MCU本身速度比较慢 或有更高级优先级中断需要及时处理的场合就显得比较重要 通常 即便串口本身带硬件FIFO 在编写串口驱动程序时 仍然需要在上层在加一层软件FIFO 或Rin
  • ESP32S3学习——SPIFFS 文件系统

    芯片 esp32s3 开发环境 espidfv4 4 一 官网相关资料 1 简介 SPIFFS 是一个用于 SPI NOR flash 设备的嵌入式文件系统 支持磨损均衡 文件系统一致性检查等功能 2 说明 目前 SPIFFS 尚不支持目录
  • 数字IC验证:ARM总线协议AMBA中AHB、APB的简介、区别与联系

    写在前面 最近实习项目里用到这2个协议 因此简单整理一下 内容大多来自ARM官方文档与网络上的 我主要做一个整合 加上自己的理解补充 内容来源都会分别标出 如有侵权请指出 立刻删帖 官方文档入口 AMBA 包括AHB ASB APB 文章目
  • 【STM32实战】机械臂快递分拣系统(二)——机械臂控制程序(上位机)编写

    STM32实战 机械臂快递分拣系统 二 机械臂控制程序 上位机 编写 前言 题目分析 蓝牙模块的使用 上位机程序的编写 连接阿里云 测试 前言 近期回校上最后一门课 刚好是做机械臂有关的题目 所以写文记录一下 主要实现的是可以自动识别获取快
  • 嵌入式开发(7)系统定时器(SysTick)之延时函数运用

    目录 一 系统定时器 1 简介 2 工作原理 3 频率的概念 二 库函数SysTick定时器操作 系统定时器配置 三 寄存器SysTick定时器操作 1 系统定时器的用途 2 寄存器 3 官方示例 4 毫秒级延时函数 5 微秒和毫秒延时的优
  • 基于STM32的IAP技术分享

    基于STM32的IAP技术分享 1 烧录过程说明 2 厂家bootloader 3 bootloader区和APP区空间划分 4 bootloader区和APP程序内容说明 5 实验 5 1实验所用到的上位机软件 5 2 bootloade
  • esp8266与stm32、手机通讯(原子云)——hal库(有代码)

    本文所讲 正点原子的wifi模块esp8266与正点原子开发板战舰V3 stm32f103zet6 及手机app通讯 esp8266分为三种工作模式 STA 8266连接到网络比如wifi 手机热点等 AP 8266作为热点 由手机连接到8
  • ESP8266 教程3 — 通过TCP组建局域网并通信

    目录 1 ESP8266 的 AP 模式 1 1 查询 ESP8266 的wifi应用模式 1 2 设置 ESP8266 模块的wifi信息 1 3 查询已经接入的设备 2 ESP8266 的Station 模式 2 1 设置ESP8266
  • 计算机组成原理--基于Logisim的海明校验码解码电路实验的应用(超详细/设计/实验/作业/练习)

    目录 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Logisim的海明校验码解码电路 一 前言 二 环境与设备 三 内容 四 结果与分析 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Log
  • 第36章_瑞萨MCU零基础入门系列教程之步进电机控制实验

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • STM32F4单片机ADC采样及ARM-DSP库的FFT

    模拟信号经过ADC采样后变成数字信号 数字信号可以进行FFT运算 在频域中更容易分析信号的特征 本文将介绍如何用STM32F4的进行ADC采样 并利用ARMDSP库里的FFT算法对ADC采样值进行快速傅里叶变换 我使用的是STM32F407
  • Air780E

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 一 创建产品 1 1在onenet上创建产品 1 2创建设备 查看onenet接入协议 二 设备安全认证 1 鉴权参数 2 Token算法 3 sign算法 示例如下 4 参数编码 5
  • STM32 CAN通信理解(是半双工还是全双工?)

    STM32F429 CAN通信 CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519 是国际上应用最广泛的现场
  • cmake中的编译选项

    CMake是一个跨平台的构建系统 它可以根据简单的配置文件生成各种平台的构建工具 例如Makefile Visual Studio项目文件等 CMake使用CMakeLists txt文件来描述项目的构建规则和依赖关系 在这个文件中 可以设
  • 关注MCU 开发中的无限循环

    在 MCU 的开发过程中 我们经常会遇到需要使用无限循环的情况 例如 在前后台系统中 我们需要在一个无限循环中处理各种任务 在实时性操作系统中 我们也可能需要在一个无限循环中调度各个任务 那么 处理无限循环的语句有哪些写法呢 目前常见的有两
  • C语言环形缓冲区

    2024第一天 继续给自己加点料 导言 C语言环形缓冲区是一种常用的数据结构 它提供了一种高效的方式来存储和处理数据 本文将深入解析C语言环形缓冲区的定义 原理和应用 并提供一些实际的代码示例 一 什么是环形缓冲区 环形缓冲区 也称为循环缓
  • 如何为 Arm Cortex M4 交叉编译 GSL?

    我正在使用带有arm cortex m4的STM32 MCU 并且想要使用gsl 2 7 1 但是 我已经尝试过例如命令 configure prefix home user name gsl arm target arm none eab

随机推荐

  • 理解Node.js的回调(Callback)

    一 回调 回调 Callback 是javascript中常用的使用方法 简单而言 就是 函数作为参数传递到另一个函数中 然后被调用 同样 在Node js中 比如I O操作发生的地方 经常使用回调模式 通过在回调函数中嵌套回调函数 可以控
  • 我的创作纪念日-128天

    机缘 移动办公的需求和个性化知识体系建立的需求共同需要一个方便 快捷的平台 当谈到移动办公的需求时 主要包括以下几点 任何时间 任何地点处理与业务相关的任何事情 例如家庭办公 出差员工远程办公等 这可以让员工摆脱时间和空间的束缚 单位信息可
  • Qt 槽函数被执行两次的问题

    在使用vs2015编写QT程序时 偶然发现点击一次button槽函数响应了两次 我起初认为是鼠标问题 特意换了鼠标试试结果还是一样的 所以我就研究了一下 按钮的名字是btn account add 以前我用Qt Creator 给按钮添加槽
  • Keepalived--02--安装和卸载

    一 安装前准备 yum y install gcc gcc c autoconf automake make yum y install zlib zlib devel openssl openssl devel pcre pcre dev
  • 频响特性曲线_OEP30W频率特性测量

    简介 在博文 OEP30W D 类音频功率放大器简单测试 中给出了OPE30W的基本连接方式和功能应用 对于该音频放大芯片的输出特性和温度特性是什么 本文给出了测试方案 在测试芯片的频率相应的时候 需要使用到正弦波产生芯片模块AD9833
  • Docker容器与虚拟化技术:Docker镜像创建、Dockerfile实例

    目录 一 理论 1 Docker镜像的创建方法 2 Docker镜像结构的分层 3 Dockerfile 案例 4 构建Systemctl镜像 基于SSH镜像 5 构建Tomcat 镜像 6 构建Mysql镜像 二 实验 1 Docker镜
  • Linux-Hadoop部署

    部署Hadoop 一 Hadoop部署模式 1 独立模式 2 伪分布式模式 3 完全分布式模式 二 Hadoop集群规划 1 集群拓扑 2 角色分配 三 JDK安装与配置 1 下载JDK压缩包 2 上传到master虚拟机 3 在maste
  • oracle insert 方法 分类

    1 最基本的insert 单表单行插入 insert into tablename 列名 values value 2 单表多行插入 1 insert into select 将select 的结果集插入到目标表中 select 可以是你可
  • docker run 报错: dial tcp xxxxxxxx:443: i/o timeout报错

    报错信息 error pulling image configuration Get https production cloudflare docker com registry v2 docker registry v2 blobs s
  • R语言练习题2

    关注公众号凡花花的小窝 收获更多的考研计算机专业编程相关的资料 3 从mtcars数据集中取出wt gt 2 6并且vs 0的数据 subset mtcars mtcarsKaTeX parse error Expected EOF got
  • 【机器学习】机器故障的二元分类模型-Kaggle竞赛

    竞赛介绍 数据集描述 本次竞赛的数据集 训练和测试 是从根据机器故障预测训练的深度学习模型生成的 特征分布与原始分布接近 但不完全相同 随意使用原始数据集作为本次竞赛的一部分 既可以探索差异 也可以了解在训练中合并原始数据集是否可以提高模型
  • 【seafile】之 预览电子发票PDF显示不全问题

    文章目录 一 问题来源 二 解决 三 题外话 近期在处理网盘和在线文件相关问题 面对的事比较多且杂 记录下 问题 seafile自身预览PDF文件 部分不显示 图片显示如下 一 问题来源 seafile版本 7 0 5 原因 原文件pdf
  • Feign常用的请求拦截器

    IFeignAutoConfiguration Configuration ConditionalOnClass Feign class Order Ordered LOWEST PRECEDENCE 10000 public class
  • 推荐11款开源自动化安全测试实用工具

    安全测试 渗透测试 可以让企业了解现有网络安全措施的成效或不足 进而帮助其调整安全项目 并主动发现漏洞 但是 安全测试是一项工作量很大的工作 测试团队需要在较短时间内快速完成以下任务 侦察并分析组织网络所使用的网络协议 以收集有关网络设备和
  • RC电路分析计算

    RC电路有一个电容和一个电阻组成 可以是并联或者串联 可用作滤波 移相等 下面以RC串联电路为例计算分析电路的电流电压特性和频率特性 RC串联电路 如上图所示 假设RC电路电源电压为Us 电容大小为C 电容两端电压为Uc 电阻大小为R 电阻
  • 用Python分析2000款避孕套,得出这些有趣的结论

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 如有问题请及时联系我们以作处理 PS 如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 一 分析目标
  • 经销商网上下单系统

    什么是订货通 什么是企业订货管理系统 是一款针对中小型企业通过网络实现 厂家和客户 经销商 批发商 代理商一站式订货系统 最终实现厂家的下游客户通过网络实现实时订货功能 一 订货系统解决的问题 开发网上订货系统用于解决企业和下游订货商对接
  • 文件系统cache机制

    复杂度3 5 机密度3 5 最后更新2021 04 27 AIX并未采用传统Unix的cache模式 传统Unix 包括Linux 的cache模式是把cache作为一个单独的旁路应用 嵌入在文件读写的路径中 当应用请求读文件时 kerne
  • stm32单片机引脚_单片机IO口不够用了,怎么办?

    这几天公子比较闲 像看看手上有没有好玩的模块 于是 公子找到了一款OV系列的摄像头 于是翻了一下自己的2年都没有打开的盒子 公子专门来放开发板的 可是找了半天 都没有找到开发板 费了九牛二虎之力 才找到一块STM32F103C8T6的 长这
  • 带硬件FIFO的串口驱动程序设计思路

    串口具有硬件FIFO可以降低中断频率 对于需要高波特率数据传输 MCU本身速度比较慢 或有更高级优先级中断需要及时处理的场合就显得比较重要 通常 即便串口本身带硬件FIFO 在编写串口驱动程序时 仍然需要在上层在加一层软件FIFO 或Rin