I had this working on this same PCB (though I get the same behaviour on 2 different PCB's so I don't suspect this is a h/w issue). But something has changed and I don't get the interrupt firing for the TCA0 overflow anymore. And I can't figure it out.
I have gone through the Introduction to Attiny TCA0 about 100 times and I believe I have everything set up correctly.
The project uses Atmel Start to configure the I/O and general project structure. While I have added my own code, all the code other than very basic code to get timer to run again has been commented out. From the debugger I can see that the TCA0.SINGLE.CNT register increments and when it gets to the TCA0.SINGLE.PER register value (0x3E8) then the OVF flag is set and the CNT register is reset to 0x0 and starts again. That is all good. But the interrupt will NOT fire.
I have confirmed that the global interrupt enable bit is set and that the TCA0.INTCTRL.OVF bit is set. I do notice that the CMPx flag bits are also set when the OVF bit is set. I don't recall seeing that before but I wasn't looking specifically for it. It sort of makes sense since the CMP registers are all at their default 0x0 value so when the CNT is reset to 0x0 the comparators would all toggle. The bits to enable the CMPx interrupts are all OFF, though as I mentioned I still see the flags being set using the debugger window.
I checked the errata and didn't see anything relevant.
Atmel Studio 7.0.2397 with its default compiler
Here is the code. Atmel Start has timer configured with enable already set and it runs (as confirmed).
/* Initializes MCU, drivers and middleware */
// turn on global interrupts
if( TCA0.SINGLE.CNT >= 0x3D0 ) // just for debugging, same behaviour with and without this line
/* The interrupt flag has to be cleared manually */
TCA0.SINGLE.INTFLAGS = TCA_SINGLE_OVF_bm;