Тема: DMA???
Показать сообщение отдельно
Старый 25.04.2008, 23:04   #4
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/88
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 вне форума   Ответить с цитированием