2803x的ADC不是基于排序器的,而是基于SOC(Start of Conversion,转换启动)的。术语SOC是指单个通道的单次转换的配置设置定义。设置包含三个方面的配置:启动转换的触发源、转换的通道以及采样窗口时间大小。每一个SOC都是独立配置的,并且可以有触发源、通道和采样时间的任意组合。这就提供了灵活的方式来配置转换启动,包括用不同的触发源分别采样不同的通道,使用单一的触发源过采样相同的通道和用单一的触发源触发一系列不同的通道。SOC框图如图5-2所示。
SOCx的触发源可以由ADCSOCxCTL寄存器的TRIGSEL位和ADCINTSOCSEL1或者ADCINTSOCSEL2寄存器的相应位组合来配置。软件也可以用ADCSOCFRC1寄存器强制产生一个SOC事件。SOCx的通道和采样时间可以在ADCSOCxCTL寄存器中的CHSEL和ACQPS位来配置。例如,为了配置当ePWM3定时器溢出时触发ADCINA1通道上的转换,首先就必须设置ePWM3溢出时输出到SOCA或者SOCB信号上,在这里使用SOCA。然后,用ADCSOCxCTL寄存器设置一个SOC。选择哪个SOC没有区别,这里使用SOC0。允许的最快采样窗口是7个周期。选择最短的采样时间,ADCINA1为转换通道和ePWM3作为SOC0触发,分别设置ACQPS位域为6,CHSEL位域为1,TRIGSEL位域为9。这样写入寄存器的值应该是:
ADCSOC0CTL=4846h; //(ACQPS=6,CHSEL=1,TRIGSEL=9)
配置完成后,当ePWM3的SOCA事件产生时将会触发ADCINA1单个转换,转换结果将会存入ADCRESULT0寄存器。
如果需要外加三倍的过采样,那么SOC1、SOC2及SOC3可以配置成和SOC0的内容一样:
ADCSOC1CTL=4846h; //(ACQPS=6,CHSEL=1,TRIGSEL=9)
ADCSOC2CTL=4846h; //(ACQPS=6,CHSEL=1,TRIGSEL=9)
ADCSOC3CTL=4846h; //(ACQPS=6,CHSEL=1,TRIGSEL=9)
当如此配置时,在ePWMSOCA事件产生时,四个对于ADCINA1通道的转换就会开始,结果分别存入ADCRESULT0~ADCRESULT3寄存器中。(www.daowen.com)
另一种应用场合可能需要基于同一种触发源的三种不同信号的采集。这可以通过改变SOC0~SOC2中的CHSEL位域实现,这时保持TRIGSEL位域不变。
ADCSOC0CTL=4846h; //(ACQPS=6,CHSEL=1,TRIGSEL=9)
ADCSOC1CTL=4886h; //(ACQPS=6,CHSEL=2,TRIGSEL=9)
ADCSOC2CTL=48C6h; //(ACQPS=6,CHSEL=3,TRIGSEL=9)
如此配置之后,ePWMSOCA时间产生时,三路转换将会依次进行。ADCINA1通道的转换结果将会存放在ADCRESULT0中。ADCINA2通道的转换结果将会存放在ADCRESULT1中。ADCINA3通道的转换结果将会存放在ADCRESULT2中。转换的通道和触发源不影响转换结果的存放。结果寄存器与SOC相关。
图5-2 SOC框图
注意:这些例子并不完整,ADC必须通过PCLKCR0寄存器使能且ADC必须上电才能正常工作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。