Здравствуйте
Пытаюсь реализовать обмен по SPI как описано в мануале, на прерываниях:
Цитата
2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE
flag).
3. Wait until TXE=1 and write the second data item to be transmitted. Then wait until
RXNE=1 and read the SPI_DR to get the first received data item (this clears the RXNE
bit). Repeat this operation for each data item to be transmitted/received until the n–1
received data.
4. Wait until RXNE=1 and read the last received data.
По пунктам (жирным - мои действия, курсивом - предположения о работе железа):
1.
пишем в DR байт 0 для передачи2.
байт копируется в TX, Срабатывает прерывание по TXE, в котором
пишем в DR байт 1. При этом передача из TX возможно еще не завершена3.
Передача TX завершается, при этом в DR оказывается принятый байт 0, а байт 1 копируется в TX4. Если теперь прерывание по RXNE (в котором
читем DR) обработается до окончания передачи байта 1 из TX - все здорово. Но если после, то будет переполнение и один из принятых байтов окажется потерян
Я реализовал передачу только на одном прерывании RXNE, т.е. пишу очередной байт после вычитки предыдущего. Это работает, но дает относительно большие задержки между байтами на шине. Рекомендованный в даташите алгоритм дает меньшие задержки, но иногда вызывает переполнение.
Или я где-то напутал и его все же можно реализовать для случая, когда возможна задержка обработка прерывания по RXNE?
Спасибо!