Ситуация. Есть STM32F4xx с внешней шиной, на которой висят SRAM и NAND.
Вздумалось мне оптимизировать код, и в функции чтения NAND конструкцию
Код
for (i = 2112/4; i; i--)
*buffer32 ++ = (*(volatile uint32_t *)(BANK_NAND_ADDR | NAND_DATA_AREA));
заменил работой с DMA (использую DMA2, Stream0)
Всё работает прекрасно, пока буфер находится во внутренней памяти. Но стоит перенести его во внешнюю память, DMA ломается.
Счётчик данных уменьшается на 32 dword'а (я 32-битными данными работаю, адреса выровнены), регистр FIFO сообщает, что FIFO пустое.
А дальше - всё - счётчик данных "тикать" больше не хочет, биты в регистре статуса не устанавливается, enable не сбрасывается.
Это фича такая? Что-то я нигде описания не нашёл...