[an error occurred while processing this directive]
|
Работаю с каналом SPI в режиме подчиненного с использованием DMA и прерыванием по такому сценарию:
принимаю кадр, затем передаю кадр, затем снова принимаю. Прерывание SPI имеет низший приоритет. Сверху над ним сидят еще 4 более приоритетных задачи. В ветви прерывания SPI только устанавливаю признак для фоновой программы. Фоновая программа, если прием, анализирует появление признака и с его появлением перенастраивает канал SPI (с остановом канала и сбросом всех его регистров).
Если передача, фоновая программа дополнительно анализирует бит SPIS1 регистра SPIDMAC и биты TXS, SPIF регистра SPISTAT для фиксации истинного времени окончания передачи, а затем перестраивает канал SPI.
Достаточно редко теряется слово, что вызывает сдвиг массива. Если выключить прерывания верхнего уровня, слова не теряются. Где потерялось слово, при передаче или при приеме, неясно.