-
TMS320F280049使用SPI作为从机通讯和ADC采样冲突问题
我想请教一下各位大佬,遇到了下面这个问题,恳请提供建议和帮助,谢谢!描述和问题如下:1.使用了SPIA,作为从机,比特率为15M,FIFO的接收和发送的深度都为8,同步收发16位的200个数组元素的数组。2.SPI启用了DMA的CH4(RX)、CH5(TX),都为循环模式,burst_size=8,transfer_size=25,都开启了循环模式。3.ADC使用了EPWM的SOC触发采样,使用了三个ADC,ADC1,、ADC2、ADC3,分别采样128个数据。4.ADC分别使用了CH1、CH2、CH35.问题现象:现在的工况是工作是开启ADC采样DMA发送完成触发中断后调用函数执行FFT以及触发CLA任务完成后再次开启采样,直道工作接收停止这个循环过程;SPI配置好和主机同步后就一直通过DMA循环接收,中间不停止不重启,现在是只要不启动工作,SPI的通讯收发是正常的,但是只要开启工作,ADC一直开始采样,SPI的接收FIFO就会溢出,清除标志位也一样很快溢出,调试看DMA的发送完成中断触发的时间变慢了,一溢出通讯就异常了,是因为DMA总线被ADC一直大量占用了吗,还是中断的优先级比其他的低导致SPI的中断和DMA的中断相应不及时导致的,试了降低比特率和FIFO的阈值都起不到效果,恳请给出好的建议!!!一下是程序的一些配置:voidADC_init(){//AD_PIinitialization//ADCInitialization:WriteADCconfigurationsandpoweruptheADC//ConfigurestheADCmodule'soffsettrimADC_setOffsetTrimAll(ADC_REFERENCE_EXTERNAL,ADC_REFERENCE_3_3V);//Configurestheanalog-to-digitalconvertermoduleprescaler.ADC_setPrescaler(AD_PI_BASE,ADC_CLK_DIV_2_0);//Setsthetimingoftheend-of-conversionpulseADC_setInterruptPulseMode(AD_PI_BASE,ADC_PULSE_END_OF_CONV);//Powersuptheanalog-to-digitalconvertercore.ADC_enableConverter(AD_PI_BASE);//Delayfor1mstoallowADCtimetopowerupDEVICE_DELAY_US(500);//SOCConfiguration:SetupADCEPWMchannelandtriggersettings//DisablesSOCburstmode.ADC_disableBur
2025-07-16 0