|
Подскажите по реализации библиотеки для МК? |
|
|
|
 |
Ответов
|
Aug 25 2015, 13:34
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(ViKo @ Aug 25 2015, 15:34)  Если все выводы принадлежат одному порту, можно попробовать читать порт и по DMA складывать в память. А пересылку DMA запускать таймером. Все будет работать аппаратно, регулярно. Только запускать процесс и ждать окончания придется в программе. Это уже лишнее - все равно ведь ждать :D Но на будущее учту
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Aug 26 2015, 18:20
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Я с этими МК не работаю. Но, как бы я сделал: насколько я понял, должна быть стабильная частота 100 кГц. Так как эта функция работает от и до, то договариваемся с программистами, что берем хиленький не особо нужный таймер. Функция простенький автомат. Хоть флаговый, хоть свитч-кейс. Нулевое состояние - Инициализируем таймер на нужную частоту, прерывание, при этом рубим все мешающие (опять же, если это можно). Установка следующего состояния. Следующее состояние просто ожидание флага, который устанавливается в прерывании по достижении нужного кол-ва отсчетов. В прерываниях считываем нужные порты и кол-во прерываний (100), кладем считанные данные куда требуется. По достижении нужного кол-ва прерываний-отсчетов отключаем прерывание, таймер, ставим флаг, ставим обратно нулевое состояние и выходим. И кстати, если уж функция работает от и до, то спокойно можно занять какой-нибудь таймер. Правда тут нюансы могут быть. Что-то вроде такого: Код static unsigned char flags = 0;
void func (void) { static unsigned char state;
switch (state) { case 0: // инициализация ввода-вывода, переменных, таймера. state = 1; break;
case 1: if (flags & (1<<0)) { // отключение таймера, прерываний flags = 0; state = 0; } break;
default: break; } }
Сообщение отредактировал demiurg1978 - Aug 26 2015, 18:53
|
|
|
|
|
Aug 27 2015, 06:52
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(demiurg1978 @ Aug 26 2015, 21:20)  Но, как бы я сделал...берем таймер...в прерываниях считываем нужные порты...По достижении нужного кол-ва прерываний-отсчетов отключаем прерывание, таймер, ставим флаг. Так тоже можно. Но зачем? Зачем занимать таймер, настраивать его, выполнять другие телодвижения, когда достаточно простого цикла ожидания. Ведь из функции все равно не выйдешь, пока не наберешь все отсчеты и не обработаешь их.
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Aug 27 2015, 13:18
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(jcxz @ Aug 27 2015, 10:19)  Затем чтобы освободить CPU для выполнения менее приоритетных задач в многозадачной среде. Или хотя-бы для выполнения WFE/WFI в фоновой задаче. А как использование таймера в моем случае позволит освободить CPU? Простите, но я действительно не понимаю  Смотрите. Есть некая программа, пусть даже с ОС. В какой-то момент она вызывает мою функцию, задача которой снять 100 отсчетов с ноги с интервалом в 10(+/-) мкс, обработать их блоком и вернуть результат. Так вот, какая разница для основной программы, как будет отсчитываться интервал между считыванием в моей функции: циклом задержки с nop-ами, таймером с ожиданием флага переполнения, таймером с DMA и прочее и прочее? Ведь функция в любом случае вернет управление только после накопления ВСЕХ отсчетов и, чтобы я ни придумал, это в любом случае займет не менее 1 мс. Если я не прав, то буду очень благодарен за разъяснение
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
Сообщений в этой теме
Harvester Подскажите по реализации библиотеки для МК? Aug 25 2015, 08:20 adnega Цитата(Harvester @ Aug 25 2015, 11:20) Од... Aug 25 2015, 08:24 Harvester Цитата(adnega @ Aug 25 2015, 11:24) А раз... Aug 25 2015, 08:33  adnega Цитата(Harvester @ Aug 25 2015, 11:33) Но... Aug 25 2015, 08:35 zltigo QUOTE (Harvester @ Aug 25 2015, 11:20) 3.... Aug 25 2015, 08:24 Harvester Цитата(zltigo @ Aug 25 2015, 11:24) Поско... Aug 25 2015, 08:57  zltigo QUOTE (Harvester @ Aug 25 2015, 11:57) С ... Aug 25 2015, 09:12   Harvester Цитата(zltigo @ Aug 25 2015, 12:12) Но кт... Aug 25 2015, 09:29    esaulenka Цитата(Harvester @ Aug 25 2015, 12:29) До... Aug 25 2015, 11:44     Harvester Цитата(esaulenka @ Aug 25 2015, 14:44) Я ... Aug 25 2015, 12:16      esaulenka Цитата(Harvester @ Aug 25 2015, 15:16) Пр... Aug 25 2015, 12:54      adnega Цитата(Harvester @ Aug 25 2015, 15:16) а ... Aug 25 2015, 12:59      jcxz Правильное ожидание готовности:
Разрешаем прерыван... Aug 28 2015, 12:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|