Hello
I am working on a project that uses the dma to move data from program memory to peripherals...the example I am looking at set the dma address gpioe address offset 0x15...I notice that the stm manual list the odr offset address as 0x14...what are offsets 0x15, 0x16, 0x17...the example has the data show up on gpioe 8 thr 15...how do you set different gpio pins and do the pins have to be consecutive (8 thr 15) or can you set the dma data to use 4,6,8,10,12,13,14,15 pins
The register is mapped into a 32-bit address space, ie 4 consecutive bytes
The register uses only 16-bits to reflect the output pins. Thus the byte at +0x14 is pins 0 thru 7, and +0x15 is pins 8 thru 15
You can write this as a 16-bit word, or 32-bit word also.
There is another bit set/bit clear register which is 32-bit wide, the first 16-bit perform one function (set) the other 16-bit perform the other function (clear)
That makes sense...thank you
If you use the dma to sent data (8 bits parallel) from the memory to peripheral do the gpio pins need to be in consecutive order (0 thr 7 or 8 thr 15)...or can you assign pins at random order (1,5,6,8,11,12,14,15 etc)? Or on different ports gpioa pins 1,5,11,12 and gpiob 5,10,12,15 for example.
Dma-Base-addr = gpioa
DMA writes are just like any other, there is no bit swizzling functionality, or writing to disparate addresses.
You could create complex patterns using the BSRR, but you'd have to create those ahead of time in a buffer, with each being 32-bit wide.
Thanks again...I have another question
So if I want to use the dma to place data (16 bits) from the memory to gpioe...what would the dmabaseaddr be...4002-1014 on the f407 chip..and would that write to all sixteen pins on the gpioe port
(uint32_t)&GPIOE->ODR; // Address of GPIO E output data register