AnsweredAssumed Answered

STM32 DMA behaviour on copying from 8bit peripherial to 16bit memory

Question asked by dhaka.kuldeep on Jul 10, 2014
Latest reply on Jul 13, 2014 by dhaka.kuldeep
im working on a Isochronous USB device.
im trying to directly copy 8bit ADC data to USB PMA (16bit accessible only).
when tring to perform copy using
PINC = 0   MINC = 1     PSIZE = 8    MSIZE = 16
instead of placing 8bit value to destination, DMA is padding it with 0x00 to make it 16bit (that is not i was expecting).
im unable to understand the behaviour of DMA in the above case using datasheet.
datasheet says "Programmable data width & endian behavior (when bits PINC = MINC = 1" so i guess for me, PINC != MINC.
a sentance above it says "When PSIZE and MSIZE are not equal, the DMA performs some data alignments as
described in Table 27: Programmable data width & endian behavior (when bits PINC = ..... " PINC = MINC = 1 need to be fulfilled?

can anybody describe how should DMA behave in my case.

for 12 bit everything as expected since PSIZE = MSIZE.

test case:
performed ADC read on two channels and both channel connected to VDDA, dumped PMA, and found that memory is having (0x00FF 0x00FF)+ instead of expected (0xFFFF 0xFFFF)+

test case2:
channel 2 GND, and predicted that pma should contain (0x00FF 0x0000)+ and it did.

things i did:
       
  • confirmed DMA register for PINC, PSIZE MSIZE MINC using gdb
  •    
  • read the datasheet
  •    
  • asked Google if he knows the answer
  •    
  • posted on st.com under STM32 :p

if DMA behaviour is ok, is their anything that i can do to copy 8bit values without padding to USB PMA.
-- excluding method: first copy to ram, uC do the un-padding and then perform copy to PMA

(stm32f072)


(gdb) x /512hx 0x40006000
0x40006000:    0x0040    0x0000    0x0060    0x8008    0x0080    0x00c0    0x0140    0x00c0
0x40006010:    0x0200    0x9800    0x02c0    0x9800    0xdb8b    0x02ab    0xd7d0    0x0e54
0x40006020:    0x2864    0x6992    0x57d4    0x6d1e    0x7502    0xb4cd    0x7f92    0x2a8a
0x40006030:    0x5511    0x79f5    0xdb9a    0x3ce8    0x281a    0x9faa    0x2f59    0x7d02
0x40006040:    0x0075    0x0073    0x0029    0x004e    0x0030    0x0020    0x0028    0x0049
0x40006050:    0x0073    0x006f    0x0063    0x0068    0x0072    0x006f    0x006e    0x006f
0x40006060:    0x0441    0x0000    0x0300    0x0000    0xcfcf    0x0457    0x199f    0x3d4b
0x40006070:    0x0bed    0x2495    0xaae2    0x99a9    0xa2a1    0xbe9a    0x81f4    0x80d3
0x40006080:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006090:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400060a0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400060b0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400060c0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400060d0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400060e0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400060f0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006100:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006110:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006120:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006130:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006140:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006150:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006160:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
---Type <return> to continue, or q <return> to quit---
0x40006170:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006180:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006190:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400061a0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400061b0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400061c0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400061d0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400061e0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400061f0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006200:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006210:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006220:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006230:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006240:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006250:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006260:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006270:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006280:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006290:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400062a0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400062b0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400062c0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400062d0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
---Type <return> to continue, or q <return> to quit---
0x400062e0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x400062f0:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006300:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006310:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006320:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006330:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006340:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006350:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006360:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006370:    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff    0x00ff
0x40006380:    0xa9a3    0x279c    0xf7d1    0x15dc    0xd395    0x050f    0xea91    0x0ac8
0x40006390:    0x8577    0x5557    0x0efd    0x30ef    0x1edb    0xae3b    0x3477    0x5975
0x400063a0:    0x42a2    0x8a9e    0x11dd    0x9fcc    0x5571    0x4077    0xcee9    0xf2a6
0x400063b0:    0xcc5f    0x55e1    0xc1ad    0xafac    0xa6ea    0xaa94    0x37e7    0xccbc
0x400063c0:    0xab0a    0xc330    0x7015    0x4154    0x15e5    0x41b4    0x21a1    0x8fec
0x400063d0:    0x8355    0x56c4    0x230f    0xeed1    0xc2ef    0xa8ee    0x64cc    0xdef5
0x400063e0:    0x2cb8    0x36ca    0x4d14    0x3dca    0x2675    0xf98d    0x9f8f    0xab4a
0x400063f0:    0x7557    0x35d4    0xab35    0xaafe    0xb6ab    0x2be6    0x52b3    0x3dd7
(gdb) cont
Continuing.
^C
Program received signal SIGINT, Interrupt.
pwm_init (bIndex=<optimized out>) at ./source/pwm.c:93
93        gpio_set_output_options(pwmX->port, GPIO_OTYPE_PP, GPIO_OSPEED_HIGH, pwmX->pin);
(gdb) x /512hx 0x40006000
0x40006000:    0x0040    0x0000    0x0060    0x8008    0x0080    0x00c0    0x0140    0x00c0
0x40006010:    0x0200    0x9800    0x02c0    0x9800    0xdb8b    0x02ab    0xd7d0    0x0e54
0x40006020:    0x2864    0x6992    0x57d4    0x6d1e    0x7502    0xb4cd    0x7f92    0x2a8a
0x40006030:    0x5511    0x79f5    0xdb9a    0x3ce8    0x281a    0x9faa    0x2f59    0x7d02
0x40006040:    0x0075    0x0073    0x0029    0x004e    0x0030    0x0020    0x0028    0x0049
0x40006050:    0x0073    0x006f    0x0063    0x0068    0x0072    0x006f    0x006e    0x006f
0x40006060:    0x0441    0x0000    0x0300    0x0000    0xcfcf    0x0457    0x199f    0x3d4b
0x40006070:    0x0bed    0x2495    0xaae2    0x99a9    0xa2a1    0xbe9a    0x81f4    0x80d3
0x40006080:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006090:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400060a0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400060b0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400060c0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400060d0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400060e0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400060f0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006100:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006110:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006120:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006130:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006140:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006150:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006160:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
---Type <return> to continue, or q <return> to quit---
0x40006170:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006180:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006190:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400061a0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400061b0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400061c0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400061d0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400061e0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400061f0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006200:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006210:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006220:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006230:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006240:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006250:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006260:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006270:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006280:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006290:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400062a0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400062b0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400062c0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400062d0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
---Type <return> to continue, or q <return> to quit---
0x400062e0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x400062f0:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006300:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006310:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006320:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006330:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006340:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006350:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006360:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006370:    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff    0x0000    0x00ff
0x40006380:    0xa9a3    0x279c    0xf7d1    0x15dc    0xd395    0x050f    0xea91    0x0ac8
0x40006390:    0x8577    0x5557    0x0efd    0x30ef    0x1edb    0xae3b    0x3477    0x5975
0x400063a0:    0x42a2    0x8a9e    0x11dd    0x9fcc    0x5571    0x4077    0xcee9    0xf2a6
0x400063b0:    0xcc5f    0x55e1    0xc1ad    0xafac    0xa6ea    0xaa94    0x37e7    0xccbc
0x400063c0:    0xab0a    0xc330    0x7015    0x4154    0x15e5    0x41b4    0x21a1    0x8fec
0x400063d0:    0x8355    0x56c4    0x230f    0xeed1    0xc2ef    0xa8ee    0x64cc    0xdef5
0x400063e0:    0x2cb8    0x36ca    0x4d14    0x3dca    0x2675    0xf98d    0x9f8f    0xab4a
0x400063f0:    0x7557    0x35d4    0xab35    0xaafe    0xb6ab    0x2be6    0x52b3    0x3dd7
(gdb) x /1wx 0x400020000
0x20000:    0xffff0080
(gdb) x /1wx 0x400020008
0x20008:    0xffff0080
(gdb) x /1wx 0x40020008
0x40020008:    0x000014a6
(gdb) x /1wx 0x4001240C
0x4001240c:    0x000104d3

Outcomes