Здраствуйте. Была поставлена задача связать МК с PS/2 клавиатурой.(прогарммирую на avr, под avrstudio 5 "gcc") С помощью апноута задача была решена но нужно реализовать проверку передачи команды на tomeout. передача должна закончится примерно через 1,5 мс. Как организовать в программе timeout. Вот часть кода программы:
Что за "таймаут команды" ? По подробнее о проблеме можно ?
Программа мк все основное время ничего не делает пока на вход int0 не прийдет первый импульс. Приходит с клавиатуры поссылка 11бит данных. В прерывании INT0 считываются все 11 и выделяются только код клавиши (8бит). В случае потери хотябы одного битика програама будет ждать пока он не прийдет, а это может быть уже совсем другая поссылка. Для стабильной роботы нужно отсеевакть ошибочные данные. Единственный способ это с помощью таймера отсчитывать 1,5мс (время передачи 11 бит от клавы) и в случае превышения интервала игнорировать всю поссылку. В моем коде (прилогается ниже) при каждом нажатии на клавишу возникает прерывание по таймауту, хотя время расчитывал с запасом. Может кто делал похожее, можно пример кода?
По моему мнению, это тоже самый единственно правильный вариант.
То что нужно так выполнить это да, вопрос в реализации. Что у меня не получается: 1. Жду прерывания от клавиатуры; 2. Приходит прерывание ----запрещаю все прерывания ---- если таймер не запущен записываю в счетный регистр значение, запускаю таймер ----обрабатываю пришедший бит ----разрешаю прерывания и выхожу с текущего
И как только прошло прерывание от клавы, МК уходит в прерывание по таймеру. Почему так происходит? Вроде правильно рассчитал время таймера. 8000000Гц/64 = 125000/250 = 500Гц = 2мс
На осциллограмме верхний сигнал это программа уходит в прерывание по таймеру, лог 1 нижний это тактовая от клавы.
А кто Вам сказал что будет что то мешать? Пока выполняется обработчик, прерывания и так запрещаются автоматически. По теме - хорошим тоном считается сбрасывать флаг прерывания, после разрешения прерывания и тактирования таймера. Попробуйте, мож поможет..
_________________ Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Заголовок сообщения: Re: TimeOut по ринятию команды от клавиатуры
Добавлено: Пн июл 02, 2012 16:44:35
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Цитата:
---- если таймер не запущен записываю в счетный регистр значение, запускаю таймер
А если запущен ? Он же просто протикает у Вас и всё. Его не нужно проверять, его нужно на каждом бите обновлять, а по его истечению - считать, что байт пришёл. Обновлять его нужно на время в 1.5 бита.
А если запущен ? Он же просто протикает у Вас и всё. Его не нужно проверять, его нужно на каждом бите обновлять, а по его истечению - считать, что байт пришёл. Обновлять его нужно на время в 1.5 бита.
А если запущен мы с ним ничего не делаем пока не закончим принимать данные.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения