Перейти к содержанию
    

SAM3U чтение SSC через DMAC

Народ, подкиньте пожалуйста пример ЧТЕНИЯ из SSC через DMAC, если у кого есть. :blink:

В поставке иара идет пример, но он на запись. Пробовал его на чтение приспособить - ну никак не получается. По прерыванию ацп ADS1274 читать получается, но хотелось бы таки через DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не попадаю в прерывание HDMA_IrqHandler, хотя настроил прием на несколько байт, а прием идет постоянно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример настройки:

typedef struct DMA_DSCR
{
void				*saddr;
void				*daddr;
u_int				ctrla;
u_int				ctrlb;
struct DMA_DSCR		*dscr;
} DMA_DSCR;


#pragma arm section zidata = "extsram"
__align(4) u_char audio_buffers[AUDIO_BUFFERS][AUDIO_BUFFER_SIZE];
#pragma arm section zidata

DMA_DSCR audio_dscrs[AUDIO_BUFFERS];


//******************************************************************************
//*    

#define	AUDIO_DMA_CTRLA		(AT91C_HDMA_DST_WIDTH_WORD | AT91C_HDMA_SRC_WIDTH_WORD |	\
AT91C_HDMA_DCSIZE_4 | AT91C_HDMA_SCSIZE_1 | (AUDIO_BUFFER_SIZE / 4))
#define	AUDIO_DMA_CTRLB		(AT91C_HDMA_FC_PER2MEM | AT91C_HDMA_SRC_ADDRESS_MODE_FIXED | AT91C_HDMA_SRC_DSCR_FETCH_DISABLE)

void audio_start_dma(void)
{
u_int a;


*AT91C_HDMA_CHDR = AT91C_HDMA_ENA0 << AUDIO_DMA_CH;

for(a = 0; a < AUDIO_BUFFERS; a++)
{
	audio_dscrs[a].saddr = (void *)AT91C_SSC0_RHR;
	audio_dscrs[a].daddr = audio_buffers[a];
	audio_dscrs[a].ctrla = AUDIO_DMA_CTRLA;
	audio_dscrs[a].ctrlb = AUDIO_DMA_CTRLB;
	audio_dscrs[a].dscr = (a == (AUDIO_BUFFERS - 1)) ? &audio_dscrs[0] : &audio_dscrs[a + 1];
}

AT91C_BASE_HDMA->HDMA_CH[AUDIO_DMA_CH].HDMA_SADDR = (u_int)audio_dscrs[AUDIO_BUFFERS - 1].saddr;
AT91C_BASE_HDMA->HDMA_CH[AUDIO_DMA_CH].HDMA_DADDR = (u_int)audio_dscrs[AUDIO_BUFFERS - 1].daddr;
AT91C_BASE_HDMA->HDMA_CH[AUDIO_DMA_CH].HDMA_CTRLA = audio_dscrs[AUDIO_BUFFERS - 1].ctrla;
AT91C_BASE_HDMA->HDMA_CH[AUDIO_DMA_CH].HDMA_CTRLB = audio_dscrs[AUDIO_BUFFERS - 1].ctrlb;
AT91C_BASE_HDMA->HDMA_CH[AUDIO_DMA_CH].HDMA_DSCR = (u_int)audio_dscrs[AUDIO_BUFFERS - 1].dscr;

AT91C_BASE_HDMA->HDMA_CH[AUDIO_DMA_CH].HDMA_CFG = AT91C_HDMA_FIFOCFG_HALFFIFO | AT91C_HDMA_AHB_PROT |
	AT91C_HDMA_SOD | AT91C_HDMA_SRC_H2SEL_HW | SSC_RX_DMA_IF_NUM;

*AT91C_HDMA_EBCIER = (AT91C_HDMA_BTC0 << AUDIO_DMA_CH) | (AT91C_HDMA_ERR0 << AUDIO_DMA_CH);

*AT91C_HDMA_CHER = AT91C_HDMA_ENA0 << AUDIO_DMA_CH;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Однако шведские индусы меня обманули :( По ихнему хедеру работает только нулевой канал DMA.

Не могли бы вы, уважаемый aaarrr, скинуть свой файл, где определено всё это дело AT91C_BASE_HDMA->HDMA_CH, в иаре сиё называется AT91SAM3U4_H?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага спасибо большое. А где взяли файло если не секрет?

 

в моем хедере тупо не было

 

AT91_REG HDMA_SPIP; // HDMA Channel Source Picture in Picture Configuration Register

AT91_REG HDMA_DPIP; // HDMA Channel Destination Picture in Picture Configuration Register

AT91_REG HDMA_BDSCR; // HDMA Reserved

AT91_REG HDMA_CADDR; // HDMA Reserved

 

Оно вообщето таких регистров и в описании на проц нету, я просто заглушку из 4х пустых регистров добавил. Ну и спасибо за код, взял его за основу + поправил хеадер = заработало так как мне нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага спасибо большое. А где взяли файло если не секрет?

Если ничего не путаю, файл взят из огромного software pack непосредственно у атмела. Но это единственная полезная его часть :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...