全志XR806 Freertos+XRMCU+ADC采样频率偏低
- 
					
					
					
					
 1.主题 Freertos+XRMCU+ADC采样频率偏低 2.问题背景 硬件:XRMCU 
 软件:freertos + ADC3.问题描述 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模式。
- 
				Referenced by q1215200171 q1215200171
- 
				Referenced by q1215200171 q1215200171
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号