现在手里有一块ICE3359_V2.1的板子,EtherCAT的东西已经搭好了,还想在这上面同时配置使用ADC功能,问下EtherCAT和ADC能不能同时用?
我试着使用StarterWare里evmAM335x里面的ADC程序修改,但无法使用。里面TSCADCModuleClkConfig(); TSCADCPinMuxSetUp(); 这两个都是配置哪些内容的,如果想在ICE板子上用ADC怎么配置TouchScreen Module Registers。
下面这样配置可以吗?
TSCADCSetADCPowerUp(TSC_ADC_INSTANCE);
TSCADCConfigureAFEClock(TSC_ADC_INSTANCE, 24000000, 3000000);
TSCADCTSTransistorConfig(TSC_ADC_INSTANCE, TSCADC_TRANSISTOR_ENABLE);
TSCADCStepIDTagConfig(TSC_ADC_INSTANCE, 1);
TSCADCStepConfigProtectionDisable(TSC_ADC_INSTANCE);
StepConfigure(0, TSCADC_FIFO_0, TSCADC_POSITIVE_INP_CHANNEL1);
StepConfigure(1, TSCADC_FIFO_1, TSCADC_POSITIVE_INP_CHANNEL2);
TSCADCTSModeConfig(TSC_ADC_INSTANCE,TSCADC_GENERAL_PURPOSE_MODE);
TSCADCConfigureStepEnable(TSC_ADC_INSTANCE, 1, 1);
TSCADCConfigureStepEnable(TSC_ADC_INSTANCE, 2, 1);
CleanUpInterrupts();
TSCADCEventInterruptEnable(TSC_ADC_INSTANCE, TSCADC_END_OF_SEQUENCE_INT);
TSCADCModuleStateSet(TSC_ADC_INSTANCE, TSCADC_MODULE_ENABLE);
static void StepConfigure(unsigned int stepSel, unsigned int fifo,
unsigned int positiveInpChannel)
{
TSCADCTSStepOperationModeControl(TSC_ADC_INSTANCE,
TSCADC_SINGLE_ENDED_OPER_MODE, stepSel);
TSCADCTSStepConfig(TSC_ADC_INSTANCE, stepSel, TSCADC_NEGATIVE_REF_VSSA,
positiveInpChannel, TSCADC_NEGATIVE_INP_CHANNEL1, TSCADC_POSITIVE_REF_VDDA);
TSCADCTSStepAnalogSupplyConfig(TSC_ADC_INSTANCE, TSCADC_XPPSW_PIN_ON, TSCADC_XNPSW_PIN_OFF,
TSCADC_YPPSW_PIN_OFF, stepSel);
TSCADCTSStepAnalogGroundConfig(TSC_ADC_INSTANCE, TSCADC_XNNSW_PIN_ON, TSCADC_YPNSW_PIN_OFF,
TSCADC_YNNSW_PIN_OFF, TSCADC_WPNSW_PIN_OFF, stepSel);
TSCADCTSStepFIFOSelConfig(TSC_ADC_INSTANCE, stepSel, fifo);
TSCADCTSStepModeConfig(TSC_ADC_INSTANCE, stepSel, TSCADC_ONE_SHOT_SOFTWARE_ENABLED);
}
static void CleanUpInterrupts(void)
{
TSCADCIntStatusClear(TSC_ADC_INSTANCE, 0x7FF);
TSCADCIntStatusClear(TSC_ADC_INSTANCE ,0x7FF);
TSCADCIntStatusClear(TSC_ADC_INSTANCE, 0x7FF);
}
Steven Liu1:
这两个部分目前没有pin脚和功能上的冲突,应该是没问题的。
建议你直接在那个evm环境中把ADC先调通了,这部分的设置应该没什么差别的。
如果卡在哪里了,先把卡住的问题描述清楚,有需要的话再post上对应代码,你这样直接贴代码,辨识不出太多的东西。
Wei Li12:
回复 Steven Liu1:
谢谢!现在evm那部分的内容调通了,移植到ICE上通过CCS调试时可以看到TSC模块寄存器配置内容和我想要的一样,FIFO也有数据变化,但是FIFO的数据不是AIN引脚输入的数据,而是在几个固定的数据之间反复变化,不知道问题出在哪里?还有一个疑问就是在control module模块寄存器中我没有找的AIN0-7、VREFP、VREFN的寄存器,但是在starterware的例程里面有对这几个寄存器进行配置,所以我想问下这个寄存器是否存在?
Steven Liu1:
回复 Wei Li12:
存在的,而且是肯定要配置的,control module里面一般是对pinmux的规划,是否要打开receive enable等。
而你说的这些配置是属于McSPI的功能配置,参考TRM的12章Touchscreen contoller。里面的stepconfig1~16寄存器中都有对这个的配置。每个stepconfig寄存器都是可以单独配置这些参数的。
Wei Li12:
回复 Steven Liu1:
1、我在程序里面对模拟输入引脚AN0-7和TSC模块的参考电压VREFN、VREVP都进行了设置,设置地址是(0x44E10000)+[(0xb2c)/(0xb28)/~(b10)/(0xb30)(0xb34)],这个地址是在starterware里面例程adcVoltMeasure中找到的,在control module模块的寄存器里面,但是用CCS调试时在对应寄存器位置找不到这些设置?这是为什么?
2、我在用ADC模块时只用了两步,STEP1和STEP2,分别采集AN0和AN1通道的数据,并分别记录在FIFO0和FIFO1中,都是非差分数据、无均值、mode是SW enable、one-shot,RFM设为VSSA,REP设为VDDA,使能顺序是先使能TSC模块,在使能STEP1和STEP2,然后读FIFO的数据,在循环回去重新使能。但是FIFO0和FIFO1的数据都是两个通道输入的数据。用万用表测,输入电压为1.3V在0-1.8V之间,没有超出额定范围,这是什么原因造成的?
这些图片都是CCS调试时从ICE板上读的寄存器内容。
Wei Li12:
回复 Steven Liu1:
这几天有调了下,好像发现的问题所在,但没找到解决办法。问题如下:
1、刚为TSC配置好Clock domain,可以在CCS Debug界面读出TSC_Control寄存器的数据时,ADCSTAT寄存器中的Pen_IRQ1和Pen_IRQ0的值是1,IRQSTATUS_RAW寄存器中的PEN_IRQ_synchronized位也是1,但初始值应该都是0吧,但我没找到方法调成0。
2、TSC配置为8路ADC,全部SW Enable,配置好Step,使能Step,使能TSC_ADC_SS module,这个时候,上面问题1里面说的寄存器还是1,同时IRQSTATUS_RAW寄存器中的FIFO1_Underflow位和FIFO0_Underflow位也是1。这是不是说明我的FIFO指针位置不对呀?怎么解决?