Hi there!
I have found an issue when using DMA concurrently as using the radio. It is manifested in application code as random DMA transfer errors, the radio itself is not affected.
The root cause is the radio_mac rearming its channels, unfortunately it also rearms any (other) active DMA channels as well.
In the current SDK at github.com/pololu/wixel-sdk/lib … mac.c#L192
The code does a read-modify-write on the DMAARM register, this unfortunately means that other channels that are active will be rearmed as well.
The fix until a new library is release is to change the update to DMAARM register to write-only, that is
/** Start up the radio in the new state which was decided above. **/
switch(radioMacState)
{
case RADIO_MAC_STATE_RX:
DMAARM = (1<<DMA_CHANNEL_RADIO); // Arm DMA channel.
RFST = SRX; // Switch radio to RX.
break;
case RADIO_MAC_STATE_TX:
DMAARM = (1<<DMA_CHANNEL_RADIO); // Arm DMA channel.
RFST = STX; // Switch radio to TX.
break;
}
br
Mattias