Beruflich Dokumente
Kultur Dokumente
;
; K21 CPU PROM VER: Scifer2 1.114 for HEEPS-E detector
; based on
; K21 CPU PROM VER: ROPA 0.105 for HEEPS-E detector
; based on
; K21 CPU PROM VER: Cascades 0.99 for HEEPS-E detector
; for Cascades Box 2 Tray 2 - K21_IC1 on 21_34_72 board
; does NOT have code to drive deflectable aperture -- that will go in the K72 CPU
;
;Scifer2 HE soldered in flight version is v1.113
;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 2
;* oversampled x2
IF (DO32BINS)
;PAD8 EQU 1
PAD8 EQU 0
ELSE ;IF (DO32BINS)
;PAD8 EQU 1
PAD8 EQU 0
ENDIF ;IF (DO32BINS)
;ORG_ECHO EQU 0
ORG_ECHO EQU 1
TWO6 EQU 0
TWO5 EQU 32
TWO4 EQU 0
; PORT USAGE
; P0 FIFO output
; P1 BNn input
; P2 DAC output - K21
; P3 single bit IO
; IO BITS
TST BIT P3.0
MAJF BIT P3.1
PPS1 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
FLAG EQU R7
IF (OVERSAMPLE)
SKIP:
DS 1
ENDIF
ORG 40H ;IMAGE BINS. MUST BE AT 40H FOR HARDWARE
BIN0: DS 1
BIN1: DS 14
BIN15: DS 1
BIN16: DS 3
BIN19: DS 1
BIN20: DS 11
BIN31: DS 1 ;USED FOR TOTAL COUNTS
BIN32: DS 7
BIN39: DS 1
BIN40: DS 24
;ASEM will object to this, no problem: scf2_he.asm(164): segment limit exceeded
BIN64: DS 0
; ---------------------------------
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
; ---------------------------------
IF (DO32BINS)
MOV R0,#BIN0
ELSE
MOV R0,#BIN1
ENDIF ;IF (DO32BINS)
IF (SKIP_TWO)
INC R0
ENDIF ;IF (SKIP_TWO)
;-------------------------------------------------------
OK:
INC @R0 ;1/2us COUNT EVENT
IF (DOHET)
IF (DO32BINS)
MOV R0,#BIN31
CJNE @R0,#255,OK2 ;1us CHECK FOR WRAP
JMP WT
OK2:
INC @R0 ;1/2us COUNT TOTAL COUNTS
ENDIF ;DO32BINS
ELSE ;IF (DOHET)
IF (DO32BINS)
IF (ECHOTWICE)
MOV A,SWP ;1/2 uS
MOV R0,#BIN31
MOV @R0,A
ENDIF ;IF (ECHOTWICE)
ENDIF ;IF (DO32BINS)
ENDIF ;IF (DOHET)
WT:
IF (SYNC1PPS)
JB PPS1,SWEEPSYNC
MOV FLAG,#0
WT_FOO:
ENDIF ;IF (SYNC1PPS)
IF (TWO4)
; mask out high bits
ANL A,#3FH ;1/2us 1.113 -> 1.114
CLR C ;1/2us 64 -> 32 mapping
RRC A ;1/2us shift bin number right 1 bit
ORL A,#40H ;1/2us 1.113 -> 1.114
ELSE ; IF (TWO4)
; do nothing
ENDIF ; IF (TWO4)
PROG0:
MOV A,SWP ;1/2 uS
IF (DO32BINS)
MOV R0,#BIN0
MOV @R0,A ;1uS WRITE SWP TO FIFO BIN0 (ADDR NOT USED)
IF (ORG_ECHO)
MOVX @R0,A ;1uS WRITE SWP TO FIFO BIN0 (ADDR NOT USED)
ENDIF ;ORG_ECHO
IF (ECHOTWICE)
MOV R0,#BIN31
MOV @R0,A ;WRITE SWP TO BIN31 (WILL BE WRITTEN TO FIFO IN LOOP, BELOW)
ENDIF ;ECHOTWICE
ENDIF ;DO32BINS
MOV SP,#IGNORE ;1uS PLACE TO PUT PC IF INTERRUPTED
MOV P2,A ;OUTPUT SWEEP STEP TO DAC
; ADD A,#INC_HE
IF (OVERSAMPLE)
DJNZ SKIP,SKIPIT
ADD A,#INC_HE
MOV SKIP,#SAMPLE
SKIPIT:
ELSE ;IF (OVERSAMPLE)
ADD A,#INC_HE
ENDIF ;IF (OVERSAMPLE)
;
; 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_HE,FOO0 ;otherwise do restart of sweep when end value seen
MOV A,#START_HE ;RESET VALUE IF OVERFLOW
FOO0:
MOV SWP,A ;UPDATE SWEEP
JB TST,TST0
IF (ORG_ECHO)
MOV R0,#BIN1 ;OUTPUT BINS 1..30/31 TO FIFO
ELSE
IF (DO32BINS)
MOV R0,#BIN0 ;OUTPUT BINS 0..31 TO FIFO
ELSE
MOV R0,#BIN1 ;OUTPUT BINS 1..30 TO FIFO
ENDIF ;DO32BINS
ENDIF ;ORG_ECHO
LP0:
MOV A,@R0 ;GET BIN
MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED)
CLR A
MOV @R0,A ;CLEAR BIN
INC R0
;IF (DO32BINS)
; CJNE R0,#BIN32,LP0 ;LOOP FOR 31 BINS
;ELSE
; CJNE R0,#BIN31,LP0 ;LOOP FOR 30 BINS
;ENDIF
IF (DO32BINS)
IF (PAD8)
CJNE R0,#BIN40,LP0 ;LOOP FOR 39 BINS; 31ST BIN IS EITHER HET OR OTHER BYTE OF TWO BYTE HET
ELSE ;IF (PAD8)
CJNE R0,#BIN32,LP0 ;LOOP FOR 31 BINS; 31ST BIN IS EITHER HET OR OTHER BYTE OF TWO BYTE HET
ENDIF ;IF (PAD8)
ELSE ;IF (DO32BINS)
IF (PAD8)
CJNE R0,#BIN39,LP0 ;LOOP FOR 38 BINS
ELSE ;IF (PAD8)
CJNE R0,#BIN31,LP0 ;LOOP FOR 30 BINS
ENDIF ;IF (PAD8)
ENDIF ;IF (DO32BINS)
SETB ACK ;MAKE SURE ACK- IS HI
JMP WT
IF (ORG_ECHO)
MOV R0,#BIN1 ;OUTPUT BINS 1..30/31 TO FIFO
ELSE
IF (DO32BINS)
MOV R0,#BIN0 ;OUTPUT BINS 0..31 TO FIFO
ELSE
MOV R0,#BIN1 ;OUTPUT BINS 1..30 TO FIFO
ENDIF ;DO32BINS
ENDIF ;ORG_ECHO
TLP0:
MOV A,@R0 ;GET BIN
MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED)
MOV A,R1
MOV @R0,A ;SET BIN TO RAMP VALUE
ADD A,#7
MOV R1,A ;BUMP RAMP BY 7
INC R0
IF (DO32BINS)
IF (PAD8)
CJNE R0,#BIN40,TLP0 ;LOOP FOR 39 BINS; 31ST BIN IS EITHER HET OR OTHER BYTE OF TWO BYTE HET
ELSE ;IF (PAD8)
CJNE R0,#BIN32,TLP0 ;LOOP FOR 31 BINS; 31ST BIN IS EITHER HET OR OTHER BYTE OF TWO BYTE HET
ENDIF ;IF (PAD8)
ELSE ;IF (DO32BINS)
IF (PAD8)
CJNE R0,#BIN39,TLP0 ;LOOP FOR 38 BINS
ELSE ;IF (PAD8)
CJNE R0,#BIN31,TLP0 ;LOOP FOR 30 BINS
ENDIF ;IF (PAD8)
ENDIF ;IF (DO32BINS)
ROM_ID:
DB 'K21 CPU PROM VER: Scifer2 1.114 for HEEPS-E; '
IF (OVERSAMPLE)
SWEEPDATA:
DB 'HEEPS E 32K* 32bins 2mS/Step 32Steps 64mS/sweep; '
DB 'Step energy sweep every SECOND set of bins '
;* oversampled x2
;ELSE ;IF (OVERSAMPLE)
;SWEEPDATA:
; DB 'HEEPS E 32K 32bins 1mS/Step 32Steps 32mS/sweep; '
; 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 (DO32BINS)
IF (PAD8)
DB '40 bins output; '
ELSE ;IF (PAD8)
DB '32 bins output; '
ENDIF ;IF (PAD8)
IF (DOHET)
DB 'pseudo-total counts in bin 31; '
ELSE ;IF (DOHET)
DB 'nothing in bin 31; '
ENDIF ;IF (DOHET)
ELSE ;IF (DO32BINS)
IF (PAD8)
DB '38 bins output; '
ELSE ;IF (PAD8)
DB '30 bins output; '
ENDIF ;IF (PAD8)
ENDIF ;IF (DO32BINS)
;IF (PARANOID)
; DB 'PARANOID; '
;ELSE
DB 'NOT_PARANOID; '
;ENDIF ;IF (PARANOID)
END