semi working timer for skipping back porch
This commit is contained in:
parent
48da25958e
commit
2abac03779
2
const.h
2
const.h
@ -1,4 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define VERTICAL_OFFSET 30
|
#define VERTICAL_OFFSET 30
|
||||||
#define HORIZONTAL_OFFSET_CYCLE 56
|
#define HORIZONTAL_OFFSET 3
|
||||||
|
61
main.S
61
main.S
@ -30,6 +30,19 @@ main:
|
|||||||
ldi r16, 0x3 ; external interrupt 0 and 1, mask enable
|
ldi r16, 0x3 ; external interrupt 0 and 1, mask enable
|
||||||
sts EIMSK, r16
|
sts EIMSK, r16
|
||||||
|
|
||||||
|
ldi r16, 0x02 ; don't connect output pins to timer, CTC[1:0] mode
|
||||||
|
sts TCCR0A, r16
|
||||||
|
ldi r16, 0x03 ; CTC[2] mode, prescaler /64
|
||||||
|
sts TCCR0B, r16
|
||||||
|
|
||||||
|
; init variables
|
||||||
|
ldi r16, 0
|
||||||
|
sts frame, r16
|
||||||
|
sts frame + 1, r16
|
||||||
|
sts line + 1, r16
|
||||||
|
ldi r16, 1
|
||||||
|
sts line, r16
|
||||||
|
|
||||||
sei ; global interrupt enable
|
sei ; global interrupt enable
|
||||||
|
|
||||||
1:
|
1:
|
||||||
@ -56,14 +69,40 @@ int_horizontal_sync: ; +3
|
|||||||
enter:
|
enter:
|
||||||
; here, +23 or +24 cycles have passed since horizontal sync
|
; here, +23 or +24 cycles have passed since horizontal sync
|
||||||
; so, there are still ~168 cycles before first useful data
|
; so, there are still ~168 cycles before first useful data
|
||||||
; or 56 3-cycle instructions (HORIZONTAL_OFFSET_CYCLE)
|
ldi r31, 0
|
||||||
ldi r31, HORIZONTAL_OFFSET_CYCLE ; skip back porch
|
sts TCNT0, r31
|
||||||
1:
|
ldi r31, HORIZONTAL_OFFSET ; set counter TOP
|
||||||
dec r31
|
sts OCR0A, r31
|
||||||
brne 1b
|
|
||||||
|
|
||||||
; do things
|
ldi r31, 0x7 ; clear any pending interrupt
|
||||||
|
sts TIFR0, r31
|
||||||
|
|
||||||
|
lds r31, TIMSK0
|
||||||
|
ori r31, 0x02 ; mask enable interrupt timer A
|
||||||
|
sts TIMSK0, r31
|
||||||
|
|
||||||
|
int_horizontal_sync_end:
|
||||||
|
pop r30
|
||||||
|
pop r31
|
||||||
|
out IO(SREG), r31
|
||||||
|
pop r31
|
||||||
|
reti
|
||||||
|
|
||||||
|
.global int_timer_0
|
||||||
|
int_timer_0:
|
||||||
|
; here we are at the beginning of the visible line
|
||||||
|
push r31
|
||||||
|
in r31, IO(SREG)
|
||||||
|
push r31
|
||||||
|
|
||||||
|
; turn off interrupt
|
||||||
|
lds r31, TIMSK0
|
||||||
|
andi r31, 0xfd ; mask disable interrupt timer A
|
||||||
|
sts TIMSK0, r31
|
||||||
|
|
||||||
|
; draw things
|
||||||
lds r31, frame
|
lds r31, frame
|
||||||
|
andi r31, 0x70
|
||||||
cpi r31, 0
|
cpi r31, 0
|
||||||
breq 2f
|
breq 2f
|
||||||
1:
|
1:
|
||||||
@ -73,14 +112,20 @@ enter:
|
|||||||
|
|
||||||
sbi IO(PORTB), 4
|
sbi IO(PORTB), 4
|
||||||
nop
|
nop
|
||||||
|
cbi IO(PORTB), 4
|
||||||
nop
|
nop
|
||||||
|
sbi IO(PORTB), 4
|
||||||
nop
|
nop
|
||||||
|
cbi IO(PORTB), 4
|
||||||
nop
|
nop
|
||||||
|
sbi IO(PORTB), 4
|
||||||
|
nop
|
||||||
|
cbi IO(PORTB), 4
|
||||||
|
nop
|
||||||
|
sbi IO(PORTB), 4
|
||||||
nop
|
nop
|
||||||
cbi IO(PORTB), 4
|
cbi IO(PORTB), 4
|
||||||
|
|
||||||
int_horizontal_sync_end:
|
|
||||||
pop r30
|
|
||||||
pop r31
|
pop r31
|
||||||
out IO(SREG), r31
|
out IO(SREG), r31
|
||||||
pop r31
|
pop r31
|
||||||
|
Loading…
Reference in New Issue
Block a user