19.02.2019, 12:29
|
|
Прохожий
Регистрация: 19.02.2019
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
ADC -> DMA -> UART прерывания
Уважаемые устал биться, не работают прерывания, подскажите в чем может быть проблема? Данные идут сплошным потоком отладчик в обработку прерывания не заходит. STM32F051
main.txt
Последний раз редактировалось pavell; 19.02.2019 в 20:28.
|
|
|
|
19.02.2019, 13:34
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
pavell, я конечно все понимаю, но тут нет телепатов
Начните с чтения DS, AN, errata на сайте производителя по Вашему МК, семейству, блокам используемой периферии и напишите здесь что и как Вы делали.
Сюда бы схему включения означенного в списке проблем и код программы с комментариями во вложениях. Спойлеры имеют свойство не у всех открываться, а движок может вносить коррективы в публикуемый в топике код.
Тогда будет (помимо сферического коня в вакууме) предмет для анализа
Пока по текущему коду - а кто вызывает те самые что-то_ini функции?
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 19.02.2019 в 13:40.
|
|
|
|
19.02.2019, 13:58
|
|
Прохожий
Регистрация: 19.02.2019
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
Ок, вечером добавлю вложение с кодом и коментариями, а пока убрал из под спойлера
Сообщение от mike-y-k
|
Пока по текущему коду - а кто вызывает те самые что-то_ini функции?
|
В main() же
|
|
|
|
19.02.2019, 16:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
буфер для приема один и для ацп и для юсарт ? это так на вскидку.
По поводу прерываний : Какой уровень оптимизации кода стоит ? Они пустые функции обработки исключений и потому компилятор может не внести их в исходник. В отладчике покажите что происходит когда вручную запускаете прерывание по дма ? В кейле есть такая возможность.
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 19.02.2019 в 16:23.
|
|
|
|
19.02.2019, 16:18
|
|
Вид на жительство
Регистрация: 08.12.2018
Сообщений: 466
Сказал спасибо: 2
Сказали Спасибо 105 раз(а) в 71 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
если б это не был кал, я б поделилсо кодом для уарт-дма
|
|
|
|
19.02.2019, 19:49
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,770 раз(а) в 5,896 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
Сообщение от 28-63
|
если б это не был кал
|
Святому - святое и снится. А Вам - кал...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
19.02.2019, 20:57
|
|
Прохожий
Регистрация: 19.02.2019
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
Сообщение от CERGEI1982
|
буфер для приема один и для ацп и для юсарт ?
|
Ну в этом весь смысл )
Уровень оптимизации L0
В обработчики добавил остановку ADC, что бы сразу увидеть реакцию, но ее по прежнему нет (
потыкал прерывания руками вообще ничего не понял, что есть, что нету
|
|
|
|
19.02.2019, 21:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
1. А разве нельзя напрямую при помощи DMA доставать данные из ADCx-›DR и класть в USARTx-›TDR?
2. А разве успеет UART с такой бешеной скоростью данные отправлять, когда настроен всего лишь на 256кбод?
3. Нет смысла делать многократные |= и &= для регистров - они же волатильные, gcc не оптимизирует повторные вызовы!
4. А можно описать потребность, ТЗ, так сказать?
Я вообще не понял, что нужно. Потому что если нужно быстро копировать данные с АЦП в уарт, то как-то это неправильно на мой взгляд. Нужно синхронизировать по отправке с уарта, а не черт-те как...
5. Посмотрите в сниппетах. Там полно примеров по DMA.
__________________
Смерть бандеровской мразоте!
Последний раз редактировалось eddy; 19.02.2019 в 21:06.
|
|
|
|
19.02.2019, 21:14
|
|
Прохожий
Регистрация: 19.02.2019
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
Сообщение от eddy
|
1. А разве нельзя напрямую при помощи DMA доставать данные из ADCx-›DR и класть в USARTx-›TDR?
...
|
Конечно можно напрямую, но тут как раз и возникает проблема из второго вопроса. Для "синхронизации" поступающих и отправляемых данных я и применил буфер. Решение спорное, но применил его.
3. ну есть такой момент, надо отучаться )
Да задача именно быстро передавать данные из АЦП в УАРТ. По моей задумке сама синхронизация должна быть реализована в обработчике прерываний.
|
|
|
|
19.02.2019, 21:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
|
Re: ADC -> DMA -> UART прерывния
АЦП сильно быстрей буфер заполняет. Поэтому лучше прерывание ПДП ставить не на завершение заполнения буфера, а на половину завершения.
Не нужно указывать циклический режим, т.к. пока будете сидеть в обработчике прерывания, пойдет заполнение по следующему кругу и предыдущие данные похерит.
Кроме того, вот будете вы пихать данные с АЦП в уарт. И как читатель определит, что к нему идет в этом потоке, где нет никаких меток?
Чтобы обеспечить постоянную загрузку канала я бы сделал так. Запускаем ПДП на АЦП. На середине заполнения буфера выставляем флаг, что можно запускать ПДП на уарт. Прерывание по окончанию буфера АЦП не нужно. А вот по окончанию передачи уартом - нужно. Как только передача закончилась, опять запускаем заполнение буфера со стороны АЦП, а пока он первую половину заполняет, отправляем метку, что предыдущая порция данных кончилась и сейчас пойдет новая. А тут и флаг, разрешающий отправку, подоспеет. В принципе, можно вообще без него работать и сразу после отправления метки запускать ПДП на отправку буфера.
__________________
Смерть бандеровской мразоте!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:05.
|
|