Ok thanks Lars.
I found the issue causing the image with my code when casting the floats to unsigned integers for the device buffer.
It looks like the maximum value should be (2^15-1) for a 16-bit signed word. I assume the fpga is taking the 12 MSBs of this word for the DAC?
I was observing very low output power initially, but then I realized I was observing TX on the wrong port so I was actually seeing TX leakage, not the desired signal.
By the way, is there any particular reason the DAC DMA is lumped in with the DDS device? It seems like the functionality is entirely separate. Also, when the DAC DMA device is disabled I assume that means the DDS can be enabled. Does the DAC DMA have priority?