跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT MCAL
  4. MC0 Mcal的UART问题

MC0 Mcal的UART问题

已定时 已固定 已锁定 已移动 YT MCAL
11 帖子 2 发布者 124 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • zhaiZ 离线
    zhaiZ 离线
    zhai
    编写于 最后由 编辑
    #1

    有一个需求,就是发送过程中,如果某一个字节发送错误(干扰/碰撞等产生的发送和接收校验不对),就要立即终止当前的发送。目前使用的是多字节连续发送,回读校验的方法是发送完成后进入IDLE中断再校验。如果遇到上述某一字节发送错误就没有办法在错误的字节时退出了。有什么方式可以实现吗?

    1 条回复 最后回复
    0
    • RuiXuR 离线
      RuiXuR 离线
      RuiXu YunTu
      编写于 最后由 编辑
      #2

      回读校验是什么方式实现的?是TX\RX短接还是有上位机回传。如果按照上述需求,目前只能在上层做处理,调用异步发送/接收单字节发送在接收完成中断去校验,每次校验成功后再发送下一字节

      1 条回复 最后回复
      0
      • zhaiZ 离线
        zhaiZ 离线
        zhai
        编写于 最后由 zhai 编辑
        #3

        就是在发送完成中断去校验。如果按照单字节的发送/接收的话,目前看下来发送1字节会进入四次中断,依次是TX_EMPTY->END_TX->END_TX->RX_FULL->END_RX,在END_RX中做已发送数据的校验,校验通过再发送下一字节数据。这样中断的耗时会不会很长?以及中断太频繁?

        使用单字节发送、单字节接收,这样中断是TX_EMPTY->END_TX->END_TX->RX_FULL->END_RX
        使用单字节发送、IDLE中断实现不定长数据的接收,这样中断就是TX_EMPTY->END_TX->END_TX->IDLE

        1 条回复 最后回复
        0
        • RuiXuR 离线
          RuiXuR 离线
          RuiXu YunTu
          编写于 最后由 编辑
          #4

          使用的是MCAL哪个版本呢?如果实在觉得四次中断进入比较频繁,可以修改底层代码,不使用发送完成回调函数

          zhaiZ 1 条回复 最后回复
          0
          • zhaiZ 离线
            zhaiZ 离线
            zhai
            回复了RuiXu 最后由 编辑
            #5

            RuiXu 2.3.0

            1 条回复 最后回复
            0
            • RuiXuR 离线
              RuiXuR 离线
              RuiXu YunTu
              编写于 最后由 编辑
              #6

              image.png 修改后在调用初始化函数CddUart_Init后调用一次CddUart_StartSetCallBackFun即可达到不使用发送完成回调函数的效果。

              1 条回复 最后回复
              0
              • RuiXuR 离线
                RuiXuR 离线
                RuiXu YunTu
                编写于 最后由 编辑
                #7

                其实无论有没有配置回调函数,单次接收发送单字节都会进入同样的中断次数。只是是否调用回调函数的区别:发送为空中断->发送完成中断 ->接收完成中断,如果要减少中断次数,就在TX_EMPTY调用CddUart_Buffer,连续发送,在RX_FULL进行校验,调用CddUart_Buffer连续接收。这样就在硬件层面上少进入一次发送完成中断。

                zhaiZ 1 条回复 最后回复
                0
                • zhaiZ 离线
                  zhaiZ 离线
                  zhai
                  回复了RuiXu 最后由 zhai 编辑
                  #8

                  RuiXu 刚刚试了一下,按照这种方式操作,也是发送完成后才能进行回读,比如要发送2字节,中断进入顺序是TX_EMPTY->TX_EMPTY->END_TX->RX_FULL->END_RX。还是不能实现最初的一个字节发送错误就立即终止后续发送需求

                  RuiXuR 1 条回复 最后回复
                  0
                  • RuiXuR 离线
                    RuiXuR 离线
                    RuiXu YunTu
                    编写于 最后由 编辑
                    #9

                    是改了回调函数还是使用的CddUart_Buffer的形式

                    zhaiZ 1 条回复 最后回复
                    0
                    • zhaiZ 离线
                      zhaiZ 离线
                      zhai
                      回复了RuiXu 最后由 编辑
                      #10

                      RuiXu 使用CddUart_Buffer的形式;改回调函数还是会进中断的,只是不进回调函数了

                      1 条回复 最后回复
                      0
                      • RuiXuR 离线
                        RuiXuR 离线
                        RuiXu YunTu
                        回复了zhai 最后由 RuiXu 编辑
                        #11

                        zhai 在 MC0 Mcal的UART问题 中说:

                        RuiXu 刚刚试了一下,按照这种方式操作,也是发送完成后才能进行回读,比如要发送2字节,中断进入顺序是TX_EMPTY->TX_EMPTY->END_TX->RX_FULL->END_RX。还是不能实现最初的一个字节发送错误就立即终止后续发送需求

                        连续两次进入TX_EMPTY是由于TX_EMPTY的中断响应时间太快了,可能响应第二次中断的时候第一个字节还没有接收完成。校验有一定的滞后性,但是比发送多个字节后响应IDLE校验要好一些。由于MC0没有硬件回读的功能,因此目前只有这种方法。或者可尝试修改底层代码,只使用TX完成中断作为发送中断,这样理论上也可以,但是要修改底层逻辑

                        1 条回复 最后回复
                        0

                      • 云途开发生态介绍

                        快速上手云途开发生态

                      • 云途论坛规则/Yuntu Forum Rules

                        发帖前请查看

                      • YT CONFIG TOOL调查问卷

                        帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                      • can
                        22
                        demo
                        20
                        uds
                        13
                        lin stack
                        11
                        md14
                        6
                        fbl
                        5
                        yt-link
                        5
                        adc模块
                        4
                        Online Users
                        • 登录

                        • 登录或注册以进行搜索。
                        • 第一个帖子
                          最后一个帖子
                        0
                        • 版块
                        • 最新
                        • 标签
                        • 热门