I overlooked that the DMA address must be passed "by reference", that is by pointer. Correcting this resolved the problem.
Thanks to @NateEldredge for pointing this out.