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

 
 
> Обработка прерываний и тайминг в 5мс, Cortex-m3, пример хотелось бы...
cz_nikita
сообщение Nov 29 2008, 12:29
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 29-11-08
Пользователь №: 42 058



Никак не могу найти литературы и пример обработки прерываний для Соrtex-M3.
Задача такова: по USART приходят данные и нужно выдавать АСК в течении 5мс.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
SeriouSerg
сообщение Dec 1 2008, 00:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 6-06-05
Из: г. Таганрог
Пользователь №: 5 759



Цитата(cz_nikita @ Nov 29 2008, 15:29) *
Никак не могу найти литературы и пример обработки прерываний для Соrtex-M3.
Задача такова: по USART приходят данные и нужно выдавать АСК в течении 5мс.


А какой у Вас кристалл? Если STM32, то скачайте с офсайта библиотеку, там будут примеры.
По личному опыту рекомендую настроить DMA делать анализ приемного буфера на предмет принятых данных в течение 5 мс и выдавать акноледж. У меня подобная задача была реализована. С прерываниями на STM32 веселье начинается, особенно если использовать глючный Keil.
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Dec 1 2008, 07:29
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(SeriouSerg @ Dec 1 2008, 03:08) *
С прерываниями на STM32 веселье начинается, особенно если использовать глючный Keil.

это вы, кажется, сказали не подумав
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 1 2008, 08:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(SeriouSerg @ Dec 1 2008, 04:08) *
рекомендую настроить DMA делать анализ приемного буфера на предмет принятых данных в течение 5 мс и выдавать акноледж.

Скорее же разъясните, как можно настоить DMA что-то анализировать, а то мой моск взорвется! sad.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Sanek_spb
сообщение Dec 1 2008, 14:58
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 28-02-07
Пользователь №: 25 746



Цитата(cz_nikita @ Nov 29 2008, 15:29) *
Никак не могу найти литературы и пример обработки прерываний для Соrtex-M3.
Задача такова: по USART приходят данные и нужно выдавать АСК в течении 5мс.


Как раз сейчас мучаю кортекс, Вы бы сказали что за мк, на какой частоте проц, на какой уарт и какой поток данных, может и идейку бы подкинули.

Но по любому несколько простых путей:
1. данные приходят медленно: каждый байтик обрабатываете, как придет последний, выдавай АК
2. данные приходят быстро:
2.1. буферизуете полностью (например в прерывании) и по последнему байтику обрабатываете и выдаете АК
2.2. кольцевой буфер - по приходу даных кидаете в буфер (в прерывании например), по возможности обрабатываете (в главном цикле), последний байт -> АК
2.3. настраиваете ДМА, по окончании приема приходит прерывание -> обрабатываете и выдаете АК

Соотв. проблема сводится к вопросу успеете ли обработать свои данные, а уже основываясь на ответе выбираете себе вариант.
Go to the top of the page
 
+Quote Post
cz_nikita
сообщение Dec 1 2008, 21:03
Сообщение #6





Группа: Новичок
Сообщений: 3
Регистрация: 29-11-08
Пользователь №: 42 058



Цитата(Sanek_spb @ Dec 1 2008, 15:58) *
Как раз сейчас мучаю кортекс, Вы бы сказали что за мк, на какой частоте проц, на какой уарт и какой поток данных, может и идейку бы подкинули.

Но по любому несколько простых путей:
1. данные приходят медленно: каждый байтик обрабатываете, как придет последний, выдавай АК
2. данные приходят быстро:
2.1. буферизуете полностью (например в прерывании) и по последнему байтику обрабатываете и выдаете АК
2.2. кольцевой буфер - по приходу даных кидаете в буфер (в прерывании например), по возможности обрабатываете (в главном цикле), последний байт -> АК
2.3. настраиваете ДМА, по окончании приема приходит прерывание -> обрабатываете и выдаете АК

С МК раньше работать не доводилось, но задачу нужно решать...
Модель: STM32F103CBT6. Задача: прокачка данных с одного УАРТ на другой УАРТ (преобразование с одного протокола в другой).
Сегодня выяснил, что эта самая прокачка очень сильно глючит (потеря данных и т.д.).
УАРТ1 работает на скорости 9600, УАРТ2 на скорости 115200.
Сейчас реализовано так: находясь в прерывании УАРТ1 делается посылка данных на УАРТ2, и наборот соответсвенно: находясь в прерывании УАРТ2 делается посылка данных на УАРТ1.
Но как подсказывает логика: если у нас существует два интерфейса с разными скоростями, то между ними должен быть "выравнивающий" буфер.
Т.е. УАРТ1 кидает данные в очередь, в майне читаем наш буфер, анализируем, и отсылаем на УАРТ2. Также с УАРТ2 кидаем в очередь, в майне читаем, анализируем, и отсылаем на УАРТ1.

ЗЫ: Хотелось бы услышать комментарии от гуру, правильный ли путь выбран с буферизацией данных?
Go to the top of the page
 
+Quote Post
koyodza
сообщение Dec 10 2008, 21:20
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744



Цитата(cz_nikita @ Dec 1 2008, 23:03) *
Сейчас реализовано так: находясь в прерывании УАРТ1 делается посылка данных на УАРТ2, и наборот соответсвенно: находясь в прерывании УАРТ2 делается посылка данных на УАРТ1.

Вот так как раз делать не следует.

Цитата(cz_nikita @ Dec 1 2008, 23:03) *
Но как подсказывает логика: если у нас существует два интерфейса с разными скоростями, то между ними должен быть "выравнивающий" буфер.
Т.е. УАРТ1 кидает данные в очередь, в майне читаем наш буфер, анализируем, и отсылаем на УАРТ2. Также с УАРТ2 кидаем в очередь, в майне читаем, анализируем, и отсылаем на УАРТ1.

Да, в общих чертах правильно. Только желательно учитывать особенности протокола, а то, например, при подаче запроса через "быстрый" порт к устройству, подключенному к "медленному" порту, пославший запрос может просто не дождаться ответа. Или другой вариант: на "быстром" порту висит устройство, которое может отправлять довольно длинные пакеты (или вообще лить данные потоком). И вот от этих особенностей будет сильно зависеть и реализация Вашего моста.

Да, в STM32 очень хорошо DMA использовать (если получится - я тут нарвался по невнимательности wacko.gif на невозможность одновременной работы USART1 и SPI2 через DMA), фактически вы получаете фифо произвольного размера, да еще и данные сразу окажутся там где надо. Метод работы по прерываниям по каждому байту довольно неэффективен.
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 11 2008, 02:20
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(koyodza @ Dec 10 2008, 23:20) *
Метод работы по прерываниям по каждому байту довольно неэффективен.

Смотря для чего.
Если идет "поток в потоке" (Escaped последовательность, или програмный контроль потока XON/XOFF), то побайтовая обработка будет наиболее эффективной как по быстродейтсвию так и по расходу памяти. Кстати второе - эффективность по расходу памяти - для побайтовой обработки всегда TRUE.
Go to the top of the page
 
+Quote Post

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

 


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


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