DSP F28335 ADC配置实战:从时钟树到采样模式的深度解析与避坑指南
在嵌入式系统开发中,ADC(模数转换器)配置往往是硬件工程师最容易踩坑的环节之一。特别是对于初次接触TI DSP F28335系列芯片的开发者,看似简单的ADC模块背后隐藏着诸多细节陷阱。本文将带你深入理解F28335 ADC的工作原理,避开那些官方文档没有明确指出的"暗坑"。
1. 时钟配置:从HSPCLK到ADCCLK的精确计算
ADC的时钟配置是整个模块正常工作的基础,但很多开发者在这里栽了跟头。F28335的时钟树结构复杂,需要经过多级分频才能得到最终的ADCCLK。
1.1 系统时钟到HSPCLK的分频
首先需要明确的是,系统时钟(SYSCLKOUT)不能直接作为ADC的时钟源。它需要先分频生成高速外设时钟(HSPCLK),这是第一道分频:
// 以150MHz系统时钟为例
#define ADC_MODCLK 0x3 // 分频系数
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)
EDIS;
常见误区:
- 忽略EALLOW/EDIS保护机制,导致寄存器配置不生效
- 错误计算分频系数,导致HSPCLK超出25MHz限制
- 未考虑不同主频下的分频系数调整
1.2 HSPCLK到ADCCLK的二次分频
得到HSPCLK后,还需要通过ADCTRL3寄存器进行二次分频:
#define ADC_CKPS 0x1 // ADCCLKPS分频系数
#define ADC_SHCLK 0xF // 采样保持周期
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_S



被折叠的 条评论
为什么被折叠?



