для начала запустил АЦП с опорой полтора польта и шим генератор на первом таймере, проц клокает на 8 мегагерцах, кторой таймер клокает от 14 килогерцового тормоза и опрашивает АЦП, и кидает результат из АЦП на выход ШИМа(а там светик моргает когда ногу трогаеш)
так вот проблемы:
1) не срабатывает прерывание АЦП
инициирую АЦП так:
Код: Выделить всё
ADC10CTL0 &= ~ENC;
ADC10CTL0 = ADC10IE | ADC10ON | REFON | ADC10SHT_2 | SREF_1;
ADC10CTL1 = CONSEQ_0 | ADC10SSEL_3 | ADC10DIV_0 | SHS_0 | INCH_1;
ADC10AE0 = 0x6;
ADC10CTL0 |= ENC;
текст main()
Код: Выделить всё
ADC10CTL0 |= ADC10SC;
_BIS_SR(LPM0_bits + GIE);
Код: Выделить всё
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR_HOOK(void)
{
/* USER CODE START (section: ADC10_ISR_HOOK) */
static int a=0;
a=ADC10MEM;
a=a/4;
if((a>=0)&&(a<255))
TA0CCR1 = a;
ADC10CTL1 |= INCH_1;
ADC10CTL0 |= ADC10SC;
/* USER CODE END (section: ADC10_ISR_HOOK) */
}
так вот в этот обработчик оно не попадает никогда!
если же этот код перенести в таймерное прерывание
Код: Выделить всё
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR_HOOK(void)
{
/* USER CODE START (section: TIMER1_A0_ISR_HOOK) */
static int a=0;
a=ADC10MEM;
a=a/4;
if((a>=0)&&(a<255))
TA0CCR1 = a;
ADC10CTL1 |= INCH_1;
ADC10CTL0 |= ADC10SC;
/* USER CODE END (section: TIMER1_A0_ISR_HOOK) */
}
то вродебы всё работает так как надо НО...потребление 3 миллиампера!!! как роде не уходит в сон...
мне нужно чтоб во время сна АЦП преобразовывал(согласен и на 14 килогерц такта АЦП
а вот таймер 1 должен гудеть на все 8 мегагерц...так надо...его результатом АЦП буду корректировать.....или выключать...
ЧЯДН ?
почему нет низкого потребления и нет прерывания АЦП?



