Я написал код так. Что если прилетает посылка в кан, и в этот момент дма занят, я в другой буфер складываю данные с кан почты. После того как дма освободился, я отправляю этот накопленный буфер. Видимо бяка какая то вылезла. Как вариант размер буфера был больше, чем отведено для дма. Переписываю код поэтапно. Вынес настройку разрешения прерывания в отдельную функцию и задаю в этот раз приоритеты.