Только очистить буфер перед приемом DMA это почему-то не помогает.
Вот перед блокирующим приемом - да, очищает... Но я, честно говоря, не ожидал такой подлянки, что при преобразовании типов все равно нужно volatile писать: ведь регистр уже объявлен как волатильная переменная, следовательно, если я его читаю (пусть и перевожу явно в любой другой тип), gcc не должен это "оптимизировать". А вона как…
Ладно, с этим понятно. Непонятно с экраном: мне все интересно, как же у этого 2.2'' подключили тачскрин, если он, похоже, какой-то сигнал на MISO выдает, когда я пытаюсь с экрана данные считать (я уже понял, что MISO модуля реально к ili934x не подключен, иначе при смене скорости SPI данные не менялись бы - ведь при записи в буфер экрана ничего не изменяется). Подозреваю, что там емкостной тач и надо, скажем, стробировать CS, а на MISO/MOSI читать уровень сигнала или скважность ШИМ измерять или еще что. Надо будет попробовать все подробно прозвонить ради любопытства. В интернете я схем не нашел.