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

Этот регистр содержит счетчик передачи. DMAxCNT + 1 представляет число запросов DMA , которое  канал должен обслужить прежде, чем пересылка блока данных считается законченной.

То есть значение DMAxCNT ‘0’ передаст один элемент. Значение регистра DMAxCNT независимо от размера данных передачи (SIZE бита в регистре DMAxCON). Запись в этот регистр, в то время как канал x разрешен (то есть, активный) может привести к непредсказуемому поведению и ее нужно избегать.

В дополнение к регистрам индивидуальных канала DMA, Контроллер DMA имеет три регистра состояния DMA.

DSADR: Регистр адреса Самого недавнего DMADPSRAM

Это 16-разрядный, только для чтения, регистр состояния для всех каналов DMA. Он фиксирует адрес самого последнего доступа DPSRAM (чтение или запись). Он очищается при Сбросе и поэтому, содержит значение ‘0x0000’ если читается до любой деятельности DMA. Этот регистр доступен в любое время, но прежде всего предназначен для помощи при отладке.

DMACS0: Регистр Состояния 0 Контроллера DMA

Это 16-разрядный, только для чтения, регистр состояния содержит флаги коллизии Записи DPSRAM и Периферии, XWCOLx и PWCOLx, соответственно. См. Раздел 22.10" Коллизии Записи Данных” для более детальной информации.

DMACS1: Регистр Состояния Контроллера DMA 1

Это 16-разрядный, только для чтения, регистр состояния указывает, какой канал DMA был последний раз активен и обеспечивает состояние режима Ping-Pong каждого канала DMA, указывая, какой регистр Смещения Адреса Начала DPSRAM выбран (DMAxSTA или DMAxSTB).

Регистр 1. DMAxCON: Регистр Управления Канала DMA x

бит 15 CHEN: бит разрешения канала

1 = канал разрешен

0 = канал запрещен

бит 14 SIZE: бит размера передаваемых данных

1 = байт

0 = слово

бит 13 DIR: бит направления передачи данных

1 = чтение из DPSRAM, запись в периферию

0 = чтение из периферии, запись в DPSRAM

бит 12 HALF: Выбор когда должно формироваться прерывания DMA

1 = Прерывание формируется когда половина блока данных была перемещена

0 = Прерывание формируется когда весь блок данных был перемещён

бит 11 NULLW: Null Data Peripheral Write Mode Select bit

1 = Null data write to peripheral in addition to DPSRAM write (бит DIR должен быть очищен)

0 = Normal operation

бит 10-6: Не реализованы: читаются как ‘0’

бит 5-4 AMODE<1:0>: Выбор режима адресации DMA канала

11 = зарезервировано

10 = Периферийный косвенный режим адресации

01 = Регистровый косвенный режим без постинкримента

00 = Регистровый косвенный режим с постинкриментом

бит 3-2 Не реализован: читаются как ‘0’

бит 1-0 MODE<1:0>: Выбор режима работы канала DMA

11 = Одиночный, Ping-Pong режим включить (один блок передается из/в каждый DMA RAM буфер)

10 = Непрерывный Ping-Pong режим включить

01 = Одиночный Ping-Pong режим отключить

00 = Непрерывный, Ping-Pong режим отключить

Регистр 2. DMAxREQ: Регистр Выбора IRQ Канала DMA x

бит 15 FORCE: бит вызова DMA передачи (1)

1 = вызывает  одну DMA передачу (ручной режим)

0 =автоматическая передачи DMA инициируются DMA запросами

бит 14-7 Не реализован: читаются как ‘0’

бит 6-0 IRQSEL<6:0>: биты выбора номера IRQ периферии DMA

0000000 = INT0           – Внешнее прерывание 0

0000001 = IC1 – Input Capture 1

0000010 = OC1            – Output Compare 1

0000101 = IC2 – Input Capture 2

0000110 = OC2            – Output Compare 2

0000111 = TMR2         – Timer 2

0001000 = TMR3         – Timer 3

0001010 = SPI1            – перемещение завершено

0001011 = UART1RX – UART1 Приёмник

0001100 = UART1TX – UART1 Передатчик

0001101 = ADC1         – ADC1 преобразование завершено

0010101 = ADC2         – ADC2 преобразование завершено

0011110 = UART2RX – UART2 Приёмник

0011111 = UART2TX – UART2 Передатчик

0100001 = SPI2 Перемещение завершено

0100010 = ECAN1       – RX данные получены

0110111 = ECAN2       – RX данные получены

0111100 = DCI            – CODEC Transfer Done

1000110 = ECAN1       – TX данные отправлены