Здравствуйте. Не может ли кто объяснить, в чем проблема. Я пытаюсь померить частоту тактового генератора. Для этого собираю 2 таймера в один, и по событию переполнения RTC выпорлняю захват счетчика. При этом если я захват делаю обычный, то все работает нормально. А вот если делаю частотный (т.е. после захвата счетчик должен начать счет с нуля)- захвата не происходит, по крайней мере, не вызывается прерывание. Понятно, можно поправить вручную, но коль скоро я сейчас занимаюсь тупо изучением новых девайсов, хотелось бы все таки понять, что к чему. Первая мысль - очередной глюк, вроде бы не описанный... Может, у кого есть другое объяснение.
Итак:
void InitFrMeterTimer()
{
EVSYS.CH1MUX = EVSYS_CHMUX_TCC1_OVF_gc;
EVSYS.CH0MUX = EVSYS_CHMUX_RTC_OVF_gc;
TCC1.CTRLD = TC_EVACT_CAPT_gc| TC_EVSEL_CH0_gc;
TCC1.CTRLB = TC0_CCAEN_bm | TC_WGMODE_NORMAL_gc;
TCC1.CTRLA = TC_CLKSEL_DIV1_gc;
TCD1.CTRLD = TC_EVACT_CAPT_gc | TC_EVSEL_CH0_gc | TC1_EVDLY_bm;
TCD1.CTRLB = TC0_CCAEN_bm | TC_WGMODE_NORMAL_gc;
TCD1.CTRLA = TC_CLKSEL_EVCH1_gc;
TC1_SetCCAIntLevel( &TCC1, TC_CCAINTLVL_LO_gc );
PMIC.CTRL |= PMIC_LOLVLEN_bm;
}
Такой код инициализации таймера срабатывает и раз в секунду имею прерывание по захвату, а такой код - не работает:
void InitFrMeterTimer()
{
EVSYS.CH1MUX = EVSYS_CHMUX_TCC1_OVF_gc;
EVSYS.CH0MUX = EVSYS_CHMUX_RTC_OVF_gc;
TCC1.CTRLD = TC_EVACT_FRW_gc| TC_EVSEL_CH0_gc;
TCC1.CTRLB = TC0_CCAEN_bm | TC_WGMODE_NORMAL_gc;
TCC1.CTRLA = TC_CLKSEL_DIV1_gc;
TCD1.CTRLD = TC_EVACT_FRW_gc | TC_EVSEL_CH0_gc | TC1_EVDLY_bm;
TCD1.CTRLB = TC0_CCAEN_bm | TC_WGMODE_NORMAL_gc;
TCD1.CTRLA = TC_CLKSEL_EVCH1_gc;
TC1_SetCCAIntLevel( &TCC1, TC_CCAINTLVL_LO_gc );
PMIC.CTRL |= PMIC_LOLVLEN_bm;
}
ATXMEGA: Не срабатывает Frequency Capture по событию
-
Верещагин
- Открыл глаза
- Сообщения: 41
- Зарегистрирован: Ср ноя 14, 2007 01:02:51
- Откуда: Москва
- Контактная информация:
ATXMEGA: Не срабатывает Frequency Capture по событию
Алексей Верещагин
- Реклама