Возникла проблема с принудительной установкой RTC.CNT
При выполнении данного кода:
Код
RTC.PER = 34200;
CLK.RTCCTRL = CLK_RTCEN_bm + CLK_RTCSRC_RCOSC_gc;
RTC.INTCTRL = RTC_OVFINTLVL0_bm;
RTC.CTRL = RTC_PRESCALER_gm; // 1024 = 1s.
while( !(RTC_STATUS & RTC_SYNCBUSY_bm) );
RTC.CNTL = 0x11;
RTC.CNTH = 0x22;
TCC0.PER = 10000; // Delay ~1s.
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
while(TCC0.CTRLA)
{
asm("NOP");
}
sendCharE0(RTC.CNTH); // UART
sendCharE0(RTC.CNTL);
CLK.RTCCTRL = CLK_RTCEN_bm + CLK_RTCSRC_RCOSC_gc;
RTC.INTCTRL = RTC_OVFINTLVL0_bm;
RTC.CTRL = RTC_PRESCALER_gm; // 1024 = 1s.
while( !(RTC_STATUS & RTC_SYNCBUSY_bm) );
RTC.CNTL = 0x11;
RTC.CNTH = 0x22;
TCC0.PER = 10000; // Delay ~1s.
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
while(TCC0.CTRLA)
{
asm("NOP");
}
sendCharE0(RTC.CNTH); // UART
sendCharE0(RTC.CNTL);
Если запрашиваю значение RTC.CNT через некоторый промежуток времени, то вижу что RTC считает все с 0x0000(0x0001, 0x0002 и.т.д.)
Если приведенный выше код, выполняю два раза:
Код
// 1
RTC.PER = 34200;
CLK.RTCCTRL = CLK_RTCEN_bm + CLK_RTCSRC_RCOSC_gc;
RTC.INTCTRL = RTC_OVFINTLVL0_bm;
RTC.CTRL = RTC_PRESCALER_gm; // 1024 = 1s.
while( !(RTC_STATUS & RTC_SYNCBUSY_bm) );
RTC.CNTL = 0x11;
RTC.CNTH = 0x22;
TCC0.PER = 10000; // Delay ~1s.
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
while(TCC0.CTRLA)
{
asm("NOP");
}
// 2
RTC.PER = 34200;
CLK.RTCCTRL = CLK_RTCEN_bm + CLK_RTCSRC_RCOSC_gc;
RTC.INTCTRL = RTC_OVFINTLVL0_bm;
RTC.CTRL = RTC_PRESCALER_gm; // 1024 = 1s.
while( !(RTC_STATUS & RTC_SYNCBUSY_bm) );
RTC.CNTL = 0x11;
RTC.CNTH = 0x22;
TCC0.PER = 10000; // Delay ~1s.
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
while(TCC0.CTRLA)
{
asm("NOP");
}
sendCharE0(RTC.CNTH); // UART
sendCharE0(RTC.CNTL);
RTC.PER = 34200;
CLK.RTCCTRL = CLK_RTCEN_bm + CLK_RTCSRC_RCOSC_gc;
RTC.INTCTRL = RTC_OVFINTLVL0_bm;
RTC.CTRL = RTC_PRESCALER_gm; // 1024 = 1s.
while( !(RTC_STATUS & RTC_SYNCBUSY_bm) );
RTC.CNTL = 0x11;
RTC.CNTH = 0x22;
TCC0.PER = 10000; // Delay ~1s.
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
while(TCC0.CTRLA)
{
asm("NOP");
}
// 2
RTC.PER = 34200;
CLK.RTCCTRL = CLK_RTCEN_bm + CLK_RTCSRC_RCOSC_gc;
RTC.INTCTRL = RTC_OVFINTLVL0_bm;
RTC.CTRL = RTC_PRESCALER_gm; // 1024 = 1s.
while( !(RTC_STATUS & RTC_SYNCBUSY_bm) );
RTC.CNTL = 0x11;
RTC.CNTH = 0x22;
TCC0.PER = 10000; // Delay ~1s.
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;
while(TCC0.CTRLA)
{
asm("NOP");
}
sendCharE0(RTC.CNTH); // UART
sendCharE0(RTC.CNTL);
То уже все выставляется как я и планировал 0x2211, 0x2212 и.т.д.
Почему так? %)