-
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 1 -
5V充放电设备高精度电压波动
目前在调试板子阶段,但是开环高精度电压有波动,差不多几毫伏的波动,有什么办法可以解决嘛
2025-07-15 1 -
贴片MOS管测温
目前贴片MOS管顶部加散热器,但是在MOS管上沾点散热器会有点隔绝导致散热不均匀,像这种贴片MOS管怎么去沾点测温好一点。
2025-07-09 10 -
DCDC电源模块带载后输入电压被拉低
测试金升阳5V转5v电源隔离芯片,按照规格书使用下面电路测试。空载时,输入5.009V,输出5.296V;半载时,输入被下拉为4.86V,输出4.927V;满载时,输入被下拉为4.673V,输出4.462V。Cin和Cout都用一个0.1uf和10uf电容并联,求各位指导一下,这种原因是什么导致的
2025-07-07 10 -
紧急 !怎么缩短STM32H743 FMC 连续两次读PSRAM的时间间隔?
STM32H743通过FMC与FPGA通讯。设计成PSRAM,地址数据复用模式,16bit宽度。连续两次读操作时间间隔最小约130ns,与地址建立时间,地址保持时间,数据保持时间无关。而连续两次写操作时间间隔最小约10ns。请问怎么缩小两次读操作的时间间隔?
2025-07-05 10 -
ads8866跟dsp28335通信问题
sp28335和ads8866(16位ad)使用spi通信,不管如何调整,读取到的值一直是65535,使用的ad使用的三线模式,DIN接DVDD,下面是我的代码:spi_init(){EALLOW;//SPI线映射GpioCtrlRegs.GPAMUX2.bit.GPIO16=1;//MOSIGpioCtrlRegs.GPAMUX2.bit.GPIO17=1;//SOMIGpioCtrlRegs.GPAMUX2.bit.GPIO18=1;//SCLKGpioCtrlRegs.GPAMUX2.bit.GPIO19=0;//GPIO19做普通GPIOGpioCtrlRegs.GPADIR.bit.GPIO19=1;//输出GpioDataRegs.GPACLEAR.bit.GPIO19=1;GpioCtrlRegs.GPAQSEL2.bit.GPIO16=3;GpioCtrlRegs.GPAQSEL2.bit.GPIO17=3;GpioCtrlRegs.GPAQSEL2.bit.GPIO18=3;SpiaRegs.SPICCR.bit.SPISWRESET=0;SpiaRegs.SPICCR.bit.CLKPOLARITY=0;SpiaRegs.SPICCR.bit.SPILBK=0;SpiaRegs.SPICCR.bit.SPICHAR=15;SpiaRegs.SPICTL.bit.CLK_PHASE=1;SpiaRegs.SPICTL.bit.MASTER_SLAVE=1;SpiaRegs.SPICTL.bit.TALK=1;SpiaRegs.SPICTL.bit.SPIINTENA=0;SpiaRegs.SPIBRR=37;SpiaRegs.SPISTS.all=0x0000;SpiaRegs.SPICCR.bit.SPISWRESET=1;SpiaRegs.SPIPRI.bit.FREE=1;EDIS;}voidReadADSChain(void){//1)CONVST上升沿触发EALLOW;GpioDataRegs.GPASET.bit.GPIO19=1;DELAY_US(20);GpioDataRegs.GPACLEAR.bit.GPIO19=1;EDIS;SpiaRegs.SPISTS.bit.INT_FLAG=1;SpiaRegs.SPITXBUF=0x00;//发空字节while(!SpiaRegs.SPISTS.bit.INT_FLAG){}adcData[0]=SpiaRegs.SPIRXBUF;}
2025-06-23 1