реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Спящий режим.
Jenya7
сообщение Dec 4 2014, 07:54
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Я никогда не пользовался спящим режимом. Но теперь хочу сделать приборчик на батарейке и возник вопрос как правильно пользоваться спящим режимом.
CODE
void main(void)
{
while(1)
{

//interrupt from timer capture compare
if(timer_comp0)
{
timer_comp0 = 0;
ADC_Start(ADC0, adcStartSingle);
//ADC_Start(ADC0, adcStartScan);
}

//interrupt from ADC
if(adc_transfer_complete)
{
adc_transfer_complete = 0;

//do something
}

//interrupt from timer overflow
if(timer_uf)
{
//do something

//EMU_EnterEM1();
//EMU_EnterEM2(false);
}

if (sysFlags&MEAS_MODE)
{

if (sysFlags&PULSE100)
{
//do somrthing
}

if (sysFlags&PULSE1000)
{
//do something
}
}


if (sysFlags&UPDATE_MAIN_COUNTER)
{
//do something
}

//interrupt from LEUART-RX
if( rx_packet_recieved)
{
//do something
}

EMU_EnterEM2(true);

} //while

/* Never going to reach this statement. */
return 0;
}


Если я в конце вхожу в спящий режим то программа перестает правильно работать хотя прерывания от таймера должны выводить из спящего режима.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 4 2014, 10:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



часто после выхода из режимов энергосбережения необходимо повторно проинициализировать некоторые модули...
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 4 2014, 13:14
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Golikov A. @ Dec 4 2014, 15:24) *
часто после выхода из режимов энергосбережения необходимо повторно проинициализировать некоторые модули...

ничего такого в тех документации не написано.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 4 2014, 13:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



тоды ой...
я могу еще пару гаданий изобразить, но если вы укажете что за процессор, дело возможно пойдет быстрееsm.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 4 2014, 13:55
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Golikov A. @ Dec 4 2014, 18:46) *
тоды ой...
я могу еще пару гаданий изобразить, но если вы укажете что за процессор, дело возможно пойдет быстрееsm.gif

процессор не очень ходовой EFM32TG842 но грозятся малым потреблением
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Dec 4 2014, 14:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Jenya7 @ Dec 4 2014, 10:54) *
Если я в конце вхожу в спящий режим то программа перестает правильно работать хотя прерывания от таймера должны выводить из спящего режима.

Смотря какого таймера. LETIMER используете или RTC? Другие вывести не смогут.

Цитата(Jenya7 @ Dec 4 2014, 16:14) *
ничего такого в тех документации не написано.

Как же не написано? При входе в EM2 выключается кварц (если был включен). На выходе МК работает от внутреннего RC.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 4 2014, 15:02
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(_Артём_ @ Dec 4 2014, 19:39) *
Смотря какого таймера. LETIMER используете или RTC? Другие вывести не смогут.


Как же не написано? При входе в EM2 выключается кварц (если был включен). На выходе МК работает от внутреннего RC.

У меня прерывания от LETIMER. Да но в ЕМ2 низкочастотный кварц работает а у меня LETIMER подключен к внешнему часовому кварцу.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Dec 4 2014, 15:26
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Jenya7 @ Dec 4 2014, 18:02) *
У меня прерывания от LETIMER.

По вашему коду этого не скажешь.

Цитата(Jenya7 @ Dec 4 2014, 18:02) *
Да но в ЕМ2 низкочастотный кварц работает а у меня LETIMER подключен к внешнему часовому кварцу.

А в EM0/EM1 прерывания от LETIMER-а происходят? Они вообще разрешены?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 4 2014, 15:41
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(_Артём_ @ Dec 4 2014, 20:26) *
По вашему коду этого не скажешь.


А в EM0/EM1 прерывания от LETIMER-а происходят? Они вообще разрешены?

1. в коде нет конфигурции таймера но вообще это так
Код
void LETIMER_Setup(void)
{
  /* Enable necessary clocks */
    CMU_ClockSelectSet(cmuClock_LETIMER0, cmuSelect_LFXO);
   CMU_ClockEnable(cmuClock_LETIMER0, true);

  LETIMER_CompareSet(LETIMER0, 0, LOAD0);


  /* Set configurations for LETIMER 0 */
  const LETIMER_Init_TypeDef letimerInit =
  {
  .enable         = true,                   /* Start counting when init completed. */
  .debugRun       = false,                  /* Counter shall not keep running during debug halt. - false */
  .rtcComp0Enable = false,                  /* Don't start counting on RTC COMP0 match. */
  .rtcComp1Enable = false,                  /* Don't start counting on RTC COMP1 match. */
  .comp0Top       = false,                  /* Load COMP0 register into CNT when counter underflows. COMP0 is used as TOP else TOP = 0xFFFF */
  .bufTop         = false,                  /* Don't load COMP1 into COMP0 when REP0 reaches 0. */
  .out0Pol        = 0,                      /* Idle value for output 0. */
  .out1Pol        = 0,                      /* Idle value for output 1. */
  .ufoa0          = letimerUFOANone,         /* PWM output on output 0 */
  .ufoa1          = letimerUFOANone,       /* Pulse output on output 1*/
  .repMode        = letimerRepeatFree       /* Count until stopped */
  };

    /* Initialize LETIMER */
    LETIMER_Init(LETIMER0, &letimerInit);

     /* Enable underflow interrupt */
    LETIMER_IntEnable(LETIMER0, LETIMER_IF_COMP0 | LETIMER_IF_UF);

    /* Enable LETIMER0 interrupt vector in NVIC*/
    NVIC_EnableIRQ(LETIMER0_IRQn);
}


2. разрешены до ЕМ2 включительно.

Сообщение отредактировал Jenya7 - Dec 4 2014, 15:42
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Dec 6 2014, 09:54
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Jenya7 @ Dec 4 2014, 17:41) *
1. в коде нет конфигурции таймера но вообще это так
Код
void LETIMER_Setup(void)
{
  /* Enable necessary clocks */
    CMU_ClockSelectSet(cmuClock_LETIMER0, cmuSelect_LFXO);
   CMU_ClockEnable(cmuClock_LETIMER0, true);

  LETIMER_CompareSet(LETIMER0, 0, LOAD0);
.....
}


2. разрешены до ЕМ2 включительно.

Если указаный код это все, что есть, и Вы больше ничего не утаили, то явно не хватает в самом начале:
CMU_OscillatorEnable(cmuOsc_LFXO, true, true);
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 7 2014, 09:18
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(KnightIgor @ Dec 6 2014, 14:54) *
Если указаный код это все, что есть, и Вы больше ничего не утаили, то явно не хватает в самом начале:
CMU_OscillatorEnable(cmuOsc_LFXO, true, true);

я конфигурирую клоки в другом файле. 20 кило кода я не могу втиснуть в пост.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016