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

Поскольку каналы DMA расположены по приоритетам, возможно, что запрос DMA не будет немедленно обслуживаться и будет задержан. Запрос останется ожидать, пока все более высокоприоритетные каналы не обслужаться. Если другое прерывание приходит прежде, чем контроллер DMA очистил этот запрос DMA, и прерывание является того же самого типа как и отложенное прерывание, произойдет переполнение данных.

Переполнение данных определяется как состояние когда новые данные прибыли в периферийный буфер данных прежде, чем DMA мог переместить предшествующие данные. Некоторые DMA-способные периферийные устройства могут обнаружить переполнение данных и выпустить прерывание CPU (если соответствующее прерывание ошибки периферии разрешено), как показано в Таблице 22-5.

Таблица 22-5: Обработка Переполнения DMA

Последовательный Периферийный Интерфейс (SPI)

Данные, ждущие перемещения каналом DMA не записаны поверх дополнительными входящими данными. Последующие входящие данные потеряны и устанавливается бит Переполнение Приема SPI (SPIROV), в регистре Состояния SPI (SPIxSTAT).

Также сгенерируется прерывание ошибки SPIx, если бит разрешения Прерывания Ошибки SPI (SPIxEIE), установлен в регистр Управлению разрешения Прерываниями (IECx) в контроллере прерывания.

UART

Данные, ждущие перемещения каналом DMA не записаны поверх дополнительными входящими данными. Последующие входящие данные потеряны, и Ошибка Переполнения (OERR) бит установлена в Состоянии UART (UxSTA) регистр. Также, UARTx прерывание Ошибки сгенерировано, если Прерывание Ошибки UART Допускает (UxEIE) биту, установлен в Прерывании

Допустите Управлению (IECx) регистр в контроллере прерывания.

Интерфейс Конвертера Данных (DCI)

Данные, ждущие, чтобы быть перемещен{тронут} каналом DMA записаны поверх дополнительными входящими данными и Получающийся

Переполнение (ROV) бит установлено в DCI Состоянии (DCISTAT) регистр. Также DCI прерывание ошибки сгенерировано, если DCI Прерывание Ошибки Допускает (DCIEIE) биту, установлен в Прерывании, допускают Управлению (IEC0) регистр в контроллере прерывания.

10-bit/12-bit Аналого-цифровой Конвертер (ADC)

Данные, ждущие, перемещения каналом DMA записаны поверх дополнительными входящими данными. состояние переполнения не обнаруживается ADC.

Другой DMA - готовые Периферийные устройства

Никакие переполненные данные не могут произойти.

Переполнения данных обнаруживается только аппаратно, когда DMA перемещает данные от периферийного устройства к DPSRAM. передачи данных DMA с DPSRAM на периферийное устройство (основанный на, например прерывание, буфер пуст) будут всегда выполняться. Любые последующие переполнения данных DPSRAM должны быть обнаружены, используя программное обеспечение. Дубликат запрос DMA игнорируется и ждущий запрос, остается ожидать. Как обычно, канал DMA очищает запрос DMA, когда передача в конечном счете закончена. Если CPU не вмешивается тем временем, переданные данные будут последние (переполнение), данные, и предшествующие данные будут потеряны.

Пользовательское приложение может обработать ошибку переполнения различными способами, в зависимости от характера источника данных. Восстановление данных и пересинхронизация DMAC с его источником / приемником данных - задача, которая является высоко прикладным иждивенцем. Для текущих данных, типа этого от CODEC (через DCI периферийное устройство), приложение может игнорировать потерянные данные. После фиксации источника проблемы (если возможно), программа обработки прерывания DMA пыталась повторно синхронизировать контроллер прямого доступа к памяти и DCI так, чтобы данные были снова буферизированы правильно. Пользовательское приложение должно реагировать достаточно быстро, чтобы предотвратить любое дальнейшее появление переполнений.