查看: 4120|回复: 9

有没有方法在UART的DMA收到某个字符后结束

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16700
    最后登录
    1970-1-1
    发表于 2015-8-2 14:31:15 | 显示全部楼层 |阅读模式
    本帖最后由 lkl0305 于 2015-8-2 14:45 编辑

    如题
    比如我使用uart的DMA方式接收500个字节数据,但当不满500个时,如果接收到指定的字符后能停止接收,或有提示(比如中断)。

    评分

    参与人数 1NXP金币 +5 收起 理由
    小七 + 5 打赏!

    查看全部评分

    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    45

    帖子

    0

    注册会员

    Rank: 2

    积分
    146
    最后登录
    1970-1-1
    发表于 2015-8-2 15:45:34 | 显示全部楼层
    没有这种方法,一般的方法是你可以使用比如500字节的DMA中断长度,但是使用UART idle中断去读取检查buffer中的值,uart idle代表了UART总线上没有数据接收了。
    或者dma一个字节中断一次,这样效率比较低,和中断差不多了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16700
    最后登录
    1970-1-1
     楼主| 发表于 2015-8-2 17:27:05 | 显示全部楼层
    FSL_FAE_YDW 发表于 2015-8-2 15:45
    没有这种方法,一般的方法是你可以使用比如500字节的DMA中断长度,但是使用UART idle中断去读取检查buffer ...

    多谢指导,后一种的确效率低,和中断一样了,回去试下第一种方法
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-3-3 09:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    106

    主题

    836

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2023-6-12
    发表于 2015-8-2 21:06:45 | 显示全部楼层
    这个没有吧,可以每接收到一个帧然后再判断
    捕获.PNG
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16700
    最后登录
    1970-1-1
     楼主| 发表于 2015-8-2 21:39:36 | 显示全部楼层
    jinyi7016 发表于 2015-8-2 21:06
    这个没有吧,可以每接收到一个帧然后再判断

    那帧的长度不固定怎么办呢?你不知道下一帧有多少字符
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-3-3 09:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    106

    主题

    836

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2023-6-12
    发表于 2015-8-3 09:28:11 | 显示全部楼层
    lkl0305 发表于 2015-8-2 21:39
    那帧的长度不固定怎么办呢?你不知道下一帧有多少字符

    难道没有协议么?那这个传输的数据是什么含义呢?最好定一个简单的协议,


    233r ew.PNG

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16700
    最后登录
    1970-1-1
     楼主| 发表于 2015-8-3 09:34:04 | 显示全部楼层
    jinyi7016 发表于 2015-8-3 09:28
    难道没有协议么?那这个传输的数据是什么含义呢?最好定一个简单的协议,

    现在协议一定的,但没帧的数据长度不定,就不好判断下一帧是多少字符。而又不太想用中断,一次接收一个字符,然后来判断,这样感觉比较耗时,效率不太高,所以想找个简单一点的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    45

    帖子

    0

    注册会员

    Rank: 2

    积分
    146
    最后登录
    1970-1-1
    发表于 2015-8-10 23:31:09 | 显示全部楼层
    lkl0305 发表于 2015-8-3 09:34
    现在协议一定的,但没帧的数据长度不定,就不好判断下一帧是多少字符。而又不太想用中断,一次接收一个字 ...

    帧的长度不固定没有关系,主要确保前后两帧之间有一定间隔,一般是1-2个字节传输的时间长就可以了,这样就能产生line idle中断,接收方就能获取一帧结束的信号了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16700
    最后登录
    1970-1-1
     楼主| 发表于 2015-8-10 23:32:42 | 显示全部楼层
    FSL_FAE_YDW 发表于 2015-8-10 23:31
    帧的长度不固定没有关系,主要确保前后两帧之间有一定间隔,一般是1-2个字节传输的时间长就可以了,这样 ...

    版主加班呢? 多谢指导啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    45

    帖子

    0

    注册会员

    Rank: 2

    积分
    146
    最后登录
    1970-1-1
    发表于 2015-8-10 23:41:04 | 显示全部楼层
    一般
    (1)接收不确定帧长的(即使帧长确定,也存在一定风险,由于外部硬件的原因漏接一个字符,那样DMA中断就少一个字符才能触发),使用uart idle来分割两个帧
    (2)使用DMA发送到串口,不能使用DMA通道发送中断完成来作为这一帧发送完成的标记,因为这个中断只是说明了最后一个数据从ram中被搬到的UART_D中,不代表这个数据已经被推出去了。所以需要在DMA完成这个中断中使能UART的TC中断,等待这个中断发生才能说明所有数据都发出去了。在TC中断中关闭TC中断的下一次触发。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 09:35 , Processed in 0.112729 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表