Hi,
I'm working on an ADSP-SC594 project, using Core1 for signal acquisition and processing, and Core0 for UART data transmission. I'm acquiring data via four SPORT channels with group enable, and the acquisition works correctly.
Signal Processing on Core1
In the SPORT callback, I normalize the acquired data (rxBufferCh1, rxBufferCh2, rxBufferCh3, rxBufferCh4) using the following code:
for (int i = 0; i < DMA_BUF_SIZE; i++) {
rxBufferCh1Nor[i] = rxBufferCh1[i] * step_voltage;
rxBufferCh2Nor[i] = rxBufferCh2[i] * step_voltage;
rxBufferCh3Nor[i] = rxBufferCh3[i] * step_voltage;
rxBufferCh4Nor[i] = rxBufferCh4[i] * step_voltage;
}
The normalized arrays (rxBufferChxNor) are of type float and stored in shared L3 memory for access by Core0.
Issue
Core0 successfully transmits data from rxBufferCh1Nor and rxBufferCh2Nor via UART, but channels 3 and 4 (rxBufferCh3Nor, rxBufferCh4Nor) show incorrect data. Specifically, after approximately 15 or 16 elements, the normalized arrays for channels 3 and 4 stop updating and retain their initial values (e.g., zeros from the first acquisition), causing waveform distortion in the transmitted data.

Workaround
I found that using separate loops for each channel resolves the issue:
for (int i = 0; i < DMA_BUF_SIZE; i++) {
rxBufferCh1Nor[i] = rxBufferCh1[i] * step_voltage;
}
for (int i = 0; i < DMA_BUF_SIZE; i++) {
rxBufferCh2Nor[i] = rxBufferCh2[i] * step_voltage;
}
for (int i = 0; i < DMA_BUF_SIZE; i++) {
rxBufferCh3Nor[i] = rxBufferCh3[i] * step_voltage;
}
for (int i = 0; i < DMA_BUF_SIZE; i++) {
rxBufferCh4Nor[i] = rxBufferCh4[i] * step_voltage;
}
However, I don't understand why the combined loop causes issues for channels 3 and 4.
Details
-
Hardware: ADSP-SC594
-
Cores: Core1 handles acquisition and normalization; Core0 handles UART transmission
-
Memory: All normalized buffers are in shared L3 memory
-
SPORT Config: Four channels with group enable, acquisition verified correct
-
DMA_BUF_SIZE: 1024
-
UART: Configured for Core0, works for channels 1 and 2
-
step_voltage: Consistent across all channels
What I've Tried
-
Verified SPORT acquisition data in rxBufferChx (correct for all channels)
-
Checked step_voltage value (consistent and valid)
-
Inspected rxBufferChxNor contents; channels 3 and 4 stop updating every 16 elements
-
Confirmed UART configuration is correct (works for channels 1 and 2)
-
Tested separate loops for normalization, which resolves the issue
Questions
-
Why does the combined loop fail to update rxBufferCh3Nor and rxBufferCh4Nor every 16 elements?
-
Could this be related to memory alignment, cache coherence, or compiler optimization issues?
-
Are there known issues with accessing shared L3 memory for multiple channels in ADSP-SC594?
-
What debugging tools or techniques (e.g., CCES debugger) can help identify the root cause?
-
Is there a more efficient way to normalize all channels without separate loops?
Any insights or suggestions to resolve this issue or explain the behavior would be greatly appreciated!
Best Regards!