Можно ли определить, когда канал DMA на Cortex M3 простаивает?

Я только что взял на себя проект по разработке кода C для микроконтроллера STM32 Cortex M3.

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

Есть ли способ определить, когда DMA занят передачей данных или бездействует, или есть ли какие-либо прерывания, запускаемые после завершения передачи.

Большое спасибо за любые отзывы,

Дэйв


person davidpcl1977    schedule 21.05.2012    source источник
comment
Это не строго по теме, но если вы не получите здесь ответа, на который надеетесь, вы можете получить ответ получше от Electronics StackExchange.   -  person Polynomial    schedule 21.05.2012
comment
Просто добавьте к этому еще один бит - возможно ли, что если у периферийного устройства есть 2 канала DMA, передающие на него данные, контроллер DMA выполняет арбитраж между каналами DMA, так что только один записывает в местоположение за раз?   -  person davidpcl1977    schedule 21.05.2012
comment
Спасибо Polynomial - я посмотрю там.   -  person davidpcl1977    schedule 21.05.2012


Ответы (2)


Вот что я делаю, чтобы проверить, завершилась ли операция DMA:

DMA_Cmd(DMA2_Channel5, ENABLE); // start
while (!DMA_GetFlagStatus(DMA2_FLAG_TC5)); // wait to finish
DMA_ClearFlag(DMA2_FLAG_TC5); // clear flag (needed?)
person leppie    schedule 21.05.2012
comment
Спасибо - попробую. - person davidpcl1977; 21.05.2012

Завершение DMA может быть как по опросу, так и по прерыванию. Подробности приведены в справочном руководстве для вашей конкретной детали - "STM32 Cortex-M3" недостаточно конкретен, чтобы сузить его до необходимого документа, но вы можете загрузить его с веб-сайт ST.

Самый простой способ реализовать DMA - использовать стандартную периферийную библиотеку STMheral. / а>. Он включает примеры проектов для всех периферийных устройств, включая примеры как опроса DMA, так и прерывания DMA для USART. Ваша цепочка инструментов может уже включать библиотеку, но, возможно, не все примеры. Даже если у вас уже есть библиотека, рекомендуется проверить, что это последняя версия.

person Clifford    schedule 21.05.2012