This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Tool/software:
Hi there,
I am using a MSP432E401Y and an ADS8329 to sample a baseband signal. The SSI port of the MSP432 is used to read the conversion result. A GPIO pin PF5 is used as the trigger signal to trigger each ADC conversion.
The issue is when I clear the pint PF5 and then set the PF5 to trigger the ADC and then read the results. I get a large delay between two reading frames, and the ADC sampling period is about 2us (the scope result can be found in this link - https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1427196/msp432e401y-msp432e401y-ssidataget-delay/5473065#5473065).
This is much larger than the desired 1us conversion period (1MHz sampling rate), and I want to get a higher conversion rate. May I use the SSI port's FSS signal as the ADS8329's /CONVST signal? This way, I do not need to clear and then set PF4, and I will save some time to get a faster conversion.
Thanks a lot,
Zhonghai
Hi Zhonghai,
May I use the SSI port's FSS signal as the ADS8329's /CONVST signal?
I have forwarded your question to our ADS8329 experts to confirm the above question.
Zhonghai,
From what I see of the FSS, it looks to me like that would be most appropriately used as FS/CS on the ADS8329. Please refer to Figure 1 in the ADS8329 datasheet. The CONVST triggers the beginning of the conversion period and once that completes, pin 4 (EOC/INT) goes active signaling the MSP432 to begin data transfer. Can you use a timer output for the CONVST instead? Then use EOC/INT to fire an interrupt on the MSP432 to collect the 16-bit conversion result.
Hi Tom,
With the current configuration (PF5 acts as the trigger signal), I can get about 2us ADC sampling time (500kHz sampling rate).
The current code is as follows.
for (i=0; i<15; i++)
{
// manual trigger a sampling, /CONVST low for at least 40ns
GPIOPinWrite ( GPIO_PORTF_BASE, GPIO_PIN_4, 0 );
SSIDataPut(SSI0_BASE,i);
SSIDataGet(SSI0_BASE, &sample_data[i]);
GPIOPinWrite ( GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_4 );
while(SSIBusy(SSI0_BASE))
{ }
}
If I use a timer to trigger ADC and an interrupt to read the result, can I get a higher sampling rate?
Thanks a lot,
Zhonghai
That's a question better answered by Charles. In my opinion, if you can set the timer (or PWM) to trigger at your desired sample rate, as long as you get the 16-bit conversion result transmitted before the next interrupt, you should be good!
Hi Charles,
Tom suggested me to use a timer to trigger the ADC and an interrupt to read the ADS8329 result.
Do you have an estimation on the time (how many microseconds) an interrupt will use?
In the interrupt, there will be only the following codes.
SSIDataPut(SSI0_BASE,i);
SSIDataGet(SSI0_BASE, &sample_data[i]);
while(SSIBusy(SSI0_BASE))
{ }
Thank you very much,
Zhonghai
Hi Zhonghai,
I agree with Tom that you can use a timer to generate an timeout interrupt at your desire sampling rate. In the interrupt ISR, you can do your SSIDataGet(). I don't have the precise timing information as to when the ISR is entered after a timer is timeout. But for M4 processor, the interrupt latency is generally very short, in about a few cycles. Since you are sending/receiving SPI data in the ISR, I don't think you need to poll for the SSIBusy flag. Why don't you give it a try and let me know what happens.
I want to also give you a heads up that I will be OOO for a week. Please expect delay in my future response.