Цитата(Serj78 @ Dec 18 2010, 21:08)

И самое важное- весь реалтайм под отладчиком свихивается, но наверно, вы и сами это знаете (требуется время на обработку команд отладчика).
Чтобы мне сюда не повторяться, глянь
сообщение в другой ветке. Может поможет.
Цитата(klen @ Dec 18 2010, 20:08)

теперь вопрос по DMA, как каналу DMA сказать чтоб он умел однократно по команде перекачивать данные. если я использую режим DMA_Mode_Normal то он делает предачу в уарт один раз и встает как вкопаный, как ево пнуть чтоб еще раз повторил сее действие.
1. Организовать обработчик прерывания от DMA по окончании передачи (по биту ххх_IT_TCn). Там ЗАПРЕТИТЬ канал DMA.
2. Как только назреет очередная порция,
вновь загрузить в канал DMA регистр адрес указателя на источник данных и счетчик и РАЗРЕШИТЬ DMA. Он и рванет по-новой.
В коде у меня это выглядит примерно так (речь у меня об SPI, потому DMA1_IT_TC3, но и в UART работает аналогично):
Код
//обработчик прерывания от готовности DMA
DMA_ClearITPendingBit(DMA1_IT_TC3);
DMA_Cmd(SPI_DMA, DISABLE);
...
//конец прерывания
...
//запуск очередной передачи
SPI_DMA->CMAR = (uint32_t)src;
SPI_DMA->CNDTR = cnt;
DMA_Cmd(SPI_DMA, ENABLE); // понеслась...
Цитата
теперь еще непонятно. размер регистра USART->DR имеет вид полуслова, как правильно из байтового массива с помощью DMA в него писать, вернее он пишется правильно но в одном месте прочитал чтто по DMA можно и по четыре байта пересылать - тогда такты системной шины экономятся. че тут реально происходит и как лучше и правильнее.
Если ты передаешь байты через UART (а не 9-ти битные полуслова, к примеру), то зачем тратить память на массив из слов, если в таковых только байт и используется?Или имеется что другое в виду?