Пример 22-2: Code to Clear DMA Channel 0 Interrupt
void __attribute__((__interrupt__)) _DMA0Interrupt(void)
{
. . .
IFS0bits.DMA0IF = 0;
}
Table 22-4: Interrupt Controller Settings for Clearing DMA Interrupt Status Flags DMA
22.6.4 Режим регистровой косвенной адресации с постинкрементом
Регистровая косвенная Адресация С Постприращением используется, чтобы переместить блок данных, увеличивая адрес DPSRAM после каждой передачи.
По умолчанию этом режим устанавливается после сброса контроллера DMA. Этот режим выбирается, программируя биты Выбора Способа адресации AMODE <1:0> в ‘00’ в регистре Управлении Канала DMA (DMAxCON). В этом режиме регистр Смещения Адреса Начала DPSRAM (DMAxSTA или DMAxSTB) обеспечивает стартовый адрес буфера DPSRAM.
Приложение определяет последний адрес смещения передачи DPSRAM, читая регистр Смещения Адреса Начала DPSRAM. Однако, содержание этого регистра не изменяется контроллером DMA.
Рисунок 22-8 иллюстрирует передачу данных в этом режиме.
Рисунок 22-8: Передача данных с регистровой косвенной адресацией с постинкрементом
пример 22-3: код для OutputCompare и DMA с регистровой косвенной адресацией с постприращением
Установка модуля OutputCompare 1 для режима PWM :
OC1CON = 0; // сброс OC модуля
OC1R = 0x60; // инициализация PWM Duty Cycle
OC1RS = 0x60; // инициализация буфера PWM Duty Cycle
OC1CONbits.OCM = 6; // конфигурация OC для режима PWM
Установка канала 3 DMA для режима с постинкрементом с Timer 2 RequestSource:
unsigned int BufferA[32] __attribute__((space(dma)));
/* вставь здесь код для инициализации BufferA с желаемым значением Duty Cycle */
DMA3CONbits.AMODE = 0; // конфигурация DMA для режима косвенной
// адресации с постинкрементом
DMA3CONbits.MODE = 0; // конфигурация DMA для Continuous mode
DMA3CONbits.DIR = 1; // RAM-to-Peripheral передача данных
DMA3PAD = (volatile unsigned int)&OC1RS; // указатель DMA на OC1RS
DMA3CNT = 31; // 32 запроса DMA
DMA3REQ = 7; // выбор Timer2 как источник запроса DMA
DMA3STA = __builtin_dmaoffset(BufferA);
IFS2bits.DMA3IF = 0; // очистка бита флага прерывания DMA
IEC2bits.DMA3IE = 1; // установка бита разрешения прерывания DMA
DMA3CONbits.CHEN = 1; // разрешение DMA
Установка Timer 2 для OutputCompare для PWM режима:
PR2 = 0xBF; // инициализация периода PWM
T2CONbits.TON = 1; // старт timer 2
Установка обслуживания прерывания канала 3 DMA:
void __attribute__((__interrupt__)) _DMA3Interrupt(void)
{
/* обновить BufferA новым значением Duty Cycle если требуется здесь*/
IFS2bits.DMA3IF = 0; // очистка бита флага прерывания DMA3
}
22.6.5 Режим регистровой косвенной адресации без постинкремента
Регистровая косвенная Адресация Без Постприращения используется, чтобы переместить блоки данных, не увеличивая стартовый адрес буфера данных после каждой передачи. В этом режиме регистр Смещения Адреса Начала DPSRAM (DMAxSTA или DMAxSTB) обеспечивает смещение к стартовому адресу буфера DPSRAM. Когда передача данных DMA имеет место, Адрес DPSRAM не увеличивается. Так, следующая передача данных DMA инициализируется к тому же самому адресу DPSRAM.
Этот режим выбирается, программируя биты Выбора Способа адресации AMODE <1:0> к ‘01’ в регистре Управления Канала DMA (DMAxCON).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.