TI中文支持网
TI专业的中文技术问题搜集分享网站

ADC问题的困惑

ADC模块中ADCRESULTn寄存器有两个地址,分别在外设0区域和外设2区域。对此说法感觉困惑。

问题是通过什么方法可以按需求读取外设0区域和外设2区域的内容。

 

 

HG:

地址空间不同

ADC模块中ADCRESULTn寄存器有两个地址,分别在外设0区域和外设2区域。对此说法感觉困惑。

问题是通过什么方法可以按需求读取外设0区域和外设2区域的内容。

 

 

cheng liu8:

回复 HG:

通过什么方法可以读取外设2对应地址的内容?

然后,又通过什么方法可以读取外设0对应地址的内容?

ADC模块中ADCRESULTn寄存器有两个地址,分别在外设0区域和外设2区域。对此说法感觉困惑。

问题是通过什么方法可以按需求读取外设0区域和外设2区域的内容。

 

 

mangui zhang:

回复 cheng liu8:

最终都是用指针

ADC模块中ADCRESULTn寄存器有两个地址,分别在外设0区域和外设2区域。对此说法感觉困惑。

问题是通过什么方法可以按需求读取外设0区域和外设2区域的内容。

 

 

10#:

回复 cheng liu8:

下次提问请说明清楚具体是哪颗芯片。我假设是F28335:

在它的ADC Reference Guide (SPRU812)手册里,2.8 ADC Conversion Result Buffer Registers (ADCRESULTn)寄存器的描述下方有以下说明:

The ADCRESULTn registers are left justified when read from Peripheral Frame 2 (0x7108-0x7117) with two wait states and right justified when read from Peripheral Frame 0 (0x0B00-0x0B0F) with zero wait states.

简单来说,这两个不同地址的结果存在两点不同:存放在PF2地址的ADC结果是左对齐的,同时需要两个等待周期才能得到,而存放在PF0地址的ADC结果是右对齐的,读取等待周期为0,相当于是从RAM上直接获取。

至于读取方法,实际上的过程你只需要在应用程序中使用结果即可,默认是的PF2。

以下是整个过程的联系,你需要查看ADC结果寄存器在DSP2833x_Adc.h和.cmd文件中是如何定义的,以PF2为例:

DSP2833x_Adc.h:

extern volatile struct ADC_REGS AdcRegs;

ADC_REGS结构体是包含ADCRESULTn的;

DSP2833x_Headers_nonBIOS.cmd:

AdcRegsFile       : > ADC,         PAGE = 1

ADC         : origin = 0x007100, length = 0x000020     /* ADC registers */

AdcRegsFile在DSP2833x_GlobalVariableDefs.c文件中跟AdcRegs有关联,最后"ADC"的实际地址被分配到了0x007100长度为0x20的区间,也就是PF2(0x7108-0x7117)。

#pragma DATA_SECTION(AdcRegs,"AdcRegsFile");volatile struct ADC_REGS AdcRegs;

此时在应用程序中就只需要像例程adc_soc中的源文件Example_2833xAdcSoc.c一样进行如下操作:

Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;

移4位的原因是如上所说,16位的左对齐需要得到最终的12位结果。

同理,对于PF0,TI也定义了一个ADC_RESULT_MIRROR_REGS AdcMirror,只是PF0的访问结果不需要进行移位。

实际应用中,用户只需要包含这些文件,直接使用即可。考虑到访问速度,建议都是操作PF2的结果,因为移位总比等待两个时钟周期划算。

ADC模块中ADCRESULTn寄存器有两个地址,分别在外设0区域和外设2区域。对此说法感觉困惑。

问题是通过什么方法可以按需求读取外设0区域和外设2区域的内容。

 

 

cheng liu8:

回复 10#:

非常感谢你的细致回答

ADC模块中ADCRESULTn寄存器有两个地址,分别在外设0区域和外设2区域。对此说法感觉困惑。

问题是通过什么方法可以按需求读取外设0区域和外设2区域的内容。

 

 

10#:

回复 cheng liu8:

如果回答和解决了你的问题,麻烦确认一下答案关闭本帖,谢谢!

ADC模块中ADCRESULTn寄存器有两个地址,分别在外设0区域和外设2区域。对此说法感觉困惑。

问题是通过什么方法可以按需求读取外设0区域和外设2区域的内容。

 

 

user4603405:

回复 10#:

不明白答主最后一句话“因为移位总比等待俩个时钟周期划算”。映射到PF2的,需要右移吗?而且还需要俩个等待周期。而映射到PF0的,默认是右对齐,不需要右移,也不需要等待周期。

ADC模块中ADCRESULTn寄存器有两个地址,分别在外设0区域和外设2区域。对此说法感觉困惑。

问题是通过什么方法可以按需求读取外设0区域和外设2区域的内容。

 

 

K Mr:直接通过指针就能读取不同寄存器的值

赞(0)
未经允许不得转载:TI中文支持网 » ADC问题的困惑
分享到: 更多 (0)