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

Если SPI модуль работает как ведущий и только получает данные, второй канал DMA должен быть распределен и использоваться, чтобы послать фиктивные данные передачи. Альтернативно, единственный канал DMA может использоваться в режиме Null Data Write. См. Раздел 22.6.11" Режим Нулевой Записи Данных” для детальной информации. Типовой код показывают в Примере 22-10.

UART

UART должен быть конфигурирован, чтобы генерировать прерывания для каждого символа, полученного или переданного. Для приремника UART, чтобы генерировать Rx прерывание для каждого принятого символа, биты Выбора Режима Прерывания Приема (URXISEL <1:0>), должны быть установлены в ‘00’ или ‘01’ в регистре Состояня и Управления (UxSTA).

Для передатчика UART, чтобы генерировать прерывание Tx для каждого переданного символа, биты Выбора Режима Прерывания Передачи UTXISEL0 и UTXISEL1 должны быть установлены на ‘0’ в регистр Состояния и Управлении (UxSTA).

Типовой код показывают в Примере 22-9.

InputCapture

Модуль Input Capture должен быть конфигурирован, чтобы генерировать прерывание для каждого случая захвата установкой Number захватов в битах Прерывания (ICI <1:0>) к ‘00’ в регистре Управлении Input Capture (ICxCON). Типовой код показывают в Примере 22-4.

OutputCompare

Модуль Output Compare требует, чтобы никакая специальная конфигурация не работала с DMA. Как правило, однако, используется Таймер, чтобы обеспечить запрос DMA, и он должен быть должным образом конфигурирован. Типовой код показывают в Примере 22-3.

ExternalInterruptandTimers

Только Внешнее Прерывание 0 и Таймеры 2 и 3 могут быть выбраны для запроса DMA. Хотя эти периферийные устройства не поддерживают передачу DMA самостоятельно, они могут использоваться, чтобы вызвать передачи DMA для других DMA-поддерживающих периферийных устройств. Например, Таймер 2 может вызвать сделки DMA для периферийного устройства Output Compare в режиме PWM. Типовой код показывают в Примере 22-3.

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

22.5.3 Инициализация Адреса памяти

Третье требование установки DMA должно распределить буфера памяти в пределах определенной области памяти для доступа DMA. Местоположение и размер этой области памяти зависят от dsPIC33F устройства (обратитесь к листу данных устройства для определенной информации). рисунок 22-4 показывает области памяти DMA 2 Кбайт для dsPIC33F устройств с 30 килобайтами RAM.

Figure 22-4: Data Memory Map for dsPIC33 Family Devices with 30 Kbytes RAM

Чтобы работать должным образом, DMA должен знать какой адрес смещения с начала памяти DMA DPSRAM он читает или записывает. Эта информация конфигурируется в регистре Адреса Начала Смещения А DPSRAM Канала DMA x (DMAxSTA) и в регистре Адреса Начала Смещения В DPSRAM Канала DMA x (DMAxSTВ)

Рисунок22-5 - пример, который показывает, как первый и второй буфера Канала DMA 4 установлены на dsPIC33FJ256GP710 устройстве в адресе 0x7800 и 0x7810, соответственно.

Figure 22-5: Primary and Secondary Buffer Allocation in DMA Memory