Har testat med Timer1, som är mindre lämplig till detta, och då fungerar det, så hanteringen av det nya interruptsystemet med vektortabell är i ordning. Givetvis använder jag rätt position i IVT, kollat femtioelva gånger. Samma sak med PIR/PIE.
Någon som har fungerande kod som initierar en av dessa timers i någon *K42 till att ge interrupts? Måste vara för *K42 eller ev, ännu nyare som har hela registerhärket. Annars ar det en bagatell att göra.
Här är testcoden jag använt i en 46K42 på labplatta med samma resultat. TMR1 funkar perfekt, TMR2 är tvärdöd. Samma med TMR4. Nog bara en bit i något obskyrt register som saknas, men har tappat skärpan och ser inte var.
Kod: Markera allt
* START TMR 2, ALL REGS IN ABANK
LOD A,#%_0000_0001 USE FOSC/4
LOD T2CLK,A
STZ T2RST A KNOWN STATE TO THIS
STZ T2TMR CLEAR COUNTER
LOD A,#128 TIMER PERIOD
LOD T2PR,A
LOD A,#%_0_011_0000 /8 PRESCALER, /1 POSTSCALER
LOD T2CON,A
LOD A,#%_101_0000
LOD T2HLT,A
SMB T2CON,7 START TIMER
* START TMR 1, ALL REGS IN ABANK
LOD A,#%_000_00001 USE FOSC/4
LOD T1CLK,A
LOD A,#%_0011_0010 /8 PRESCALER
LOD T1CON,A
STZ T1GCON A KNOWN STATE TO THESE
STZ T1GATE
SMB T1CON,0 START TIMER
.BC
LOD BS,#63
* START TMR 4, ALL REGS IN ABANK
LOD A,#%_0000_0001 USE FOSC/4
LOD T4CLK,A
STZ T4RST A KNOWN STATE TO THIS
STZ T4TMR CLEAR COUNTER
LOD A,#128 TIMER PERIOD
LOD T4PR,A
LOD A,#%_0_011_0000 /8 PRESCALER, /1 POSTSCALER
LOD T4CON,A
LOD A,#%_101_0000
LOD T4HLT,A
*SMB T2CON,7 START TIMER
LOD A,#%_1_011_0000 /8 PRESCALER, /1 POSTSCALER
LOD T4CON,A
.EC
* START INTERRUPTS
LOD BS,#PIR4/256
CLF T2IF
CLF T1IF
CLF T4IF
STZ PIR4
STZ PIR7
*SEF T2IE
*SEF T1IE
SEF T4IE
SEF GIEL
SEF GIE
JMP @
.BS 4-(@\4)\4 EVEN FOUR
****** TMR2 IRQ ROUTINE
*
TMR1IRQ
TMR2IRQ
TMR4IRQ
LOD A,#$FF DO SOMETHING VISIBLE
EOR LATD,A
LOD BS,#PIR4/256
CLF T2IF CLEAR INTFLAG
STZ PIR4
STZ PIR7
RIQ DONE