aicbcom.asm
来自「"DIGITAL SIGNAL PROCESSING WITH C AND TH」· 汇编 代码 · 共 59 行
ASM
59 行
*AIC ON THE AIB COMMUNICATIONS ROUTINE
.TITLE "AICBCOM" ;AIC ON THE AIB COMMUNICATIONS ROUTINES
.GLOBAL AICSEC,AICSET,AICIO,INITSP,INITAIC,SECEND,SEC,TWAIT ;REF/DEF
.OPTION X ;FOR XREF
.DATA ;ASSEMBLE INTO DATA SECTION
PBASE .WORD 808000h ;PERIPHERAL BASE ADDR
SETSP .WORD 2970300h ;SERIAL PORT SET-UP DATA
GOSP .WORD 0C000000h ;SERIAL PORT START DATA
ATABLE .WORD AICSEC ;AIC INIT TABLE ADDR
.TEXT ;START ADDR = 809800h
AICSET PUSH AR0 ;SAVE AR0
PUSH AR1 ;SAVE AR1
PUSH R0 ;SAVE R0
PUSH R1 ;SAVE R1
LDI @PBASE,AR0 ;AR0 -> 808000h
LDI @ATABLE,AR1 ;AR1 -> AIC INIT DATA
XOR R1,R1 ;CLEAR R1
STI R1,*+AR0(58h) ;CLEAR SERIAL1 DATA TRANSMIT REG (DTR)
INITSP LDI @SETSP,R0 ;RESET -> SP: 16 BITS, EXT CLKS, STD MODE
STI R0,*+AR0(50h) ;FSX = OUTPUT, & INT ENABL (SP GLOBAL REG)
LDI 131h,R0 ;X & R PORT CONTROL REGS DATA
STI R0,*+AR0(52h) ;FSX/DX/CLKX = SP OPERATIONAL PINS
STI R0,*+AR0(53h) ;FSR/DR/CLKR = SP OPERATIONAL PINS
LDI @GOSP,R0 ;R0 = VALUE TO START THE SP
OR *+AR0(50h),R0 ;R0 = DATA TO END RESET OF SP
STI R0,*+AR0(50h) ;START C30 SERIAL COM
INITAIC LDI 06h,RC ;RC = 6
RPTB SECEND ;REPEAT 7 DATA TRANSMITS OF SECONDARY COMM
SEC CALL TWAIT ;WAIT FOR DATA TO TRANSMIT
LDI *AR1++(1),R0 ;AR1 -> NEXT AIC INIT DATA
SECEND STI R0,*+AR0(58h) ;DTR = CURRENT AIC DATA
POP R1 ;RESTORE R1
POP R0 ;RESTORE R0
POP AR1 ;RESTORE AR1
POP AR0 ;RESTORE AR0
RETS ;RETURN TO MAIN PROGRAM
;AIC TRANSFER ROUTINE. D/A DATA IS TO BE IN R7 - PLACES A/D IN R6.
AICIO PUSH AR0 ;SAVE AR0
PUSH R0 ;SAVE R0
LDI @PBASE,AR0 ;AR0 -> 808000h
CALL TWAIT ;WAIT FOR DATA TO TRANSMIT
LDI R7,R6 ;LOAD R7 INTO R6
AND -4,R6 ;MAKE SURE TWO LSBs ARE 0s
STI R6,*+AR0(58h) ;DTR=NEXT DATA FOR AIC D/A
LDI *+AR0(5Ch),R6 ;R0=DRR DATA FROM AIC D/A
LSH 16,R6 ;MULT INPUT BY 2**16 FOR SIGN EXT
ASH -16,R6 ;AND DIVIDE BY 2**16 KEEPING SIGN
POP R0 ;RESTORE R0
POP AR0 ;RESTORE AR0
RETS ;RETURN FROM SUBROUTINE
;TRANSMIT WAIT ROUTINE
TWAIT LDI *+AR0(50h),R0 ;R0 = CONTENT OF SP GLOBAL CONTROL REG
AND 2h,R0 ;SEE IF TRANSMIT BUFFER IS READY
BZ TWAIT ;IF NOT READY, TRY AGAIN
RETS ;ELSE,RETURN TO CALLING PROGRAM
.END ;END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?