paradoxfx

【原创】TI C2833x介绍---系统自带的ADC(12)

1
阅读(5019)

在28335的前一代主流产品,即TMS320F2812那一代,DSP片上自带的AD对外部电路的设计精度要求很高,不然ADC的采样精度很容易受到一些非线性因素的影响,当初TI提供了一些软件程序来帮助我们减少这种影响。在F28335这一代,TI将相关的非线性校正程序和数据存在了片内的固件中,其中在OTP存储器中保存了两个字(word)的校正数据(这些数据随器件封装、ADC转换速率等器件参数的变化而变化),在BootROM中保存了6个字的ADC_cal()校正程序。

在启用BootROM进行引导的情况下,在程序引导时,ADC_cal()校正程序将自动把校正数据写入到ADC参考选择寄存器ADCREFSEL和ADC偏移微调寄存器ADCOFFTRIM寄存器中,不需要我们用户进行收到操作。在不使用BootROM进行引导的情况下,一般是我们使用CCS开发环境将DSP芯片引导启动时,我们需要手动对ADCREFSEL和ADCOFFTRIM寄存器进行赋值,这个步骤并不复杂,只需要在main()函数的初始化代码中对ADC_cal()程序进行调用即可,举例如下:

#define ADC_cal_func_ptr (void (*)(void))0x380080

void main(void){

……

(*ADC_cal_func_ptr)(); // call ADC_cal()

……

}

需要注意的是,在使用CCS进行调试时,我们需要手动调用ADC_cal()程序,而在程序调试无误,烧写FLASH等操作之前,要记得把(*ADC_cal_func_ptr)(); // call ADC_cal()这段代码注视掉,因为用BootROM进行引导时会自动调用它。此外,因为ADC校正数据保存在OTP存储器中,而OTP是受到代码安全模块CSM保护的,所以ADC_cal()程需要在受保护的存储器段,或者在CSM解锁之后从非保护的存储器段中才可调用;如果系统被复位,或者使用ADC控制寄存器1的复位位进行ADC的复位,都需要重新调用ADC_cal()程序。

Baidu
map