Sei sulla pagina 1di 8

; K101 CPU PROM VER: RENU 1.

036 for Magnetometer data interleaving ; K101 CPU PROM VER: Cascades2 1.035 for Magnetometer data interleaving ; K101 CPU PROM VER: ROPA 0.032 for Magnetometer data interleaving ; K101 CPU PROM VER: Cascades TST 0.10.019 for Magnetometer data interleaving ; based on K101 CPU PROM VER: Cascades TST 0.016 which was based on TEST 0.014 ; ; ; ; ; ; RENU v1.036 magnetometer same as Cascades2 v1.035 Cascades2 v1.035 magnetometer adds PARASYNC to options echo at end of code Cascades2 v1.034 magnetometer adds options echo at end of code Cascades2 v0.033 magnetometer data handling code is the same as ROPA v0.032 magnetometer code K101 CPU PROM VER: Cascades TST 0.10.019 for Magnetometer data interleaving based on K101 CPU PROM VER: Cascades TST 0.016 which was based on TEST 0.014

;directives added to make MetaLink ASM51.EXE happy: $MOD51 $TITLE(K101 CPU PROM VER: RENU 1.036 for Magnetometer) $PAGEWIDTH(132) $NOPAGING $NODEBUG $SYMBOLS $OBJECT ;FAST_OUT EQU 1 ;probably keep on for flight FAST_OUT EQU 0 ;SKIP_TWO EQU 1 ;on RESET skip two words out SKIP_TWO EQU 0 ;on RESET skip two words out IF (SKIP_TWO) SKIP_ONE EQU 1 ;on RESET skip one word out ELSE SKIP_ONE EQU 1 ;on RESET skip one word out ;SKIP_ONE EQU 0 ;on RESET skip one word out ENDIF ;IF (SKIP_TWO) 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) ;PARANOID EQU 1 ;probably turn off for flight ;;PARANOID EQU 0 ;;METANOID EQU 1 ;definitely turn off for flight ;METANOID EQU 0

PARANOID USING ; ; ; ; ;

EQU 0 0 ;Select addresses for Bank 0

PORT USAGE P0 FIFO output P1 TEST bit & ADC serial interface bits P2 UNUSED (DAC serial interface bits) P3 SINGLE BIT I/O

; IO BITS MAJF BIT P3.0 ;MINF BIT P3.1 PPS1 BIT P3.2 ;INT1 BIT P3.3 ; BIT P3.4 ; (NOT USED) EVENT BIT P3.5 ;WR BIT P3.6 ;LOAD FIFO ; BIT P3.7 ; IO BITS TST BIT P1.1 ADCK ADCS ADX BIT ADZ BIT ADY BIT ;PAYLOAD TEST INPUT

BIT P1.3 ;ADC CLOCK BIT P1.4 ;ADC CHIP SELECT P1.5 ;ADC DATA magnetometer X P1.6 ;ADC DATA magnetometer Z P1.7 ;ADC DATA magnetometer Y

;REG USAGE ;R0 SCRATCH ;R1 MAG X ADC ;R2 MAG Y ADC ;R3 MAG Z ADC ;R4 MAG X ADC ;R5 MAG Y ADC ;R6 MAG Z ADC ;R7

high word high word high word low word low word low word

;INTERNAL RAM ;directive added to make MetaLink ASM51.EXE happy: DSEG ;directly addressable Data memory SEGment definition ORG 8H IGNORE: DS 3 VEC1L: DS 1

VEC1H:

DS 1

DS 8 ORG 3FH STACK: DS 8 ;directive added to make MetaLink ASM51.EXE happy: CSEG ;code memory SEGment definition ORG 0 JMP RESET ;1us JUMP AROUND INTR HANDLER ; 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,#VEC1H ;1us JUMP INDIRECT THRU VEC BY LOADING SP RETI ;1us AND DOING A RET ; ; 72 code ; RESET HAPPENS ONLY ON POWER UP (OR ATTEMPT TO READ EMPTY FIFO) RESET: IF (FAST_OUT) CLR ADCK IF (SKIP_TWO) ; MOV A,#11 ;MAG X HIGH ; MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) ; MOV A,#22 ;MAG X LOW ; MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) ELSE IF (SKIP_ONE) ; MOV A,#11 ;MAG X HIGH ; MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) ELSE MOV A,#11 ;MAG X HIGH MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) ENDIF ;IF (SKIP_ONE) MOV A,#22 ;MAG X LOW MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) ENDIF ;IF (SKIP_TWO) MOV A,#55 ;MAG Y HIGH MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) MOV A,#66 ;MAG Y LOW MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) MOV A,#33 ;MAG Z HIGH MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) MOV A,#44 ;MAG Z LOW

MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) ENDIF ;IF (FAST_OUT) MOV CLR MOV MOV MOV SP,#STACK ADCK VEC1H,#01H VEC1L,#00H TCON,#04H

;1us 100H LEAVES ROOM FOR RESET CODE ;1us EDGE TRIG FOR INT1 ;DESELECT ADCs ;INITIALIZE DATA VALUES TO TEST VALUES in same order they will be output

SETB ADCS SETB ADCK MOV MOV MOV MOV MOV MOV R1,#11 R4,#22 R2,#55 R5,#66 R3,#33 R6,#44

MOV IE,#84H ;1us ENABLE EXT INT1 JMP INTV1 ;1us ; EVENT WAIT LOOP WT: WT_: NOP JMP WT_ ; hang in wait loop until INT1 comes along

; READ MAGS (??us) RDMAG: ; ADCs were selected in INT1 handler prior to jumping here MOV IE,#00H ;1us DISABLE EXT INT1 ; SETB ADCK MOV A,#0 CLR A MOV R1,A MOV R2,A MOV R3,A MOV R4,A MOV R5,A MOV R6,A CLR ADCK ;8us DELAY FROM CS LOW ;ZERO ;ZERO ;ZERO ;ZERO ;ZERO ;ZERO R1 R2 R3 R4 R5 R6 MAG MAG MAG MAG MAG MAG X Y Z X Y Z RESULT RESULT RESULT RESULT RESULT RESULT

MOV R0,#7 ;SKIP HIGHEST EIGHT BITS WHICH ARE ALL ZEROS ;use 7 not 8 here because first bit is shifted out ;by selecting the chip, so need only shift 7 more out ;Originally used 8 here because of misunderstanding, so

;lowest bit of LSByte was always 0 and values were x2 NXBIT3: MOV A,R1 ;12us/BIT MOV C,ADX ;READ X BIT RLC A ;SHIFT IT MOV A,R2 MOV C,ADY ;READ Y BIT SETB ADCK RLC A ;SHIFT IT MOV A,R3 MOV C,ADZ ;READ Z BIT RLC A ;SHIFT IT CLR ADCK DJNZ R0,NXBIT3 MOV R0,#8 NXBIT: MOV MOV RLC MOV A,R1 ;??us/BIT C,ADX ;READ X BIT A ;SHIFT IT R1,A ;SAVE X RESULT IN R1 ;READ HIGHEST EIGHT BITS

MOV A,R2 MOV C,ADY ;READ Y BIT SETB ADCK RLC A ;SHIFT IT MOV R2,A ;SAVE Y RESULT IN R2 MOV A,R3 MOV C,ADZ ;READ Z BIT RLC A ;SHIFT IT MOV R3,A ;SAVE Z RESULT IN R2 CLR ADCK DJNZ R0,NXBIT MOV R0,#8 NXBIT2: MOV MOV RLC MOV ;READ LOWEST EIGHT BITS

A,R4 ;??us/BIT C,ADX ;READ X BIT A ;SHIFT IT R4,A ;SAVE X RESULT IN R4

MOV A,R5 MOV C,ADY ;READ Y BIT SETB ADCK RLC A ;SHIFT IT MOV R5,A ;SAVE Y RESULT IN R5 MOV MOV RLC MOV CLR A,R6 C,ADZ ;READ Z BIT A ;SHIFT IT R6,A ;SAVE Z RESULT IN R6 ADCK

DJNZ R0,NXBIT2 SETB ADCS SETB ADCK ; MOV SP,#STACK MOV IE,#84H ;1us ENABLE EXT INT1 JMP WT ; ORG 100H PROG0: CLR ADCK CLR ADCS ;CLEAR sclk prior to starting conversion ;START CONVERSION prior to writing out previous values ;DESELECT ADCs after reading all bits

; WRITE OUT PREVIOUSLY READ MAGNETOMETER DATA MOV A,R1 ;MAG X HIGH MOVX @R0,A ;WRITE TO FIFO. (ADDR NOT USED) CLR A MOV R1,A ;MAG X HIGH MOV A,R4 MOVX @R0,A CLR A MOV R4,A MOV A,R2 MOVX @R0,A CLR A MOV R2,A MOV A,R5 ;MAG X LOW ;WRITE TO FIFO. (ADDR NOT USED) ;MAG X LOW ;MAG Y HIGH ;WRITE TO FIFO. (ADDR NOT USED) ;MAG Y HIGH ;MAG Y LOW

MOVX @R0,A CLR A MOV R5,A MOV A,R3 MOVX @R0,A CLR A MOV R3,A MOV A,R6 MOVX @R0,A CLR A MOV R6,A JMP RDMAG JMP RESET ; ;PARASYNC MACRO ;EOC SET ($/16) ;EOC SET (EOC+1)*16 ; ORG EOC ; ENDM

;WRITE TO FIFO. (ADDR NOT USED) ;MAG Y LOW ;MAG Z HIGH ;WRITE TO FIFO. (ADDR NOT USED) ;MAG Z HIGH ;MAG Z LOW ;WRITE TO FIFO. (ADDR NOT USED) ;MAG Z LOW

;should never get here, so if we do RESET

; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC ROM_ID: DB 'K101 CPU PROM VER: RENU 1.036 for Magnetometer' OPTIONS: ; PARASYNC EOC SET ($/16) EOC SET (EOC+1)*16 ORG EOC 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 (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 (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 (PARANOID) DB 'PARANOID; ' ELSE DB 'NOT_PARANOID; ENDIF ;IF (PARANOID) END

'

'

Potrebbero piacerti anche