Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
102
; based on
; ROPA K21 CPU PROM for HEEPS-I ver 0.089
;
;Scifer2 Bp and BO soldered in flight versions are v1.101
;SERSIO values:
;detector readout angle step steps sweep
; rate bins time time
;HEEPS T1 32K 64 2ms 64 128ms K21 - new prog 1
;HEEPS T2 32K 64 2ms 64 128ms K21 - new prog 1
;HEEPS M 32K 64 2ms 32 64ms K21 - new prog 3
;HEEPS E 16K 32 2ms 64 128ms K21 - prog 0
;BEEPS p 4K 16 4ms 64 256ms K21 - prog 2 modified
;BEEPS O 4K 16 4ms (64) 256ms K20 - prog 2 modified (sweep generated for BEEPS p is shared by
BEEPS O)
;Scifer2 values:
;detector readout angle step steps sweep
; rate bins time time
;HEEPS E 32K* 32 2ms 32 32ms based on K21 - prog 0
;HEEPS T 32K 64 2ms 64 128ms K21 - new prog 1
;HEEPS M 32K 64 2ms 32 64ms K21 - new prog 3
;BEEPS p 32K** 16 2ms 64 64ms K21 - prog 2 modified
;BEEPS O 32K** 16 2ms (64) 64ms K20 - prog 2 modified (sweep generated for BEEPS p is shared by
BEEPS O)
;* oversampled x2
;** oversampled x4
OVERSAMPLE EQU 1
;OVERSAMPLE EQU 0
SAMPLE EQU 4
;** OVERSAMPLED X4
OLDSTYLE SET 1
NEWSTYLE SET 0
;OLDSTYLE SET 0
;NEWSTYLE SET 1
IF (OLDSTYLE)
NEWSTYLE SET 0
ELSE
IF (NEWSTYLE)
ELSE
OLDSTYLE SET 1 ;IF NEITHER IS SET, SET OLDSTYLE ON
ENDIF ;IF (NEWSTYLE)
ENDIF ;IF (OLDSTYLE)
;; IF 64 BINS
;TWO6 EQU 64
;TWO5 EQU 0
;TWO4 EQU 0
;;ELSE IF 32 BINS
;TWO6 EQU 0
;TWO5 EQU 32
;TWO4 EQU 0
;ELSE IF 16 BINS
TWO6 EQU 0
TWO5 EQU 0
TWO4 EQU 16
;ENDIF
;PAD EQU 1
PAD EQU 0
; PORT USAGE
; P0 FIFO output
; P1 BNn input
; P2 DAC output - K21 (not used on K20)
; P3 single bit IO
; IO BITS
TST BIT P3.0
; BIT P3.1
; BIT P3.2
;INT1 BIT P3.3
; BIT P3.4 ;COUNTER INPUT (NOT USED)
EVENT BIT P3.5
;WR BIT P3.6 ;LOAD FIFO
ACK BIT P3.7
;INTERNAL RAM
;directive added to make MetaLink ASM51.EXE happy:
DSEG ;directly addressable Data memory SEGment definition
IF (OVERSAMPLE)
SKIP:
DS 1
ENDIF
; ---------------------------------
ORG 13H
; External INT 1 vectors to here, so each external INT 1 will jump via this
; dispatch code to the appropriate PROGn
INTV1:
MOV SP,#VECH ;1us JUMP INDIRECT THRU VEC BY LOADING SP
RETI ;1us AND DOING A RET
; ---------------------------------
MOV R0,#BIN0
CLR A
IF (OVERSAMPLE)
MOV SKIP,#SAMPLE
ENDIF
IF (TWO6)
CJNE R0,#BIN64,LPRESET2 ;LOOP FOR 64 BINS
ELSE
IF (TWO5)
IF (PAD)
CJNE R0,#BIN40,LPRESET2 ;LOOP FOR 40 BINS
ELSE ;IF (PAD)
CJNE R0,#BIN32,LPRESET2 ;LOOP FOR 32 BINS
ENDIF ;IF (PAD)
ELSE
IF (TWO4)
IF (PAD)
CJNE R0,#BIN20,LPRESET2 ;LOOP FOR 20 BINS
ELSE ;IF (PAD)
CJNE R0,#BIN16,LPRESET2 ;LOOP FOR 16 BINS
ENDIF ;IF (PAD)
ENDIF ;IF (TWO4)
ENDIF ;IF (TWO5)
ENDIF ;IF (TWO6)
;----------------------------------- END -- SET DATA TO TEST RAMP
;-------------------------------------------------------
OK:
INC @R0 ;1/2us COUNT EVENT
WT:
JNB EVENT,WT ;1us WAIT FOR: NEXT EVENT OR INTR
MOV A,P1 ;GET BIN # INTO A
;; The AND and the OR following prevent unused input bits from being seen. While hardware should force these bits to
proper values,
;; damage to the internal pull-ups of the chips can prevent pins that should be high from being high.
;;IF (METANOID)
;;; ANL A,#7FH ;64 BINS ;anding this bit out prior to setting it is unnecessary
;; ORL A,#40H
;;ENDIF ;IF (METANOID)
;-------------------------------------------------------
ORG 80H
;detector readout angle step steps sweep
; rate bins time time
;HEEPS T 32K 64 2ms 64 128ms K21 - new prog 1
;START_HT EQU 195
;INC_HT EQU -3
;LAST_HT EQU 6
;END_HT EQU 3 ;3 = 6 + -3 == LAST_HT + INC_HT
PROG0:
MOV SP,#IGNORE ;PLACE TO PUT PC IF INTERUPTED
MOV A,BIN0 ;1/2us
MOVX @R0,A ;1us WRITE BIN0 TO FIFO (ADDR NOT USED)
MOV BIN0,#0 ;1us CLEAR BIN0
MOV A,SWP
MOV P2,A ;OUTPUT SWEEP STEP TO DAC
; ADD A,#INC_HT
IF (OVERSAMPLE)
DJNZ SKIP,SKIPIT
ADD A,#INC_HT
MOV SKIP,#SAMPLE
SKIPIT:
ELSE
ADD A,#INC_HT
ENDIF
;
; since this next is an EQUAL compare, and the increment is not required to
; be +1 or -1, the starting value needs to be carefully chosen both for use
; here in restarting the next sweep and initially on RESET
;
CJNE A,#END_HT,FOO0 ;otherwise do restart of sweep when end value seen
MOV A,#START_HT ;RESET VALUE IF OVERFLOW
FOO0:
MOV SWP,A ;UPDATE SWEEP
JB TST,TST0 ; go do test ramp if TST bit set
;IF (PARANOID)
; JMP RESET ;should never get here, so if we do RESET
;ENDIF ;IF (PARANOID)
ROM_ID:
DB 'K21 CPU PROM VER: Scifer2 1.102 for BEEPS-T; '
SWEEPDATA:
IF (OVERSAMPLE)
DB 'BEEPS T 32K** 16bins 2ms/Step 64Steps 128ms/sweep; '
;ELSE
; DB 'BEEPS T 32K 16bins 1/2ms/Step 64Steps 32ms/sweep; '
ENDIF ;IF (OVERSAMPLE)
IF (OVERSAMPLE)
DB 'Step energy sweep every FOURTH set of bins '
;** oversampled x4
ELSE
DB 'Step energy sweep every set of bins '
ENDIF ;IF (OVERSAMPLE)
OPTIONS:
IF (FAST_OUT)
DB 'Fast_Out; '
ELSE
DB 'NO_Fast_Out; '
ENDIF ;IF (FAST_OUT)
IF (SKIP_TWO)
DB 'on RESET skip two words out; '
ELSE ;IF (SKIP_TWO)
IF (SKIP_ONE)
DB 'on RESET skip ONE word out; '
ELSE ;IF (SKIP_ONE)
DB 'on RESET DO NOT Skip ANY words out; '
ENDIF ;IF (SKIP_ONE)
ENDIF ;IF (SKIP_TWO)
IF (SYNC1PPS)
DB 'force energy sweep to reset at 1PPS; '
ELSE
DB 'NO_SYNC1PPS; '
ENDIF ;IF (SYNC1PPS)
IF (TWO6)
DB '64 bins output; '
ELSE
IF (TWO5)
IF (PAD)
DB '40 bins output; '
ELSE ;IF (PAD)
DB '32 bins output; '
ENDIF ;IF (PAD)
ELSE
IF (TWO4)
IF (PAD)
DB '20 bins output; '
ELSE ;IF (PAD)
DB '16 bins output; '
ENDIF ;IF (PAD)
ENDIF ;IF (TWO4)
ENDIF ;IF (TWO5)
ENDIF ;IF (TWO6)
IF (OLDSTYLE)
DB 'OLDSTYLE ack handling; '
ELSE ;IF (OLDSTYLE)
IF (NEWSTYLE)
DB 'NEWSTYLE ack handling; '
ELSE ;IF (NEWSTYLE)
DB 'NOT_OLDSTYLE ack handling; '
ENDIF ;IF (NEWSTYLE)
ENDIF ;IF (OLDSTYLE)
IF (PARANOID)
DB 'PARANOID; '
ELSE
DB 'NOT_PARANOID; '
ENDIF ;IF (PARANOID)
END