Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

хМега после включения питания засыпает и просыпается по прерыванию от порта. (так и должно быть). Но после работы и второго засыпания - уже не просыпается. Вроде всё перепробовал.

Отправлено Юрий_СВ (217.12.195.250) 22 июня 2011, г. 13:27


Т.е.
Есть 2 функции настройки оборудования: на сон и на работу.

Сразу после подачи питания настраиваемся на сон и засыпаем.
Просыпаемся по прерыванию от ного порта С (бит 2 - по идее, асинхронный).
Настраиваемся на работу. Работаем хорошо. Засыпаем по команде.
Больше прерыванем по порту разбудить не получается.

Вот кусок функции настройки сна :
asm volatile("cli\n\t"::);
// ПортC
// фронты не замедлять, инверсия - выкл.,
GeneralPortSeting(&PORTC); // Настройки, общие для всех портов
// 0 - 2-х тактный выход без подвеса, цифровой вход - выкл. -
// 1 - 2-х тактный выход без подвеса, цифровой вход - выкл. -
PORTC.PIN2CTRL=0x1a; // 2 - 2-х тактный выход с подвесом+, вход - прер. по спаду - клавиша - ПРОБУЖДЕНИЕ
PORTC.PIN3CTRL=0x1a; // 3 - 2-х тактный выход с подвесом+, вход - прер. по спаду - клавиша
PORTC.PIN4CTRL=0x1a; // 4 - 2-х тактный выход с подвесом+, вход - прер. по спаду - клавиша
PORTC.PIN5CTRL=0x1a; // 5 - 2-х тактный выход с подвесом+, вход - прер. по спаду - клавиша
// 6 - 2-х тактный выход без подвеса, цифровой вход - выкл. -
// 7 - 2-х тактный выход без подвеса, цифровой вход - выкл. -
PORTC.DIR=0x02; // ШИМ звука (PC1) на выход, остальные - на вход на вход
PORTC.OUT=0x00; // все выходы = 0
PORTC.INTCTRL=0x03; // при пробуждении - нулевое прерывание 2-го уровня (0x02)
PORTC.INT0MASK=0x04; // 2-я нога (асинхронная) вызывает прерывание для пробуждения
PORTC.INTFLAGS=0x03; // сброс флагов прерывания

// ------------------------------ Прерывания ---------------------------------
PMIC.CTRL=0x04; // Циклический сдвиг приоритетов низкого уровня - запрещён
// Вектора прерываний в области памяти приложения
// Разрешены прерывания только высшего (3) приоритета

SLEEP.CTRL=0x05; // энергосбережение разрешено, режим: "power-down"

asm volatile("sei\n\t"::);


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 97:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru