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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. YTM32B1ME0 读取ADC FIFO数据的通道号与配置通道不一致

YTM32B1ME0 读取ADC FIFO数据的通道号与配置通道不一致

已定时 已固定 已锁定 已移动 YTM32B1M系列
12 帖子 5 发布者 2.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • DigaD 离线
    DigaD 离线
    Diga
    写于 最后由 编辑
    #2

    ADC 的 FIFO 是读一个结果,出去一个结果。你用 debugger 去读寄存器,会把 ADC FIFO 里的数据取出,这时候软件再去读,读到的是另一个结果,而且调试器是会不停的刷新寄存器,也就是在一直读取ADC FIFO。
    不要用调试器去展开 ADC FIFO,除非你已经在代码中把所有数据都读出来了

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

      Diga 请问下问题1出现的原因是什么:
      1.我配置ADC的一组为: 通道 0,1,12,13;当我读取ADC->FIFO时,读出的通道是0, 12, 9, 9;

      DigaD 1 条回复 最后回复
      0
      • DigaD 离线
        DigaD 离线
        Diga
        在 回复了 FarleyHuang 最后由 编辑
        #4

        @FarlyHuang 大抵是因为你下面打开了 Memory 窗口,0x4004004C 正好是 ADC->FIFO 寄存器的地址,跟读左侧的寄存器窗口效果是一样的

        1 条回复 最后回复
        0
        • FarleyHuangF 离线
          FarleyHuangF 离线
          FarleyHuang
          写于 最后由 FarleyHuang 编辑
          #5

          Diga 我现在把memory读取ADC-> FIFO的视图关闭了,现在读取通道号仍然与配置不一样
          3fbd7a66-f8f0-4a09-bdc0-137b02b0fa5c-image.png

          下次是我调试的配置:

          /* adc_config0 */
          const adc_converter_config_t adc_config0={
              .clockDivider=0,
              .startTime=12,
              .sampleTime=2,
              .overrunMode=false,
              .autoOffEnable=false,
              .waitEnable=false,
              .trigger=ADC_TRIGGER_SOFTWARE,
              .align=ADC_ALIGN_RIGHT,
              .resolution=ADC_RESOLUTION_12BIT,
              .dmaWaterMark=0,
              .dmaEnable=false,
              .sequenceConfig={
                  .sequenceMode=ADC_CONV_LOOP,
                  .sequenceIntEnable=false,
                  .convIntEnable=false,
                  .readyIntEnable=false,
                  .ovrunIntEnable=false,
                  .sampIntEnable=false,
                  .channels={
                      ADC_INPUTCHAN_EXT0,
                      ADC_INPUTCHAN_EXT1,
                      ADC_INPUTCHAN_EXT12,
                      ADC_INPUTCHAN_EXT13,
                  },
                  .totalChannels=4,
              },
              .compareConfig={
                  .compareEnable=false,
                  .compareAllChannelEnable=false,
          
                  .compHigh=4095,
                  .compLow=0,
                  .compIntEnable=false,
              },
          };
          
          #include "adc.h"
          
          #define ADC_INST 0U
          
          adc_converter_config_t get_adc_config0;
          
          uint8_t set_adc_sequence_cnt = 2; 
          uint8_t get_adc_sequence_cnt = 2; 
          
          void ADC_Init(void)
          {
              ADC_DRV_ConfigConverter(ADC_INST,&adc_config0);
              ADC_DRV_Start(ADC_INST);
          
              //get adc sequence length
              set_adc_sequence_cnt = adc_config0.sequenceConfig.totalChannels;
              ADC_DRV_GetConverterConfig(ADC_INST, &get_adc_config0);
              get_adc_sequence_cnt = get_adc_config0.sequenceConfig.totalChannels;
          }
          
          
          uint32_t adc_FIFO_values[] = {0,0,0,0};
          uint16_t adc_channels_values[] = {0,0,0,0};
          
          void ADC_Get_Value_10ms(void)
          {
              uint32 reg_value = 0;
              for (uint8_t i = 0; i < set_adc_sequence_cnt; i++)
              {
                  reg_value = ADC_DRV_ReadSeqtagAndData(ADC_INST);
                  uint8_t channel_id = reg_value>>16;
                  // uint8_t channel_id = (reg_value>>16)&0x1f;
                  uint16_t chan_raw_data = (reg_value&0x0000ffff);
          
                  adc_FIFO_values[i] = reg_value;
                  adc_channels_values[i] = channel_id;
                  if(channel_id == 0)//ADC0_SE0
                  {
                      uint16 ADC_mV_IntPackVolt = 0;
                      ADC_mV_IntPackVolt = (reg_value&0x0000ffff)*3300/4096;
                      //test code to view the convert result of ADC
                      ADC_mV_IntPackVolt = 1100;
                  }
              }
              ADC_DRV_Start(ADC_INST);
          }
          
          DigaD 番茄+两个蛋番 2 条回复 最后回复
          0
          • DigaD 离线
            DigaD 离线
            Diga
            在 回复了 FarleyHuang 最后由 编辑
            #6

            @FarlyHuang 看起来还是有个什么东西在读取 ADC->FIFO ,你读到的第三个值 0x9094C,应该就是 FIFO 空了之后的值。也就是你软件读了两个值之后,ADC->FIFO 已经空了。
            可以再 check 一下你的调试环境,如果可以的话,尽量换别的 IDE 再试试(KEIL,IAR,OZone)

            1 条回复 最后回复
            0
            • FarleyHuangF 离线
              FarleyHuangF 离线
              FarleyHuang
              写于 最后由 编辑
              #7

              Diga 好的, 我用OZone尝试一下

              1 条回复 最后回复
              0
              • FarleyHuangF 离线
                FarleyHuangF 离线
                FarleyHuang
                写于 最后由 编辑
                #8

                Diga 感谢指导, 使用OZone 尝试后,读取的通道ID与配置项一致了;

                顺便请教一下,如果使用vs code debug情况下,怎么排查问题是哪里引起的乱序呢? 因为使用vs code是比较方便的

                image.png

                FrankieF 1 条回复 最后回复
                0
                • FrankieF 离线
                  FrankieF 离线
                  Frankie YunTu
                  在 回复了 FarleyHuang 最后由 编辑
                  #9

                  @FarlyHuang 关于vscode debug,你可以在这个地方问题:https://github.com/Marus/cortex-debug

                  1 条回复 最后回复
                  0
                  • FarleyHuangF 离线
                    FarleyHuangF 离线
                    FarleyHuang
                    写于 最后由 编辑
                    #10

                    Frankie 好的,感谢

                    1 条回复 最后回复
                    0
                    • DigaD Diga 在 中 引用了 这个主题
                    • 番茄+两个蛋番 在线
                      番茄+两个蛋番 在线
                      番茄+两个蛋
                      回复了FarleyHuang 最后由 编辑
                      #11

                      FarleyHuang 你好,初始化的时候已经开启了ADC_DRV_Start,后续获取后还需要再次调用吗?这是为什么啊?

                      YTCQ_shejiwangY 1 条回复 最后回复
                      0
                      • YTCQ_shejiwangY 在线
                        YTCQ_shejiwangY 在线
                        YTCQ_shejiwang YunTu
                        回复了番茄+两个蛋 最后由 编辑
                        #12

                        番茄+两个蛋
                        软件触发,触发模式不为Countinous,是需要再次触发的(Start)。

                        1 条回复 最后回复
                        0

                      • 云途开发生态介绍

                        快速上手云途开发生态

                      • 云途论坛规则/Yuntu Forum Rules

                        发帖前请查看

                      • YT CONFIG TOOL调查问卷

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

                      • can
                        23
                        demo
                        20
                        uds
                        13
                        lin stack
                        12
                        md14
                        6
                        fbl
                        5
                        yt-link
                        5
                        adc模块
                        4
                        Online Users
                        Tiger987T
                        Tiger987
                        ganyongchaoG
                        ganyongchao
                        luohaoL
                        luohao
                        YTCQ_shejiwangY
                        YTCQ_shejiwang
                        yt0069Y
                        yt0069
                        FrankF
                        Frank
                        kid_liK
                        kid_li
                        番茄+两个蛋番
                        番茄+两个蛋
                        xianghanX
                        xianghan
                        YQHY
                        YQH
                        liu136L
                        liu136
                        guoweixingG
                        guoweixing
                        zhaodong1Z
                        zhaodong1
                        D
                        Derrick
                        • 登录

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