|
Подскажите по реализации библиотеки для МК? |
|
|
|
 |
Ответов
|
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)  Но, как бы я сделал...берем таймер...в прерываниях считываем нужные порты...По достижении нужного кол-ва прерываний-отсчетов отключаем прерывание, таймер, ставим флаг. Так тоже можно. Но зачем? Зачем занимать таймер, настраивать его, выполнять другие телодвижения, когда достаточно простого цикла ожидания. Ведь из функции все равно не выйдешь, пока не наберешь все отсчеты и не обработаешь их.
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
Сообщений в этой теме
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 Цитата(Harvester @ Aug 27 2015, 12:52) Та... Aug 27 2015, 07:19     Harvester Цитата(jcxz @ Aug 27 2015, 10:19) Затем ч... Aug 27 2015, 13:18      jcxz Правильное ожидание готовности:
Разрешаем прерыван... Aug 28 2015, 12:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|