MCU is using 32768Hz (nominal) square wave signal to clock RTC.
I've also created a timer to read RTC every second. The question is, what are those 131072 tick jumps occurring every fifth read? Why subsec value is jumping? Or is it 48MHz xtal / HF clock?
See log below
read every sec
fieds: SEC, SUBSEC, prev_subsec-current_subsec, timer value when entering callback, timer value where AON_RTC:SEC was read in callback
t_iv is timer ticks previous_read - current_read
27 01960000 ss_iv=131072 t_iv=-3 000000ad 000000c5
28 01960000 ss_iv=-1 t_iv=3 000000b0 000000c8
29 01960000 ss_iv=-1 t_iv=2 000000b2 000000ca
2a 01960000 ss_iv=-1 t_iv=-6 000000ad 000000c5
2b 01960000 ss_iv=-1 t_iv=4 000000b1 000000c9
2c 01980000 ss_iv=131072 t_iv=-3 000000af 000000c7
2d 01980000 ss_iv=-1 t_iv=4 000000b3 000000cb
2e 01980000 ss_iv=-1 t_iv=-5 000000af 000000c7
2f 01980000 ss_iv=-1 t_iv=2 000000b1 000000c9
30 01980000 ss_iv=-1 t_iv=-3 000000af 000000c7
31 019a0000 ss_iv=131072 t_iv=-3 000000ad 000000c5
32 019a0000 ss_iv=-1 t_iv=4 000000b1 000000c9
33 019a0000 ss_iv=-1 t_iv=-1 000000b1 000000c9
34 019a0000 ss_iv=-1 t_iv=-1 000000b1 000000c9
35 019a0000 ss_iv=-1 t_iv=-3 000000af 000000c7
36 019c0000 ss_iv=131072 t_iv=-1 000000af 000000c7
read every 5 sec, now only those 131072 logged
41 01a20000 ss_iv=131072 t_iv=1 000000b2 000000ca
46 01a40000 ss_iv=131072 t_iv=-4 000000af 000000c7
4b 01a60000 ss_iv=131072 t_iv=3 000000b2 000000ca
50 01a80000 ss_iv=131072 t_iv=-1 000000b2 000000ca
55 01aa0000 ss_iv=131072 t_iv=-4 000000af 000000c7
5a 01ac0000 ss_iv=131072 t_iv=-1 000000af 000000c7
5f 01ae0000 ss_iv=131072 t_iv=2 000000b1 000000c9
64 01b00000 ss_iv=131072 t_iv=-3 000000af 000000c7
69 01b20000 ss_iv=131072 t_iv=1 000000b0 000000c8
read every sec, lf clock is using internal rc here, still there are those jumps
16 26ec0000 ss_iv=28573696 t_iv=-5 000000ad 000000c5
17 28a00000 ss_iv=28573696 t_iv=2 000000af 000000c7
18 2a540000 ss_iv=28573696 t_iv=-1 000000af 000000c7
19 2c080000 ss_iv=28573696 t_iv=-1 000000af 000000c7
1a 2dbe0000 ss_iv=28704768 t_iv=-1 000000af 000000c7 <<
1b 2f720000 ss_iv=28573696 t_iv=2 000000b1 000000c9
1c 31260000 ss_iv=28573696 t_iv=-1 000000b1 000000c9
1d 32da0000 ss_iv=28573696 t_iv=-3 000000af 000000c7
And here are interrupt inits and callback. Logs are printed in main loop.
void ppx_timeout(GPTimerCC26XX_Handle handle, GPTimerCC26XX_IntMask interruptMask)
{
static uintptr_t key;
static uint32_t s1;
key = HwiP_disable();
p_tv0 = HWREG(GPT2_BASE + GPT_O_TAV);
do {
p_sec = HWREG(AON_RTC_BASE + AON_RTC_O_SEC);
p_tv1 = HWREG(GPT2_BASE + GPT_O_TAV);
p_subsec = HWREG(AON_RTC_BASE + AON_RTC_O_SUBSEC);
s1 = HWREG(AON_RTC_BASE + AON_RTC_O_SEC);
} while(p_sec != s1);
p_update = 1;
HwiP_restore(key);
}
static void start_tmr_ppx()
{
GPTimerCC26XX_Params ppx_params;
GPTimerCC26XX_Params_init(&ppx_params);
ppx_params.width = GPT_CONFIG_32BIT;
ppx_params.mode = GPT_MODE_PERIODIC_UP; //GPT_MODE_PERIODIC_UP, GPT_MODE_ONESHOT_UP
ppx_params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;
ppx_tmr = GPTimerCC26XX_open(CC1352R1_LAUNCHXL_GPTIMER2A, &ppx_params);
GPTimerCC26XX_setLoadValue(ppx_tmr, 0x2DC6BFF); //1.0s
GPTimerCC26XX_start(ppx_tmr);
}