Продолжение. Примерно так и удалось побороть зависание, как описано
выше. В автоматическом режиме, с DMA, работает. Из не очевидного, неожиданного: Передаю по шине. По описанию модуля, после отправки адреса, DMA делает остальное и прерывания не ожидается. Мой конечный автомат ждёт прерывания по завершению передачи - чтобы сделать СТОП. И логика ломается.
Оказалось: В регистр конфигурации адреса, я записал тот же адрес, которым вызываю ведомого при передаче. И, эта зараза, вызывает прерывание по совпадению переданного адреса со своим собственным, даже сама адрес и отправляет! Типа О! передан мой адрес! Лови прерывание!
Логика в этом есть. Только я теперь не пойму, зачем я ведущему, который пока ничего не принимает, прописал тот же адрес, что и у ведомого?
P.S. Не, оно выдаёт прерывание ADDR в любом случае, даже если отправленный адрес не совпадает с собственным. В случае использования TxDMA - лишнее прерывание... Предусмотрено отключение прерываний буфера данных (если работать с DMA они не нужны), но вот отключения адрес не предусмотрели, хотя было бы удобнее - неподтверждение адреса вылезло бы прерыванием acknowledge failure (AF) и этого было бы достаточно. А так - приходится входить и сбрасывать.