There are a couple of things going on here.
Main thing first is that it is invalid to cast a data pointer to a function pointer or vice versa (even an explicit cast). Hence the warning about “invalid type conversion”.
For DMA setup on an mspx device, we need to get a 20-bit address. This requires using the intrinsic:
__data16_write_addr(unsigned short addr, unsigned long src)
The intrinsic generates the desired sequence including MOVA instruction:
MOV.W addr, Rx
MOVA src, 0(Rx)
Please see msp430 dma example code for details: http://www.ti.com/lsds/ti/microcontrollers_16-bit_32-bit/msp/tools_software.page#code
Or if you have MSP430Ware installed, you can browse through MSP430Ware content inside TI Resource Explorer to find the code examples.
Regards,
Greg