Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 25.04.2008, 17:31   #1
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 53
Сообщений: 409
Вес репутации: 330/47
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию DMA???

Я не сталкивался с DMA.
Как происходит механизм обмена между данными в конкретном
примере из мануала по Input Capture.
Когда происходит прерывание _DMA0Interrupt(void)?
Как я понял без участия ЦП?

Код:
 /****************************************************
// Initialize Capture Module
IC1CONbits.ICM = 0b00; // Disable Input Capture 1 module
IC1CONbits.ICTMR = 1; // Select Timer2 as the IC1 Time base
IC1CONbits.ICI = 0b00; // Interrupt on every second capture event
IC1CONbits.ICM = 0b001; // Generate capture event on every Rising edge
Setup DMA for Input Capture:

Код:
 // Define Buffer in DMA RAM
unsigned int BufferA[256] __attribute__((space(dma)));
DMA0CONbits.AMODE = 0b00; // Register indirect with post increment
DMA0CONbits.MODE = 0b01; // One Shot, Ping-Pong mode Disabled
DMA0CONbits.DIR = 0; // Peripheral to RAM
DMA0PAD = (int)&IC1BUF; // Address of the capture buffer register
DMA0REQ = 1;// Select IC module as DMA request source
DMA0CNT = 255; // Number of words to buffer
DMA0STA = __builtin_dmaoffset(&BufferA);
IFS0bits.DMA0IF = 0; // Clear the DMA interrupt flag bit
IEC0bits.DMA0IE = 1; // Enable DMA interrupt enable bit
DMA0CONbits.CHEN = 1;
Setup DMA Interrupt Handler

Код:
 void __attribute__((__interrupt__)) _DMA0Interrupt(void)
{
// Process the captured values
IFS0bits.DMA0IF = 0; // Clear the DMA0 Interrupt Flag
}

Последний раз редактировалось IceS; 25.04.2008 в 17:52. Причина: Пользуйтесь тегом [ code ]! Давайте будем уважать себя и других.
Iptash вне форума   Ответить с цитированием
Старый 25.04.2008, 21:21   #2
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 68
Сообщений: 2,215
Вес репутации: 1898/84
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Совершенно верно,

Цитата:
Сообщение от Iptash Посмотреть сообщение
Я не сталкивался с DMA.
Как происходит механизм обмена между данными в конкретном
примере из мануала по Input Capture.
Когда происходит прерывание _DMA0Interrupt(void)?
Как я понял без участия ЦП?

Код:
 /****************************************************
// Initialize Capture Module
IC1CONbits.ICM = 0b00; // Disable Input Capture 1 module
IC1CONbits.ICTMR = 1; // Select Timer2 as the IC1 Time base
IC1CONbits.ICI = 0b00; // Interrupt on every second capture event
IC1CONbits.ICM = 0b001; // Generate capture event on every Rising edge
Setup DMA for Input Capture:

Код:
 // Define Buffer in DMA RAM
unsigned int BufferA[256] __attribute__((space(dma)));
DMA0CONbits.AMODE = 0b00; // Register indirect with post increment
DMA0CONbits.MODE = 0b01; // One Shot, Ping-Pong mode Disabled
DMA0CONbits.DIR = 0; // Peripheral to RAM
DMA0PAD = (int)&IC1BUF; // Address of the capture buffer register
DMA0REQ = 1;// Select IC module as DMA request source
DMA0CNT = 255; // Number of words to buffer
DMA0STA = __builtin_dmaoffset(&BufferA);
IFS0bits.DMA0IF = 0; // Clear the DMA interrupt flag bit
IEC0bits.DMA0IE = 1; // Enable DMA interrupt enable bit
DMA0CONbits.CHEN = 1;
Setup DMA Interrupt Handler

Код:
 void __attribute__((__interrupt__)) _DMA0Interrupt(void)
{
// Process the captured values
IFS0bits.DMA0IF = 0; // Clear the DMA0 Interrupt Flag
}
участие центрального процессора не требуется. Процессор должен только загрузить регистры контроллера DMA и запустить процесс передачи/приема блока данных. По окончанию процесса контроллер DMA известит центральный процессор о завершении.
Bill вне форума   Ответить с цитированием
Старый 25.04.2008, 21:44   #3
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 53
Сообщений: 409
Вес репутации: 330/47
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: DMA???

А вот в случае с Input Capture, после захвата происходит
передача Timer 2,3 в буферные регистры IC и происходит прерывание
IC (если нужно) и в обработчике содержимое буф. регистра можно
присвоить в свой массив и т.п., а с DMA тоже происходит IC
прерывание или DMA прерывание или все вместе или как? Как они
взаимодействуют?. В мануале пока не понял.
Iptash вне форума   Ответить с цитированием
Старый 25.04.2008, 23:04   #4
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 68
Сообщений: 2,215
Вес репутации: 1898/84
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Видимо здесь дело вот в чем.

Цитата:
Сообщение от Iptash Посмотреть сообщение
А вот в случае с Input Capture, после захвата происходит
передача Timer 2,3 в буферные регистры IC и происходит прерывание
IC (если нужно) и в обработчике содержимое буф. регистра можно
присвоить в свой массив и т.п., а с DMA тоже происходит IC
прерывание или DMA прерывание или все вместе или как? Как они
взаимодействуют?. В мануале пока не понял.
Каждый цикл DMA инициируется по какому-либо событию (по таймеру, по окончанию АЦ преобразования и т.д.).При этом сигнал о соответствующем событии посылается контроллеру DMA, а не является сигнала прерывания центральному процессору. Это все определяется настройками контроллера DMA (я рассуждаю безотносительно конкретного контроллера/процессора).
Допустим вы хотите, не отвлекая ЦП от выполнения основной программы, записать 100 выборок со входа АЦП в некоторый буфер. Стало быть, ЦП должен запрограммировать контроллер DMA на выполнение приема блока данных с АЦП. Для этого в соответствующие регистры контроллера DMA загружаются начальный адрес буфера в памяти, количество байт в блоке, направление передачи (ввод или вывод). Кроме этого, можно разрешить прерывание ЦП от контроллера DMA для уведомления о завершении передачи требуемого блока данных. Ну и, наконец, нужно определит событие, по которому будет происходить цикл DMA. В данном случае это будет сигнал готовности от АЦП.
А дальше все просто. При получении сигнала готовности данных с АЦП контроллер DMA захватывает шины доступа к памяти у ЦП, выставляет на шину данных данные с регистра АЦП, на шину адреса текущий адрес буфера и выполняет запись данных. После чего происходит увеличение регистра адреса и уменьшение регистра счетчика байт в контроллере DMA. Если счетчик данных при этом становится равным нулю, то контроллер DMA выдает сигнал прерывания, по которому ЦП узнает о том, что блок данных принят.
Bill вне форума   Ответить с цитированием
Старый 25.04.2008, 23:11   #5
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 53
Сообщений: 409
Вес репутации: 330/47
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: DMA???

т.е., в каком случае происходит обработка прерывания
_DMA0Interrupt(void)?
(ну почему я не учился в школе, совсем не "dsPic in English").
Iptash вне форума   Ответить с цитированием
Старый 25.04.2008, 23:16   #6
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 53
Сообщений: 409
Вес репутации: 330/47
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: DMA???

Мы похоже синхронно вставили сообщение,прямо как мысль прочитал,
спасибо большое за ответ.Возможно у меня ещё возникнут вопросы.
Iptash вне форума   Ответить с цитированием
Старый 25.04.2008, 23:25   #7
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 53
Сообщений: 409
Вес репутации: 330/47
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: DMA???

Bill, вы дали мне исчерпывающий ответ,у меня мысли сразу встали на
свои места и даже Английский в мануале стал лучше понимать
большое спасибо!
Iptash вне форума   Ответить с цитированием
Старый 25.04.2008, 23:25   #8
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 68
Сообщений: 2,215
Вес репутации: 1898/84
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Еще немного добавлю.

Цитата:
Сообщение от Iptash Посмотреть сообщение
Мы похоже синхронно вставили сообщение,прямо как мысль прочитал,
спасибо большое за ответ.Возможно у меня ещё возникнут вопросы.
Существуют два метода передачи данных через DMA: метод занятия цикла и метод занятия шины. В первом случае шина захватывается только на время передачи одного байта/слова данных, во втором случае шина захватывается на время передачи всего пакета. Все определяется требуемой скоростью передачи данных.
Bill вне форума   Ответить с цитированием
Старый 25.04.2008, 23:29   #9
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 68
Сообщений: 2,215
Вес репутации: 1898/84
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Возможно, только

Цитата:
Сообщение от Iptash Посмотреть сообщение
Bill, вы дали мне исчерпывающий ответ,у меня мысли сразу встали на
свои места и даже Английский в мануале стал лучше понимать
большое спасибо!
все это - классика. Не стоит ограничиваться чтением DS и Manuals. Читайте книги, в которых описываются принципы. Правда, где они теперь, эти книги?
Bill вне форума   Ответить с цитированием
Старый 25.04.2008, 23:59   #10
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 53
Сообщений: 409
Вес репутации: 330/47
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: DMA???

Возможно я и встречал такие книги ,но видимо не было
надобности.Сейчас вот буду наверстывать упущенное.Сейчас
мне все больше необходимо высокопрозводительные МК(и не дорогие),
а DMA в МК вещь как я погляжу, "крутая".
Спасибо!
Iptash вне форума   Ответить с цитированием
Старый 26.04.2008, 19:52   #11
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,789
Вес репутации: 5397/164
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию можно ещё добавить

Цитата:
Сообщение от Bill Посмотреть сообщение
Существуют два метода передачи данных через DMA: метод занятия цикла и метод занятия шины. В первом случае шина захватывается только на время передачи одного байта/слова данных, во втором случае шина захватывается на время передачи всего пакета. Все определяется требуемой скоростью передачи данных.
что ДМА, как способ не "тревожить" процессор, используется не только в высокоскоростных приложениях, но и для минимизации потребления системы, позволяя на время работы периферии буквально не будить процессор (в смысле не выводить его из состояния сна (sleep))
Greg вне форума   Ответить с цитированием
Старый 27.04.2008, 23:24   #12
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,375
Вес репутации: 3125/96
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Возможно, только

Цитата:
Сообщение от Bill Посмотреть сообщение
...Правда, где они теперь, эти книги?
Можно найти на русском описание на 580-ую серию (интел 8080) и там все и про ДиректМемориАксесс и про ИнтерраптРеквест и про все остальное...
Я в 80-х через это описание и учился - очень удобно...
Марк вне форума   Ответить с цитированием
Старый 18.11.2009, 10:40   #13
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,375
Вес репутации: 3125/96
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: DMA???

Немного реанимирую тему дабы не плодить сходные.
Вопрос про DMA в PIC24H.
Допустимо ли программное чтение двухпортовой памяти (буфера ДМА) по адресу, который в том же машинном цикле пишется с шины ДМА.
Если можно, то проясните вопрос пошире - в каком такте машинного цикла происходит и то и другое.
Коммент. Вопрос возник от желания сделать совершенно асинхронными процессы оцифровки входного сигнала и его анализа...
Спасибо.
Марк вне форума   Ответить с цитированием
Старый 18.11.2009, 11:38   #14
Machine slave
Senior Member
 
Аватар для Machine slave
 
Регистрация: 18.01.2008
Возраст: 36
Сообщений: 4,264
Вес репутации: 2731/109
Machine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond reputeMachine slave has a reputation beyond repute
По умолчанию Re: DMA???

Цитата:
Сообщение от Марк Посмотреть сообщение
Немного реанимирую тему дабы не плодить сходные.
Вопрос про DMA в PIC24H.
Допустимо ли программное чтение двухпортовой памяти (буфера ДМА) по адресу, который в том же машинном цикле пишется с шины ДМА.
Если можно, то проясните вопрос пошире - в каком такте машинного цикла происходит и то и другое.
Коммент. Вопрос возник от желания сделать совершенно асинхронными процессы оцифровки входного сигнала и его анализа...
Спасибо.
Да, допустимо одновременное чтение. Нельзя только писать по одному адресу одновременно.
А вообще вам надо почитать Section 22. DMA - PIC24H FRM (22.10 DATA WRITE COLLISIONS).
Machine slave вне форума   Ответить с цитированием
Ответ

Метки
dma


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DMA в dsPIC33 - помогите! Andy1982 Продукция MICROCHIP 8 12.11.2010 19:21
указатель на память DMA в функции (Microchip С30) AVB Продукция MICROCHIP 3 14.05.2008 09:51
Не заставить работать АЦП (dsPIC33F...) в режиме «несколько измерений в БУФЕР» Юрий440 Продукция MICROCHIP 9 11.08.2007 14:50
PIC24H - DMA? CoToHa Продукция MICROCHIP 1 16.06.2007 11:24
PIC24 и DMA, только пассивное чтение? Алексей Продукция MICROCHIP 4 26.05.2007 00:29


Часовой пояс GMT +3, время: 17:37.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot