- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
////выполнение полного сброса, конфигурирования и проверки того что записано в регистрах
////0 - проверка неудачная
////1 - все нормально
BYTE ADE7758::Full_Check(void)
{
OS_DI();
if(Check())//проверка состояний регистров
return 1;//все нормально
else
{
Configure();
OS_Delay(1);//ждем пока нестабильность пройдет
if(Check())//проверка состояний регистров
return 1;//все нормально
else //после переконфигурации не все нормально - значит делаем ресет
{
OS_Delay(100);//ждем пока нестабильность пройдет
Reset(); //полный сброс
OS_Delay(10);//ждем еще чуть-чуть для завершения пересброса (на всякий случай)
Configure();//переконфигурация
//OS_Delay(500);//ждем пока нестабильность пройдет
if(Check())//снова проверка состояний регистров
return 1;//после пересброса все нормально
else
{
OS_Delay(500);//ждем пока нестабильность пройдет
Reset(); //полный сброс
Configure();//переконфигурация
OS_Delay(500);//ждем пока нестабильность пройдет
if(Check())//снова проверка состояний регистров
{
return 1;//после пересброса все нормально
}
else
{
return 0;//все проверки неудачные - выход с ошибкой
}
}
}
}
}
"Нельзя доверять никому. Совсем никому. Даже самому себе."
Разумеется это вызывается в прерывании 200 раз в секунду.
1 тик OS_Delay() = 10мс.
Разрешение прерываний после сделает "дядя Вася".
Зато знаем классы и умеем их писать.