Перейти к содержанию
    

STM32H7, странное поведение SPI+ПДП (DMA)

Ситуация 1:

  1. Настраиваю SPI на работу с ПДП (RXDMAEN = 1, TXDMAEN = 1).
  2. Заряжаю один канал ПДП на прием n байтов из SPI (пишу n в >NDTR, пишу все кроме EN в DMAx_SyCR).
  3. Запускаю этот канал (DMAx_SyCR.EN = 1).
  4. Заряжаю второй канал ПДП на передачу N байтов в SPI.

все работает, можно повторять сколько угодно раз.

Ситуация 2:

  1. Передаю m байтов через этот же SPI вручную, записью в TXDR (SPIx->SR.RXPLVL увеличивается с каждым принятым байтом).
  2. Вычитываю m принятых байтов из FIFO вручную, чтением RXDR (SPIx->SR.RXPLVL уменьшается с каждым вычитанным байтом до нуля).
  3. Заряжаю один канал ПДП на прием n байтов из SPI (пишу n в >NDTR, пишу все кроме EN в DMAx_SyCR).
  4. * передачи еще не было, RXPLVL. RXWNE, RXP, DXP в SPIx->SR равны 0
  5. Запускаю этот канал (DMAx_SyCR.EN = 1).

и вот в этот момент происходит пересылка через ПДП одного байта (байт всегда равен нулю, не зависит от содержимого UDRDR). Предполагаю, что на шаге 2, несмотря на вычитывание всех байтов, не снимается запрос ПДП. В F0x, F7x этот код работал без нареканий. Если перед шагом 1 сбросить RXDMAEN, a после шага 2 взвести - все тоже работает.

Мало ли, может кому пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...