2012-05-21 2 views
3

Я только что принял проект разработки кода C для микроконтроллера STM32 Cortex M3.Можно ли обнаружить, когда канал DMA на Cortex M3 переходит в режим ожидания?

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

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

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

Dave

+1

Это не строго не по теме, но если вы не получите ответ, на который вы надеетесь, вы можете получить лучшее от Electronics StackExchange. – Polynomial

+0

Просто добавьте еще один бит к этому - возможно ли, если периферийное устройство имеет 2 канала DMA, передающих ему данные, которые контроллер DMA осуществляет арбитраж между каналами DMA, чтобы только один записывал в местоположение за раз? – davidpcl1977

+0

Спасибо Polynomial - я посмотрю там. – davidpcl1977

ответ

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?) 
+0

Thankyou - попробует. – davidpcl1977

3

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

Простейшим способом реализации DMA является использование STM32 Stanadard Peripheral Library. Он включает примеры проектов для всех периферийных устройств, включая как опросы DMA, так и примеры прерывания DMA для USART. Ваша цепочка инструментов может уже включать библиотеку, но, возможно, не все примеры. Даже если у вас уже есть библиотека, неплохо проверить, что это последняя ревизия.

 Смежные вопросы

  • Нет связанных вопросов^_^