DMA для dsPIC. Контроллер Прямого доступа к памяти (DMA). DMA контроллер. Регистр Смещения Адреса Начала A DPSRAM Канала DMA x, страница 18

Figure 22-18: Single Block Data Transfer in Ping-Pong Mode

22.6.10 Режим ручной передачи

Для периферийных устройств, которые отправляют данные к DPSRAM используя контроллер DMA, передачи данных DMA запускаются автоматически после инициализации канала DMA и периферийного устройства. Когда периферийное устройство готово переместить данные в DPSRAM, оно выдает запрос DMA. Если в это время также нужно послать данные периферийному устройству, может использоваться тот же самый запрос DMA, чтобы активизировать другой канал для чтения данных от DPSRAM и записи их на периферийное устройство.

С другой стороны, если приложение должно только отправить данные на периферийное устройство (из буфера DPSRAM), начальная (ручная) загрузка данных в периферийное устройство может быть обязана запускать процесс (см. Раздел 22.7" Старт Передачи DMA). Этот процесс может быть инициализирован с обычным программным обеспечением.

Однако, более удобный подход состоит в том, чтобы просто имитировать запрос канала DMA, устанавливая бит в пределах выбранного канала DMA. Канал DMA обрабатывает принудительный запрос, как любой другой запрос и передает первый элемент данных, чтобы запустить последовательность. Когда периферийное устройство готово к следующей части данных, оно посылает нормальный запрос DMA и DMA посылает следующий элемент данных. Этот процесс иллюстрирован в Рисунке 22-19.

Ручной запрос DMA, может быть создан, устанавливая бит FORCE в регистре Выбора IRQ (DMAxREQ) Канала DMA x. После того, как бит FORCE установлен он не может быть очищен приложением.

Он должен быть очищен аппаратно, когда принудительная передача DMA закончена. В зависимости от того, когда бит FORCE установлен, эти специальные условия применяются{обращаются}:

• Установка бита FORCE, в то время как происходит передача DMA, не имеет никакого эффекта и игнорируется.

• Установка бита FORCE, в то время как канал x конфигурируется (то есть, устанавливая бит FORCE в течение той же самой записи, которая конфигурирует, канал DMA) может привести к непредсказуемому поведению.

• попытка установить бит FORCE, в то время как запрос прерывания ввода-вывода находится на рассмотрении (для этого канала), отвергнут в пользу запроса на основе прерывания. Однако, состояние ошибки сгенерируется, устанавливая и бит Флажка Столкновения Записи DMA RAM (XWCOLx) и бит Флажка Столкновения Записи Периферии (PWCOLx) в регистре Состояния Контроллера DMA 0 (DMACS0).

См. Раздел 22.10" Столкновения Записи Данных” для большего количества подробностей.

Figure 22-19: Data Transfer Initiated in Manual Mode

22.6.11 NullDataWriteMode

режим Data Write Нуля наиболее полезен в приложениях, в которых последовательный прием данных требуется без передачи данных типа SPI.

SPI - по существу простой сдвиговый регистр, синхронизируя битовые данные в течение каждого периода clock.

Однако, необычная ситуация возникает, когда SPI конфигурирован в режиме ведущего (то есть, когда SPI должен быть источником clock), но только полученные данные представляют интерес. В этом случае, что-то должно быть записано в SPI регистр данных, чтобы запустить SPI clock и получить внешние данные.

Было бы возможно распределить два канала DMA, один для приема данных и другой, чтобы просто подать пустой указатель, или нулевые данные в SPI. Однако, более эффективное решение состоит в том, чтобы использовать режим Null Data Write DMA, который автоматически пишет нулевое значение в регистр данных SPI после того, как каждый элемент данных был получен и передан каналом DMA, конфигурированным для чтения данных периферии.

Null Data Peripheral Write Mode Select bit (NULLW) установлен в регистре Управления (DMAxCON) Канала DMA x и канал DMA конфигурирован для чтения из периферийного устройства, то канал DMA также выполняет запись пустого указателя (все нули) к периферийному адресу в том же самом цикле что и  чтение данных периферии. Эта запись происходит поперек периферийной шины одновременно с (данные) запись к DPSRAM (поперек DPSRAM шины). Число{рисунок} 22-20 иллюстрирует этот режим.