Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    全志XR806 Freertos+XRMCU+ADC采样频率偏低

    其它全志芯片讨论区
    xr806 xr829 xr872 faq 技术支持
    1
    1
    115
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • q1215200171
      budbool LV 8 last edited by

      1.主题

      Freertos+XRMCU+ADC采样频率偏低

      2.问题背景

      硬件:XRMCU
      软件:freertos + ADC

      3.问题描述

      3.1复现步骤

      使用SDK自带的example/adc。

      修改adc_callback,adc_callback为中断回调,该函数的调用频率和ADC的频率一致,在该函数里面加一个IO口翻转。

      编译并烧录。

      用示波器或逻辑分析仪,检查IO口翻转频率和ADC_FEQ是否一致。

      3.2具体表现
      通过逻辑分析仪检查,实际ADC采样频率只有ADC_FEQ设置的1000分之一。

      4.问题分析

      读取ADC的所有相关寄存器,发现ADC使用的并不是默认时钟,而是低速时钟。高速时钟大约是40M,低速时钟是32K,大约相差1000倍,和测试结果相符。

      5.根本原因

      ADC的时钟选择已经在ROM化代码HAL_ADC_Init中写死,如下所示:

      __rom_xip_text
      HAL_Status HAL_ADC_Init(ADC_InitParam *initParam)
      {
          ……
          HAL_CCM_GPADC_SetMClock(CCM_APB_PERIPH_CLK_SRC_LFCLK, CCM_PERIPH_CLK_DIV_N_1, CCM_PERIPH_CLK_DIV_M_1);
          ……
      }
      

      即使外部再怎么修改修改时钟也不会生效。

      6.解决办法

      默认使用低速时钟的原因时,可以让ADC在低功耗模式时,依旧可以运行,而且ADC频率过高时,容易因为频繁进出中断导致程序卡死。
      如果希望设置成高速时钟,需要把src/rom/rom_bin/src/driver/chip/hal_adc.c部分的代码去ROM,如果设置的频率偏高,请使用burst模式。

      1 Reply Last reply Reply Quote Share 0
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • 1 / 1
      • First post
        Last post

      Copyright © 2022 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策