Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; 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"::);
Составить ответ | Вернуться на конференцию
Ответы