Добрый день.
Пытаюсь использовать часовой кварц подключённый к ногам Xmeg-и.
Используется внутренний 2 MHz RC генератор.
DFLL включается/отключается по 1/0 на входе PF0.
На выход PE3 выводится шим частотой 125 кГц.
CODE
#include "avr_compiler.h"
#include "clksys_driver.h"
#include "pmic_driver.h"
#include "TC_driver.h"
#include "rtc_driver.h"
#include <ioavr.h>
#include <inavr.h>
int main() {
CLKSYS_XOSC_Config(OSC_FRQRANGE_2TO9_gc, false, OSC_XOSCSEL_32KHz_gc);
// настройка выхода PE3 и таймера на вывод шим: 125 кГц
//Enable output on PE3.
PORTE.DIR = 0x08;
//Set the TC period.
TC_SetPeriod(&TCE0, 0x0F);
//Configure the TC for single slope mode.
TC0_ConfigWGM(&TCE0, TC_WGMODE_SS_gc);
//Enable Compare channel A.
TC0_EnableCCChannels(&TCE0, TC0_CCDEN_bm);
//Start timer by selecting a clock source.
TC0_ConfigClockSource(&TCE0, TC_CLKSEL_DIV1_gc);
//Output new compare value.
TC_SetCompareD(&TCE0, 8);
// настройка RTC от часового кварца
volatile uint8_t * p;
p = &CLK.RTCCTRL;
*p = CLK_RTCSRC_TOSC32_gc | CLK_RTCEN_bm;
// RTC var 0
//Configure RTC period to 1 second.
//CLKSYS_RTC_ClockSource_Enable(CLK_RTCSRC_TOSC32_gc);
RTC_Initialize(1023, 0x0000, 0x0000, RTC_PRESCALER_DIV1_gc);
RTC_Initialize(RTC_CYCLES_1S - 1, 0x0000, 0x0000, RTC_PRESCALER_DIV1_gc);
RTC_SetIntLevels(RTC_OVFINTLVL_MED_gc, RTC_COMPINTLVL_OFF_gc);
PMIC.CTRL |= PMIC_MEDLVLEN_bm;
sei();
}
unsigned char CorrentEnableState=0;
#pragma vector = RTC_OVF_vect
__interrupt void RTCOverflowISR()
{
if (CorrentEnableState) {
if ((PORTF.IN&1)==0) {// выключение коррекции по 0 на входе PF0
CorrentEnableState=0;
CLKSYS_AutoCalibration_Disable(DFLLRC2M);
}
}
else {
if (PORTF.IN&1) {// включение коррекции по 1 на входе PF0
CorrentEnableState=1;
CLKSYS_AutoCalibration_Enable(OSC_RC2MCREF_bm, true);
}
}
}
подача 0/1 не влияет на выходную частоту шима (получалась 126,2 кГц), т.е. подстройка не работает. В чём может быть дело?
Спасибо.
Сообщение отредактировал IgorKossak - Aug 29 2011, 19:30
Причина редактирования: [codebox]