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

 
 
> проц игнорирует LPM0, f2012, АЦП и LPM0
Shtirlich
сообщение Dec 10 2009, 22:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 4-11-07
Из: Питер
Пользователь №: 32 037



есть чип F2012 с включенными шим и ацп. работаю в IAR 4.21.2. ацп будит проц из LPM0 когда готово измерение. дальше решаем что делать - продолжать работать или подать сигнал о завершении.
суть проблемы в следующем: первая функция входа в сон выполняется один раз из 20-ти, вторая (внутри цикла) всегда. то есть процессор на первой функции чето выполняет и.. идет дальше, не заморачиваясь на всякие там прерывания с участием АЦП.
со второй функцией все ок, если в нее попасть. доходим, ждем, прыгаем в прерывание, сравниваем - все по логике.

в даташите сказано, что при установке бита CPUOFF подействовать должно "мгновенно". неужели функция криво выполняется именно в этом месте?
можно ли руками, без intrinsic записать нужные биты? веть если как указано словом писать что делать с N Z и С в регистре SR?

p.s. сломал голову, отладку и один eZ430U

Код
//если нажат P1.3*************************************************    
  if (!(BIT3 & P1IN))              
  {
   ADC10CTL1 = INCH_0;                       // input A1
   ADC10AE0 |= BIT0;                         // PA.0 ADC option select
   ADC10CTL0 = ADC10ON + ADC10IE;            //interrupt enabled
   ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
   //__bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
   __low_power_mode_0();

   //конфигурим шим
   P1DIR |= BIT2;                          // P1.2 = output
   P1SEL |= BIT2;                          // P1.2 = TA1 output  
      
   while (ADC10MEM > 0x2E1)                   //пока акум выше 10,8 вольт
    {
      P1OUT |= BIT7;                          //зажеч P1.7 (желтый)
      
      ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
     // __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
      __low_power_mode_0();
      
    
      if (ADC10MEM > 0x311)                   // если акум больше 11,5 V
      TACCR1 = 511;                           // TACCR1 PWM Duty Cycle 100%
      else
      TACCR1 = 255;                           // TACCR1 PWM Duty Cycle 50%
    }//конец  while
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:44
Рейтинг@Mail.ru


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