Comments 2
Пара мыслей спросонок. Не претендуя на глубокий смысл, конечно же.
> Max Burst Size – ... Пока этот размер ... записан или прочитан, другие ... не смогут обратиться... .
Наверное, всё-таки, это (по аналогии с сетями) объём данных "сверх пропускной способности", который модуль может прожевать. Но не должен. Иначе бы назывался как-нибудь вроде Min Frame Size (и не имел понятного, по крайней мере для меня, функционального смысла).
В вашем примере с launch_dma_includes() с указателями нигде не используется volatile. Они там все передаются в Xil-функции, где, наверняка, приводятся, но всё же. Возможно, из-за подобного подхода в C-коде у вас не получается работать с кэшами, и приходится их отключать.
Очень интересно было бы посмотреть сколько тактов займёт этот лаунч, если указателям натыкать volatile. По идее столько же, но компилеры умеют удивлять, а любопытство это двигатель прогресса. Впрочем, как и причина травм и преждевременной смерти)))
Сто лет как не занимаюсь ПЛИСами, так что "прошу отнестись с пониманием" ©
Нет, это как раз таки max burst size. Например хотим передать 100 байт, а max burst size равен 64байта, тогда на адресной шине увидем два запроса, один на 64 байта а после короткой паузы ещё один запрос на 36 байт.
Зачастую видел примеры при работе с дма, после его настройки вызывается функция Flush(), которая должна актуализировать все что в кэше. Так что думаю volatile не спасет)
Xilinx AXI DMA v7.1 (Simple Mode)