mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:33:12 -06:00
Fix CTC Support
This commit is contained in:
@@ -992,8 +992,10 @@ PSCNX .EQU $ + 1
|
||||
; DETERMINE WHICH CHANNEL CAUSED AN INTERRUPT.
|
||||
;
|
||||
#IF (INTMODE == 2)
|
||||
LD HL,INT_TIMER
|
||||
LD (HBX_IVT),HL
|
||||
;
|
||||
; TIMER INTERRUPT IS ON CTCB, VECTOR IS SECOND IVT SLOT
|
||||
LD HL,INT_TIMER ; TIMER INT HANDLER ADR
|
||||
LD (HBX_IVT + 2),HL ; IVT SLOT 2
|
||||
;
|
||||
; CTC USES 4 CONSECUTIVE VECTOR POSITIONS, ONE FOR
|
||||
; EACH CHANNEL. BELOW WE SET THE BASE VECTOR TO THE
|
||||
@@ -1002,21 +1004,37 @@ PSCNX .EQU $ + 1
|
||||
LD A,0
|
||||
OUT (CTCBASE),A ; SETUP CTC BASE INT VECTOR
|
||||
;
|
||||
; CONFIGURE CHANNEL A FOR 50HZ PERIODIC INTERRUPTS
|
||||
; INT FREQ IS CTC CLK / PRESCALER / TIME CONSTANT
|
||||
; CTCA IS SLAVED (WIRED) TO TO CTCB TO ACT AS A PRESCALER
|
||||
; CONFIGURE CHANNEL B FOR 50HZ PERIODIC INTERRUPTS
|
||||
; CTC CLK = 921,200HZ
|
||||
; CTCA TIME CONSTANT = 256
|
||||
; CTCB TIME CONSTANT = 72
|
||||
; INT FREQ IS CTC CLK / CTCA TC / CTCB TC
|
||||
; WHICH IS 921,600HZ / 256 / 72 = 50HZ
|
||||
LD A,%10110111 ; CTC CONTROL WORD VALUE
|
||||
; |||||||+-- 0=CONTROL WORD FLAG
|
||||
LD A,%01010111 ; CTCA CONTROL WORD VALUE
|
||||
; |||||||+-- 1=CONTROL WORD FLAG
|
||||
; ||||||+--- 1=SOFTWARE RESET
|
||||
; |||||+---- 1=TIME CONSTANT FOLLOWS
|
||||
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED
|
||||
; |||+------ 1=RISING EDGE TRIGGER
|
||||
; ||+------- 1=PRESCALER OF 256
|
||||
; |+-------- 0=TIMER MODE
|
||||
; ||+------- 1=PRESCALER OF 16 (NOT USED)
|
||||
; |+-------- 1=COUNTER MODE
|
||||
; +--------- 0=NO INTERRUPTS
|
||||
OUT (CTCA),A ; SETUP CTCA
|
||||
LD A,0 ; CTCA TIMER CONSTANT = 256, 0 MEANS 256
|
||||
OUT (CTCA),A ; SETUP CTCA TIMER CONSTANT
|
||||
LD A,%11010111 ; CTCB CONTROL WORD VALUE
|
||||
; |||||||+-- 1=CONTROL WORD FLAG
|
||||
; ||||||+--- 1=SOFTWARE RESET
|
||||
; |||||+---- 1=TIME CONSTANT FOLLOWS
|
||||
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED
|
||||
; |||+------ 1=RISING EDGE TRIGGER
|
||||
; ||+------- 1=PRESCALER OF 16 (NOT USED)
|
||||
; |+-------- 1=COUNTER MODE
|
||||
; +--------- 1=ENABLE INTERRUPTS
|
||||
OUT (CTCA),A ; SETUP CTC CHANNEL A
|
||||
LD A,72 ; TIMER CONSTANT FOR 50HZ
|
||||
OUT (CTCA),A ; SETUP CTC CHANNEL A TIMER CONSTANT
|
||||
OUT (CTCB),A ; SETUP CTCB
|
||||
LD A,72 ; CTCB TIMER CONSTANT = 72
|
||||
OUT (CTCB),A ; SETUP CTCB TIMER CONSTANT
|
||||
#ENDIF
|
||||
;
|
||||
#ENDIF
|
||||
@@ -1029,8 +1047,10 @@ PSCNX .EQU $ + 1
|
||||
; DETERMINE WHICH CHANNEL CAUSED AN INTERRUPT.
|
||||
;
|
||||
#IF (INTMODE == 2)
|
||||
LD HL,INT_TIMER
|
||||
LD (HBX_IVT + IVT_TIM0),HL
|
||||
;
|
||||
; TIMER INTERRUPT IS ON CTCD, VECTOR IS FOURTH IVT SLOT
|
||||
LD HL,INT_TIMER ; TIMER INT HANDLER ADR
|
||||
LD (HBX_IVT + 6),HL ; IVT SLOT 4
|
||||
;
|
||||
; CTC USES 4 CONSECUTIVE VECTOR POSITIONS, ONE FOR
|
||||
; EACH CHANNEL. BELOW WE SET THE BASE VECTOR TO THE
|
||||
@@ -1039,28 +1059,40 @@ PSCNX .EQU $ + 1
|
||||
LD A,0
|
||||
OUT (CTCBASE),A ; SETUP CTC BASE INT VECTOR
|
||||
;
|
||||
; CONFIGURE CHANNEL C FOR 50HZ PERIODIC INTERRUPTS
|
||||
; INT FREQ IS CTC CLK / PRESCALER / TIME CONSTANT
|
||||
; CTCC IS SLAVED (WIRED) TO TO CTCD TO ACT AS A PRESCALER
|
||||
; CONFIGURE CHANNEL D FOR 50HZ PERIODIC INTERRUPTS
|
||||
; CTC CLK = 921,200HZ
|
||||
; CTCC TIME CONSTANT = 256
|
||||
; CTCD TIME CONSTANT = 72
|
||||
; INT FREQ IS CTC CLK / CTCC TC / CTCD TC
|
||||
; WHICH IS 921,600HZ / 256 / 72 = 50HZ
|
||||
LD A,%10110111 ; CTC CONTROL WORD VALUE
|
||||
; |||||||+-- 0=CONTROL WORD FLAG
|
||||
LD A,%01010111 ; CTCC CONTROL WORD VALUE
|
||||
; |||||||+-- 1=CONTROL WORD FLAG
|
||||
; ||||||+--- 1=SOFTWARE RESET
|
||||
; |||||+---- 1=TIME CONSTANT FOLLOWS
|
||||
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED
|
||||
; |||+------ 1=RISING EDGE TRIGGER
|
||||
; ||+------- 1=PRESCALER OF 256
|
||||
; |+-------- 0=TIMER MODE
|
||||
; ||+------- 1=PRESCALER OF 16 (NOT USED)
|
||||
; |+-------- 1=COUNTER MODE
|
||||
; +--------- 0=NO INTERRUPTS
|
||||
OUT (CTCC),A ; SETUP CTCC
|
||||
LD A,0 ; CTCC TIMER CONSTANT = 256, 0 MEANS 256
|
||||
OUT (CTCC),A ; SETUP CTCC TIMER CONSTANT
|
||||
LD A,%11010111 ; CTCD CONTROL WORD VALUE
|
||||
; |||||||+-- 1=CONTROL WORD FLAG
|
||||
; ||||||+--- 1=SOFTWARE RESET
|
||||
; |||||+---- 1=TIME CONSTANT FOLLOWS
|
||||
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED
|
||||
; |||+------ 1=RISING EDGE TRIGGER
|
||||
; ||+------- 1=PRESCALER OF 16 (NOT USED)
|
||||
; |+-------- 1=COUNTER MODE
|
||||
; +--------- 1=ENABLE INTERRUPTS
|
||||
OUT (CTCC),A ; SETUP CTC CHANNEL C
|
||||
LD A,72 ; TIMER CONSTANT FOR 50HZ
|
||||
OUT (CTCC),A ; SETUP CTC CHANNEL C TIMER CONSTANT
|
||||
OUT (CTCD),A ; SETUP CTCD
|
||||
LD A,72 ; CTCD TIMER CONSTANT = 72
|
||||
OUT (CTCD),A ; SETUP CTCD TIMER CONSTANT
|
||||
#ENDIF
|
||||
;
|
||||
#ENDIF
|
||||
|
||||
|
||||
|
||||
|
||||
;
|
||||
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RC180))
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user