0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

再谈 HPM6700/6400/6300 产品系列串口接收不定长数据的方式

先楫半导体HPMicro 2023-04-19 09:39 次阅读

概 述

2023年3月底,先楫半导体官方发布了新的hpm_sdk版本,相比上一次发布的版本,串口外设多了一个uart_hardware_rx_idle的sample。目前,这个硬件的空闲中断仅适用于HPM6200系列产品,而HPM6750/6400/6300系列的MCU只能使用 uart_software_rx_idle 通过软件利用额外的定时器实现空闲中断机制。

ed855090-da9b-11ed-ad0d-dac502259ad0.png

首先,我们简单介绍一下以上4个串口相关的sample:

(1) uart_dma:此demo 的串口均使用DMA掌管进行收发,判断收发完成只需要一次DMA传输完成中断,但只能定长收发,适用于固定长度的收发场景。此demo适用于先楫半导体所有MCU系列产品。

(2) uart_hardware_rx_idle:此demo 使用硬件空闲机制和DMA接收进行接收不定长。适合接收不定长数据的场景,但此demo仅适用先楫半导体HPM6200系列MCU产品。

(3)uart_irq:此demo 的串口均使用中断来进行收发,可适用于任何应用场景。中断进行接收带来的一个问题就是每接收一个字节就会进入一次中断,在数据量稍大的场景下会比较耗费中断次数。此demo适用于先楫半导体所有MCU系列产品。

(4)uart_software_rx_idle:此demo需要定时器的两个通道,并且互联到一个IO,这个IO需要接到串口的RX引脚。一个通道作为捕获RX引脚下降沿以此判断开始接收,另一个通道作为同步输入SYNC(触发会重置计数器)以此来判断接收完成。利用定时器来实现空闲机制实现接收不定长数据。在资源利用不紧张的情况下可以选择使用此demo,因为每个串口都需要定时器的两个通道作为辅助外设。此demo适用于先楫半导体所有MCU系列产品。

对于某些应用场合,比如接收不定长数据,有硬件空闲中断的支持,可以再配合DMA,用最小的中断损耗(只需要一次中断)以及最少的外设辅助(不需要定时器查询)实现接收不定长数据。


本文将探讨一种利用串口FIFO接收超时机制而不依赖额外定时器在HPM6700/6400/6300 产品系列上实现串口不定长数据接收。

实现方案

先楫半导体 HPM6700/6400/6300 产品系列串口特性如下:

ed989c22-da9b-11ed-ad0d-dac502259ad0.png


先楫半导体所有产品系列的串口 FIFO都支持阈值触发中断,也就是FIFO存储到多少个字节认为一次有效数据进而触发中断。这样可以大大减少触发中断的次数,有了FIFO阈值中断,就可以在进入中断后,一次性把FIFO的所有数据取出来。


开发者可以在SDK中找到详细描述阈值范围的内容:

接收触发阈值为 0 (uart_rx_fifo_trg_not_empty):代表RX FIFO不为空就一次触发中断。

接收触发阈值为 1 (uart_rx_fifo_trg_gt_one_quarter):代表RX FIFO接收到超过FIFO的四分之一就触发一次中断。

接收触发阈值为 2 (uart_rx_fifo_trg_gt_half):代表RX FIFO接收到超过FIFO的一半就触发一次中断。

接收触发阈值为 3 (uart_rx_fifo_trg_gt_three_quarters):代表RX FIFO接收到超过FIFO的四分之三就触发一次中断。

edaf6a42-da9b-11ed-ad0d-dac502259ad0.png

有了FIFO阈值设置,先楫半导体MCU产品的串口还具备了FIFO timeout 的中断

edca7bf2-da9b-11ed-ad0d-dac502259ad0.png

产生中断需要同时具备以下条件

① 需要使能FIFO;

② RXFIFO里面需要存在至少一个字符;

③ RXFIFO在四个字符的时间再也没有收到新的字符。

结合以上特点可知,当接收阈值产生中断的时候,系统能够把接收到的数据从FIFO提取出来;当FIFO timeout中断触发时,系统能够在最后把接收的数据从FIFO提取出来。通过这种方式来实现一帧不定长数据的接收。


此外,开发者可以结合以下特征以及自己的应用开发需求来决定是否采用此方案:


相比单个字节接收,接收中断次数能减少10倍以上。比如接收1000个字节,单个字节接收需要进入1000次中断,而使用rx fifo阈值+fifo超时机制,只需要进入77次,相比减少12倍以上中断次数。

接收阈值中断和超时中断是一起使能触发的。

使用这种方式的话,接收无法配合DMA,但是发送可以使用DMA。

超时条件是四个字符时间。也就是在四个字符时间没收到新数据,则判断超时。

方案验证

结合以上的论述,我们开发一个sample进行验证。接收使用RX FIFO 和 FIFO timeout方式,发送则使用DMA。使用100到1000字节随机几组进行验证接收的中断次数。

对于RX FIFO 和 FIFO timeout方式,代码配置如下:

ede397f4-da9b-11ed-ad0d-dac502259ad0.png

中断进行提取FIFO的数据:

ee029a46-da9b-11ed-ad0d-dac502259ad0.png

实验现象

通过本次实验结果可见相对于中断方式接收,采用本文提到的方案可以显著减少中断次数。本法在进行不定长大数据量传输的场景下尤为有利,假设接收1000个字节,单个字节中断需要产生1000次中断,而本文提到的方案在不使用其他额外定时器的条件下,只需要77次中断就可完成传输。

ee2b5936-da9b-11ed-ad0d-dac502259ad0.png

以上是针对先楫半导体HPM6700/6400/6300这三个系列的MCU产品操作串口外设的一种方式的介绍。在实际操作过程中,希望能带给各位开发者一点启发。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 半导体
    +关注

    关注

    330

    文章

    25411

    浏览量

    205985
  • 数据
    +关注

    关注

    8

    文章

    6566

    浏览量

    87951
收藏 人收藏

    评论

    相关推荐

    HPM USB系列HPM6700双USB功能介绍

    HPM6700系列MCU提供了2个USB外设端口。这些端口内置高速PHY,支持OTG模式,主机模式支持高速、全速和低速模式,设备模式支持高速和全速模式,完全兼容USB2.0协议。这使得HPM6700
    的头像 发表于 05-31 08:17 205次阅读
    <b class='flag-5'>HPM</b> USB<b class='flag-5'>系列</b>:<b class='flag-5'>HPM6700</b>双USB功能介绍

    HPM USB系列HPM6700双USB功能介绍

    HPM6700系列MCU提供了2个USB外设端口。这些端口内置高速PHY,支持OTG模式,主机模式支持高速、全速和低速模式,设备模式支持高速和全速模式,完全兼容USB 2.0协议。
    的头像 发表于 05-30 11:40 218次阅读
    <b class='flag-5'>HPM</b> USB<b class='flag-5'>系列</b>:<b class='flag-5'>HPM6700</b>双USB功能介绍

    用STM32F030F4串口空闲中断接收不定长数据,发生中断后不知道如何计算接收到的字节数?

    我用STM32F030F4串口空闲中断接收不定长数据,发生中断后不知道怎样计算接收到的字节数。
    发表于 04-03 07:12

    先楫半导体发布多个系列高性能微控制器产品

    HPM6000 系列 MCU 是来自上海先楫半导体科技有限公司的高性能实时 RISC-V 微控制器,为工业自动化及边缘计算应用提供了极大的算力、高效的控 制能力。上海先楫半导体目前已经发布了如 HPM6700/
    的头像 发表于 11-28 09:38 427次阅读

    文档上新|HPM16 位 ADC+ENET 开发案例

    的高性能实时RISC-V微控制器,为工业自动化及边缘计算应用提供了极大的算力、高效的控制能力。上海先楫半导体目前已经发布了如HPM6700/6400HPM6300
    的头像 发表于 11-28 08:17 326次阅读
    文档上新|<b class='flag-5'>HPM</b>16 位 ADC+ENET 开发案例

    串口怎么才能实现接收不定长数据?

    大家都是怎么处理不定长数据
    发表于 10-24 06:43

    使用UART IDLE中断接收不定长数据

    使用UART IDLE中断接收不定长数据
    的头像 发表于 09-18 15:41 706次阅读
    使用UART IDLE中断<b class='flag-5'>接收</b><b class='flag-5'>不定长</b><b class='flag-5'>数据</b>

    CAN外设的接收过滤器设置

    /HPM6300系列产品用的是CAN,而HPM6200系列使用的是MCAN。本文统称HPM6700/HP
    的头像 发表于 08-24 09:03 1201次阅读
    CAN外设的<b class='flag-5'>接收</b>过滤器设置

    uart pdma方式接收不定长数据如何解决?

    目前测试过用uart的接收超时中断在pdma方式接收时不起作用,那么有其他方式来解决接收不定长
    发表于 08-23 08:25

    降维打击!对标主流ARM内核MCU,先楫RISC-V高性能HPM5300凭何争性价比之王?

    先楫半导体以定位国内高性能RISC-V内核MCU为业界所熟知,已经陆续推出了HPM6700/6400HPM6300HPM6200三款高性能MCU,在算力和控制力等方面充分满足高端市
    的头像 发表于 08-19 08:19 637次阅读
    降维打击!对标主流ARM内核MCU,先楫RISC-V高性能<b class='flag-5'>HPM</b>5300凭何争性价比之王?

    玩转先楫CANFD外设系列之一:轻松搞起CANFD

    一、概述先楫的CANFD外设,有两个CANFD的IP,其中HPM6700系列HPM6400系列HPM6300
    的头像 发表于 08-02 08:20 1763次阅读
    玩转先楫CANFD外设<b class='flag-5'>系列</b>之一:轻松搞起CANFD

    开发者分享:轻松搞起CANFD

    先楫的CANFD外设,有两个CANFD的IP,其中HPM6700系列HPM6400系列HPM6300
    的头像 发表于 08-01 10:28 1728次阅读
    开发者分享:轻松搞起CANFD

    先楫半导体携产品及解决方案亮相ICDIA 2023***展区

    )携其HPM6700/6400HPM6300HPM6200系列产品EVK及产品解决方案亮相滴
    的头像 发表于 07-31 23:03 455次阅读
    先楫半导体携<b class='flag-5'>产品</b>及解决方案亮相ICDIA 2023***展区

    CW32L083串口中断+定时器实现不定长数据接收

    CW32L083 用串口中断加定时器中断实现串口不定长数据接收,特别适用于AT指令的接收
    的头像 发表于 07-12 09:00 1303次阅读
    CW32L083<b class='flag-5'>串口</b>中断+定时器实现<b class='flag-5'>不定长</b><b class='flag-5'>数据</b><b class='flag-5'>接收</b>

    串口接收不定长数据的实现方式

    使用串口进行数据的收发在嵌入式产品中是很常用的一种通信方式,因为串口的简单使用,很容易就被选为产品
    的头像 发表于 07-04 15:23 1753次阅读
    <b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>不定长</b><b class='flag-5'>数据</b>的实现<b class='flag-5'>方式</b>