Цитата(Atlantis- @ Nov 17 2014, 14:37)

может я чего то туплю, но допустим пишу я в SDRAM массив, начиная с адреса 0xD0000000 (указатель uint32_t *Addr = (uint32_t *)0xD0000000;)
потом мне надо Addr подсунуть DMA. я же не могу его привести вот так (uint16_t *)Addr ?
Во-первых, указатель на буфер в SDRAM не обязан иметь тип uint32_t*. Он может быть uint16_t*, void*, enum foobar* и т.д. А во-вторых, регистр адреса источника данных у DMA - это всего лишь 32-разрядный регистр, и он ничего не знает про тип данных, на которые он указывает, да и зачем ему это? Более того, эти регистры чаще всего объявлены в заголовках как uint32_t, поэтому указатель придётся приводить к целому: REG = (uint32_t)Addr.