Beruflich Dokumente
Kultur Dokumente
103
; based on
; Scifer2 CPU PROM for HEEPS-M ver 1.100
; based on
; ROPA K21 CPU PROM for HEEPS-I ver 0.089
;
;Scifer2 HM soldered in flight version is v1.099
;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 1
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
ORG 8H
SWP: DS 1 ;SWEEP STEP NUMBER
VECL: DS 1
VECH: DS 1
DS 8
IGNORE: DS 3
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
IF (OLDSTYLE)
CLR ACK ;1/2us PULSE ACK- TO ENABLE NEXT EVENT
ENDIF ;IF (OLDSTYLE)
;; 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)
IF (NEWSTYLE)
; mask out high bits
ANL A,#3FH ;1/2us
ENDIF ;IF (NEWSTYLE)
IF (TWO6)
; do nothing
ELSE ;IF (TWO6)
; mask out high bits
IF (OLDSTYLE)
ANL A,#3FH ;1/2us
ENDIF ;IF (OLDSTYLE)
IF (TWO5)
CLR C ;1/2us 64 -> 32 mapping
RRC A ;1/2us shift bin number right 1 bit
ELSE ; IF (TWO5)
IF (TWO4)
CLR C ;1/2us 64 -> 32 mapping
RRC A ;1/2us shift bin number right 1 bit
CLR C ;1/2us 32 -> 16 mapping
RRC A ;1/2us shift bin number right 1 bit
ELSE ; IF (TWO4)
; do nothing
ENDIF ; IF (TWO4)
ENDIF ; IF (TWO5)
IF (OLDSTYLE)
ORL A,#40H ;1/2us
ENDIF ;IF (OLDSTYLE)
ENDIF ; IF (TWO6)
IF (NEWSTYLE)
ORL A,#40H ;1/2us
ENDIF ;IF (NEWSTYLE)
IF (NEWSTYLE)
CLR ACK ;1/2us PULSE ACK- TO ENABLE NEXT EVENT
ENDIF ;IF (NEWSTYLE)
MOV R0,A
SETB ACK ;1/2us
;-------------------------------------------------------
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)
;------------------------------------------------------------------------
;PARASYNC MACRO
;EOC SET ($/16)
;EOC SET (EOC+1)*16
; ORG EOC
; ENDM
; PARASYNC
EOC SET ($/16)
EOC SET (EOC+1)*16
ORG EOC
ROM_ID:
DB 'K21 CPU PROM VER: Cascades2 1.103 for HEEPS-M; '
SWEEPDATA:
DB 'HEEPS M 32 K 64 bins 2 ms/Step 64 Steps 128 ms/sweep; '
; PARASYNC
EOC SET ($/16)
EOC SET (EOC+1)*16
ORG EOC
OPTIONS:
IF (FAST_OUT)
DB 'Fast_Out; '
ELSE
DB 'NO_Fast_Out; '
ENDIF ;IF (FAST_OUT)
; PARASYNC
EOC SET ($/16)
EOC SET (EOC+1)*16
ORG EOC
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)
; PARASYNC
EOC SET ($/16)
EOC SET (EOC+1)*16
ORG EOC
IF (SYNC1PPS)
DB 'force energy sweep to reset at 1PPS; '
ELSE
DB 'NO_SYNC1PPS; '
ENDIF ;IF (SYNC1PPS)
; PARASYNC
EOC SET ($/16)
EOC SET (EOC+1)*16
ORG EOC
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)
; PARASYNC
EOC SET ($/16)
EOC SET (EOC+1)*16
ORG EOC
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)
; PARASYNC
EOC SET ($/16)
EOC SET (EOC+1)*16
ORG EOC
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)
; PARASYNC
EOC SET ($/16)
EOC SET (EOC+1)*16
ORG EOC
IF (PARANOID)
DB 'PARANOID; '
ELSE
DB 'NOT_PARANOID; '
ENDIF ;IF (PARANOID)
END