реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SAM3U чтение SSC через DMAC, не могу запустить чтение через DMAC.
kostyan
сообщение Oct 5 2011, 11:52
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577



Народ, подкиньте пожалуйста пример ЧТЕНИЯ из SSC через DMAC, если у кого есть. blink.gif
В поставке иара идет пример, но он на запись. Пробовал его на чтение приспособить - ну никак не получается. По прерыванию ацп ADS1274 читать получается, но хотелось бы таки через DMA.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 5 2011, 12:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(kostyan @ Oct 5 2011, 15:52) *
никак не получается

Что именно не получается?
Go to the top of the page
 
+Quote Post
kostyan
сообщение Oct 5 2011, 12:46
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577



Не попадаю в прерывание HDMA_IrqHandler, хотя настроил прием на несколько байт, а прием идет постоянно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 5 2011, 13:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

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;
}
Go to the top of the page
 
+Quote Post
kostyan
сообщение Oct 6 2011, 05:11
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577



Однако шведские индусы меня обманули sad.gif По ихнему хедеру работает только нулевой канал DMA.
Не могли бы вы, уважаемый aaarrr, скинуть свой файл, где определено всё это дело AT91C_BASE_HDMA->HDMA_CH, в иаре сиё называется AT91SAM3U4_H?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 6 2011, 07:36
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вот он:
Прикрепленный файл  AT91SAM3U4.zip ( 74.68 килобайт ) Кол-во скачиваний: 83


Точно работает не только нулевой канал.
Go to the top of the page
 
+Quote Post
kostyan
сообщение Oct 6 2011, 08:53
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577



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

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

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х пустых регистров добавил. Ну и спасибо за код, взял его за основу + поправил хеадер = заработало так как мне нужно.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 6 2011, 11:56
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(kostyan @ Oct 6 2011, 12:53) *
Ага спасибо большое. А где взяли файло если не секрет?

Если ничего не путаю, файл взят из огромного software pack непосредственно у атмела. Но это единственная полезная его часть sm.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 00:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01443 секунд с 7
ELECTRONIX ©2004-2016