2015-03-02 5 views
0

У меня возникла проблема с попыткой выяснить, что такое «X_MODIFY» от EZ-Kit Lite BF537 (Analog Devices) означает, что это часть конфигурации DMA. Что именно это изменилось? Это шаг после начала цикла?Что делает X_MODIFY в DMA ADSP-BF537? (Analog Devices)

Вот код. Вы можете найти его на примерах занятий книги Встраиваемая обработка сигналов с архитектурой микросигнала от Woon-Seng Gan and Sen M. Kuo.

*pDMA3_CONFIG = WNR | WDSIZE_32 | DI_EN | FLOW_1 | DMA2D | DI_SEL; 
// Start address of data buffer 
*pDMA3_START_ADDR = iRxBuffer1; 
// DMA loop count 
*pDMA3_X_COUNT = 2*INPUT_SIZE; 
// DMA loop address increment 
*pDMA3_X_MODIFY = 4; 
*pDMA3_Y_COUNT = TOTAL_FRAME; 
*pDMA3_Y_MODIFY = 4; 

Я работаю с аудио кадров и, возможно, придется использовать более двух каналов в будущем, так что я хотел бы понять, как X_MODIFY влияет на мои данные.

спасибо!

+0

Учитывая ваш конкретный вопрос, было бы полезно, если бы вы включили ссылку на документацию, в которой вы видели X_MODIFY. Мы можем догадаться, с большой вероятностью быть верным, но нам не придется этого делать. Это позволит большему числу людей ответить на ваш вопрос с меньшими усилиями. – Makyen

+0

Укажите номер страницы, поэтому нам не нужно искать код. Вы просите о помощи. Пожалуйста, помогите людям помочь вам. – Makyen

ответ

0

X_MODIFY регистр объясняется на page 293 книги вы цитируете:

Регистр X_COUNT указывает количество передач, которые необходимы, и
X_MODIFY регистр определяет количество приращений байт после все данные
перевод. Обратите внимание, что передача данных может быть 8, 16 или 32 бит. Следовательно, X_COUNT
относится к числу слов, а слово может быть 8, 16 или 32 бит. Однако
X_MODIFY всегда выражается в байтах. Процессоры Blackfin позволяют
одномерные (1D) и двумерные (2D) режимы DMA. Когда регистр DMAx_
CONFIG, показанный на рисунке 7.1, настроен на работу в режиме 1D, должны быть настроены только регистры X_
COUNT и X_MODIFY. В противном случае, когда режим 2D
установлен, Y_COUNT и Y_MODIFY регистры должны быть установлены в дополнение к
X_COUNT и X_MODIFY регистров. 2D DMA можно рассматривать как вложенную
петли, где X_COUNT и X_MODIFY указать внутренний вид и Y_COUNT
и Y_modify указать внешний контур. 2D DMA особенно полезен в
, реализующий двойные буферы для режима обработки блоков и адресации 2D-данных
как изображения. Мы приводим больше примеров того, как настроить 2D DMA в режиме «hands-on»
Эксперименты 7.4 и 7.5.

Учитывая установку, которую вы предоставили, каждый перенос DMA канала 3 (Последовательный порт 0 Receive, спорт 0 Rx) будет 32 бита и после каждой передачи (в пределах внутреннего контура) адрес памяти будет увеличиваться на 4 байта (X_MODIFY). Он также будет увеличиваться на 4 байта между каждым внутренним циклом (Y_MODIFY).

Эффективно, что вы предоставили устанавливаете несколько петель в основном нравятся:

//SETUP DMA 
// Config is set to: Memory write | Transfer size = 32 bits | generate interrupt 
//     | autobuffer | 2D DMA mode 
//     | interrupt is on completion of each X_COUNT loop 
DMA3_START_ADDR = iRxBuffer1; 
DMA3_X_COUNT = 2*INPUT_SIZE; 
DMA3_X_MODIFY = 4; 
DMA3_Y_COUNT = TOTAL_FRAME; 
DMA3_Y_MODIFY = 4; 

//Begin DMA 
while (DMA3_CONFIG & DMAEN) { //autobuffer mode 
    DMA3_CURR_ADDR = DMA3_START_ADDR; 
    for(DMA3_CURR_Y_COUNT = DMA3_Y_COUNT; DMA3_CURR_Y_COUNT > 0; DMA3_CURR_Y_COUNT--) { 
     for(DMA3_CURR_X_COUNT = DMA3_X_COUNT; DMA3_CURR_X_COUNT > 0; DMA3_CURR_X_COUNT--){ 
      //Transfer data from serial port 0 to memory at location DMA3_CURR_ADDR. 
      // Note that here is actually the hardware waiting for an interrupt to be 
      // generated by the receive side of serial port 0 indicating that data is 
      // available. Once it is available, the data is DMA'ed into memory and 
      // the process continues. 
      if(DMA3_CURR_X_COUNT > 1) { 
       DMA3_CURR_ADDR += DMA3_X_MODIFY; 
      } 
     } 
     if(DMA3_CURR_Y_COUNT > 1) { 
      DMA3_CURR_ADDR += DMA3_Y_MODIFY; 
      //Generate interrupt 
     } 
    } 
    DMA3_CURR_ADDR += DMA3_X_MODIFY; 
    //Generate interrupt 
} 

Лично я нашел следующие ссылки, чтобы быть гораздо полезнее, чем парциальные версии доступна от Google книги вы цитированной (но у меня есть аппаратный фон):

  1. ADSP-BF537 Blackfin Processor Hardware Reference 5-75 - 5-94
  2. ADSP-BF537 Data Sheet Rev. J

X_MODIFY указана на странице 5-88 из ADSP-BF537 Blackfin Processor Hardware Reference:

DMAx_X_MODIFY/MDMA_yy_X_MODIFY Registers

0

В вашем коде, X-изменяемая длина каждого блока данных (в байтах) iRxBuffer1.

Сообщает DMA, где (в каком адресе) извлекаются следующие данные. Адрес шины DMA будет увеличен с помощью этого значения X-MODIFY.