количество нажатий на RESET в IAR (обработка перывания)
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: количество нажатий на RESET в IAR (обработка перывания)
все флаги в MCUSR устанавливаются аппаратно и до снятия питания не сбрасываются. поэтому вы сам должны обнулять тот флаг, анализ которого позволит вам отличить одно состояние от другого. в вашем случае очистки MCUSR нет - нет и реакции на разные события - всегда срабатывает первое - сброс по включению питания.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: количество нажатий на RESET в IAR (обработка перывания)
Код: Выделить всё
v++;
if (v > 1) v = 0;Re: количество нажатий на RESET в IAR (обработка перывания)
а можно подробнее?Мастер Ломастер писал(а):все флаги в MCUSR устанавливаются аппаратно и до снятия питания не сбрасываются. поэтому вы сам должны обнулять тот флаг, анализ которого позволит вам отличить одно состояние от другого. в вашем случае очистки MCUSR нет - нет и реакции на разные события - всегда срабатывает первое - сброс по включению питания.
Re: количество нажатий на RESET в IAR (обработка перывания)
не вышло (BerZerK-ku писал(а):А проверку регистра убрать, почему указано у автора примера.Код: Выделить всё
v++; if (v > 1) v = 0;
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: количество нажатий на RESET в IAR (обработка перывания)
как же еще подробнее? но попробуюAR_AROV писал(а):а можно подробнее?Мастер Ломастер писал(а):все флаги в MCUSR устанавливаются аппаратно и до снятия питания не сбрасываются. поэтому вы сам должны обнулять тот флаг, анализ которого позволит вам отличить одно состояние от другого. в вашем случае очистки MCUSR нет - нет и реакции на разные события - всегда срабатывает первое - сброс по включению питания.
флаг PORF устанавливается после подачи питания на МК. но не сбрасывается при сбросе, поэтому все время, пока питание на МК подано и не прерывается, этот флаг будет установлен. значит, если вы где-то делаете if(MCUSR & (1<<PORF)), то это условие будет выполняться ВСЕГДА. соответственно вторая ваша проверка НА СОВПАДЕНИЕ с ДРУГИМ ФЛАГОМ никогда не пройдет - будет мешать вечно стоящий PORF. выход только один: сбрасывать принудительно "лишние" флаги. проще всего - обнулять ПОСЛЕ АНАЛИЗА весь регистр целиком. примерно так:
Код: Выделить всё
if(MCUSR & (1<<PORF)){
// обрабатываем подачу питания
v = 0; // v не инициализируется автоматически у вас
} else if(MCUSR & (1<<EXTRF)){
// обрабатываете то, что надо для этого флага
}// если надо - аналогично обрабатываете все прочие флаги
MCUSR = 0; // принудительно ВСЕ ФЛАГИ сбрасываембитва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
Re: количество нажатий на RESET в IAR (обработка перывания)
не реагирует, вот так написал:
Код: Выделить всё
DDRB = 255;
DDRD = 255;
if (MCUSR&(1<<PORF))
{
v = 0;
}
else if (MCUSR==(1<<EXTRF))
{
v++;
}
if (v > 1) { v = 0; MCUSR = 0;}-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: количество нажатий на RESET в IAR (обработка перывания)
я вам на чистом Си написал, как надо делать обработку - вы все творите по-своему... ну что ж, тогда я пас, продолжайте творить
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: количество нажатий на RESET в IAR (обработка перывания)
Мастер Ломастер писал(а):я вам на чистом Си написал, как надо делать обработку - вы все творите по-своему... ну что ж, тогда я пас, продолжайте творить
что я не так сделал?
Re: количество нажатий на RESET в IAR (обработка перывания)
__no_init unsigned int v;
if (MCUSR & (1<<PORF))
{
//был сброс по подаче питания (первый раз подали питание на контроллер)
v = 0; //инициализируем переменную
}
else if (MCUSR & (1<EXTRF))
{
//был сброс по RESET
v++; //наращиваем счетчик "сбросов"
}
else if (MCUSR & (1<<BORF))
{
//была "просадка" по питанию - ничего не делаем
}
else if (MCUSR & (1<<WDRF))
{
//сработал сторожевой таймер - ничего не делаем
}
MCUSR = 0; // очистить регистр статуса
if (v == 1)
{
//был один сброс
}
else if (v == 2)
{
//было два сброса
}
else if (v == 3)
{
//было три сброса
}
if (MCUSR & (1<<PORF))
{
//был сброс по подаче питания (первый раз подали питание на контроллер)
v = 0; //инициализируем переменную
}
else if (MCUSR & (1<EXTRF))
{
//был сброс по RESET
v++; //наращиваем счетчик "сбросов"
}
else if (MCUSR & (1<<BORF))
{
//была "просадка" по питанию - ничего не делаем
}
else if (MCUSR & (1<<WDRF))
{
//сработал сторожевой таймер - ничего не делаем
}
MCUSR = 0; // очистить регистр статуса
if (v == 1)
{
//был один сброс
}
else if (v == 2)
{
//было два сброса
}
else if (v == 3)
{
//было три сброса
}
Re: количество нажатий на RESET в IAR (обработка перывания)
огромедное спасибо!!! я не понимал что есть еще что то типа "подрегистров"iplogger писал(а):__no_init unsigned int v;
if (MCUSR & (1<<PORF))
{
//был сброс по подаче питания (первый раз подали питание на контроллер)
v = 0; //инициализируем переменную
}
else if (MCUSR & (1<EXTRF))
{
//был сброс по RESET
v++; //наращиваем счетчик "сбросов"
}
else if (MCUSR & (1<<BORF))
{
//была "просадка" по питанию - ничего не делаем
}
else if (MCUSR & (1<<WDRF))
{
//сработал сторожевой таймер - ничего не делаем
}
MCUSR = 0; // очистить регистр статуса
if (v == 1)
{
//был один сброс
}
else if (v == 2)
{
//было два сброса
}
else if (v == 3)
{
//было три сброса
}
Re: количество нажатий на RESET в IAR (обработка перывания)
Не советую выдумывать себе новые определения! Потом сами запутаетесь...AR_AROV писал(а):огромедное спасибо!!! я не понимал что есть еще что то типа "подрегистров"
Что имелось в виду под подрегистров?
— Не говорите мне что делать и я не скажу куда Вам идти...
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: количество нажатий на RESET в IAR (обработка перывания)
PORF, EXTRF, BORF, WDRF - это НЕ подрегистры. Это биты регистра MCUSR (Micro Controller Unit Status Register)
Откройте даташит на МК и будет всё ясно, как белый день.
Откройте даташит на МК и будет всё ясно, как белый день.
I am DX168B and this is my favourite forum on internet!
Re: количество нажатий на RESET в IAR (обработка перывания)
md5sum вот эти биты и имел ввиду... не знал как называются
Спасибо за разъяснение... в даташите все на буржуйском и ни разу ни понятно ((( но я работаю над этим, исправлюсь )DX168B писал(а):PORF, EXTRF, BORF, WDRF - это НЕ подрегистры. Это биты регистра MCUSR (Micro Controller Unit Status Register)
Откройте даташит на МК и будет всё ясно, как белый день.


