полугодовалой давности пост...
Т.е. не важно, какой вызов использовать, spi_slave_write_stream или spi_slave_write_stream_dma, всё-равно будет работать по DMA? Как-то не совсем очевидно, больше похоже, что CONFIG_GDMA_EN добавляет dma функции и конфигурирует контроллер, а дальше уже можно юзать dma или блокирующую передачу. Это я не докопал?
DMA включает та указанная опция - CONFIG_GDMA_EN 1. С ней уже странслированы библиотеки HAL включенные без исходников в Arduino.
Исходники, связанные с SPI, таковы:
RTL00MP3/spi_api.c at master · pvvx/RTL00MP3 · GitHub
RTL00MP3/hal_ssi.c at master · pvvx/RTL00MP3 · GitHub
RTL00MP3/rtl8195a_ssi.c at master · pvvx/RTL00MP3 · GitHub
... и т.д.
Нету там ожидания завершения приема или передачи, что в случае DMA или работы по прерываниям
Блокирующие функции подразумевают выход из них только после полного окончания операции, т.е. вызывающий процесс блокируется, пока операция не будет завершена.
Ожидание добавлено мной в класс
SPIClass как [inline]while(spi_busy((spi_t *)pSpiMaster));[/inline] на блочные операции. Дальше уже не помню - возможно при малой скорости вывод и одного байта будет иметь преждевременный CS, если он назначен как GPIO... Вставлял ожидание, когда отлаживал работу TFT на SPI c более 20 MHz
Иначе вообще не работало и прерывало передачу блоков новой командой к SPI.
И после прошлого описания уже раза два поменялись почти все либы в Ameba Arduino и соответственно в rtlDuino... Сборка либ для rtlDuino происходила путем замещения obj в новых либах от Ameba Arduino на obj собранные из исходников, кусков "реверса" и исправленных ошибок, сейчас находящихся в RTL00MP3\RTL00_SDKV35a, но с хидерами от Ameba Arduino (глобальными установками) и частично дополненных и/или замененных, т.к. в Ameba Arduino для RTL8710AF запрещено многое и в уровне HAL стоят проверки, создающие коммерческие ограничения на использование встроенных в чип аппаратных устройств. В итоге имеем солянку.
Возможности обновить снова rtlDuino нет - после выхода SDK4.0 я полностью переключился на него, а Ameba Arduino имеет корень из SDK V3.5a и развивается по своей ветке. Тут надо ждать слияния SDK 4.0 и следующих версий от Ameba. Один я больше не хочу писать первым новый rtlDuino с включением и RTL серии "B" из SDK 4.0 - слишком много различий в 4.0 и для серии "A". Мне просто физически не успеть всё проверить и/или написать тесты, да и реакция "потребителей" отрицательна на такие действия (см. форум
). Тем более Ameba уже должна сама справляться с Дуриной, т.к. за время "подъема" выпустила dev-board c RTL8710AF и Ameba-Z DEV01 (dev-board c RTL8710BN который ещё не пущен в оф. продажу)...