I am using eZDSP with an 28355 DSC and tried to change the provided example "Example_2833xDMA_xintf_to_ram" from using 16 bit data transfer to using 32 bit data transfer. However, if I configure register XTIMING7.bit.XSIZE = 1, then neither DMA transfer of a 32Bit data (DMA configured for 32 bit transfer: DMA MODE.bit.DATASIZE=1 and BURST_SIZE.all = 1) nor access to zone 7 directly sets the high 16 bit of the data correctly.
Example:
#pragma DATA_SECTION(foo,"ZONE7DATA");
volatile Uint32 foo; // adress of this variable is even ( 0x0020FC00 )
void main(void)
{
init_zone7(); // initialisation of XINTF zone 7 for 32 data transfer; I modified the provided example function, so that XINTF uses 32 bit (respective GPIO's and XTIMING.bit.XSIZE=1)
foo = 0xABCD2222; //write 32 bit of data to zone 7
}
Problem:
When I look at the memory location of variable "foof", only the high 16 bit were transfered. The low 16 bit were overwritten, i.e. 0x0020FC00 (high 16bit) contains 0xABCD but 0x0020FC01 (low 16 bit) contains 0xFFEF. Moreover, performing this transfer seems to change the memory content of each odd adress in the whole zone!
Questions:
How do I have to perform 32 bit data transfer to or from a XINTF zone?
Do I have to manually manipulate adress pointers via assembler to perform this 32 bit access?
Could you please provide an example?
Thank you very much!