dss_ad50.s54
来自「使用在TI 系列dsk5402 的很多可用例子」· S54 代码 · 共 542 行 · 第 1/2 页
S54
542 行
; dummy read to clear RRDY
ld DRR1_1, A
WAITTRX
;; Perform dummy read of primary slot
ld DRR1_1, A
;; Set FC to request secondary communications
stm #dss_tmp, ar0
nop
portr CPLD_CTRL2, *ar0
andm #MCBSP1_TO_CODEC1, *ar0
portw *ar0, CPLD_CTRL2
;; wait for rrdy
WAITTRX
;; dummy read of primary slot
ld DRR1_1, A
;; write command
stm #:progword:,DXR1_1
;; clear FC
stm #dss_tmp, ar0
nop
portr CPLD_CTRL2, *ar0
andm #(~CODEC1_FC_ON), *ar0
portw *ar0, CPLD_CTRL2
;; wait for rrdy
WAITTRX
;; dummy read of secondary slot
ld DRR1_1, A
;; write 0 for next primary slot
stm #0, DXR1_1
.endm
; tmp for portr/w. could/should use the stack instead
.bss dss_tmp, 1
.else
PROGREG .macro progword
st #1b, McDXR1 ; requesting secondary communications
WAITTRX
st #:progword:, McDXR1
WAITTRX
.endm
.endif
;
; ======== DSS_init ========
;
.global _DSS_init
_DSS_init
.if ($isdefed("_SD5410_"))
; clear CPL for DP-relative addressing
rsbx CPL
nop ; cpl latency
nop ; cpl latency
nop ; cpl latency
ld #0, DP ; Set data pointer to Page 0
ssbx SXM ;
;
; Set up McBSP Control Registers
;
stm #SPCR1_sa, SPSA ; select McBSP0 SPCR1 register
stm #I_SPCR1, SPAD ; initial McBSP0 SPCR1 setting
stm #SPCR2_sa, SPSA ; select McBSP0 SPCR2 register
stm #I_SPCR2, SPAD ; initial McBSP0 SPCR2 setting
stm #RCR1_sa, SPSA ; select McBSP0 RCR1 register
stm #I_RCR1, SPAD ; initial McBSP0 RCR1 setting
stm #RCR2_sa, SPSA ; select McBSP0 RCR2 register
stm #I_RCR2, SPAD ; initial McBSP0 RCR2 setting
stm #XCR1_sa, SPSA ; select McBSP0 XCR1 register
stm #I_XCR1, SPAD ; initial McBSP0 XCR1 setting
stm #XCR2_sa, SPSA ; select McBSP0 XCR2 register
stm #I_XCR2, SPAD ; initial McBSP0 XCR2 setting
;
; Set up Pin Registers
;
stm #PCR_sa, SPSA ; select McBSP0 Pin Control register
stm #I_PCR, SPAD ; initial McBSP0 Pin setting
;
; Enable Reciever
;
;
stm #SPCR1_sa, SPSA ; select McBSP0 SPCR1 register
orm #RRST_s, SPAD ; Enable Reciever
;
;
;
samp1:
stm #SPCR2_sa, SPSA ; select McBSP0 SPCR2 register
orm #XRST_s, SPAD ; Enable Xmitter
.endif
.if ($isdefed("_DSK5402_"))
rsbx CPL
nop ; cpl latency
nop ; cpl latency
nop ; cpl latency
ld #0, DP
ssbx INTM
ssbx SXM
WR_MCBSP_SUB_REG SPCR1_sa,#0h ; reset McBSP0
WR_MCBSP_SUB_REG SPCR2_sa,#0h
;; write McBSP registers
WR_MCBSP_SUB_REG RCR1_sa,#I_RCR1
WR_MCBSP_SUB_REG RCR2_sa,#I_RCR2
WR_MCBSP_SUB_REG XCR1_sa,#I_XCR1
WR_MCBSP_SUB_REG XCR2_sa,#I_XCR2
WR_MCBSP_SUB_REG PCR_sa,#I_PCR
WR_MCBSP_SUB_REG SPCR1_sa,#I_SPCR1
WR_MCBSP_SUB_REG SPCR2_sa,#I_SPCR2
;; connect to appropriate source
stm #dss_tmp, ar0
nop
portr CPLD_CTRL2, *ar0
andm #MCBSP1_TO_CODEC1, *ar0
portw *ar0, CPLD_CTRL2
;; set interrupts to come from serial ports not DMA
;; by clearing bits 6 and 7 in DMPREC
andm #0ff3fh, 54h
;; clear xmit register -- why?
stm #0, DXR1_1
;; now enable McBSP transmit and receive
WR_MCBSP_SUB_REG SPCR1_sa,#I_SPCR1 | 1
WR_MCBSP_SUB_REG SPCR2_sa,#I_SPCR2 | 1
.endif
;*************************************************************************
;* AIC_INIT:
;*
;* Initialization of TLC320AD55.
;*
;*************************************************************************
.global _AIC_INIT
AIC_INIT
orm #IMASK, IMR ; only receive-int is enabled/served.
st #0ffffh, IFR
.if ($isdefed("_SD5410_"))
WAITTRX
.endif
;*************************************************************************
;* Control 1: Config
;*
;* D7 Software reset No RESET
;* D6 Software power-down No Powerdown
;* D5 Normal/aux inputs Select Inp Inputs
;* D4 Monitor Normal/Aux Monitor on Inp
;* D3,D2 Monitor Gain MUTE
;* (00 = MUTE, 01 = 0db, 10 = -8db 11 = -18db )
;* D1 Digital feedback no loopbakc
;* D0 16-bit or 15-bit mode 15 bit mode
;*
;* 0x00
;*
;*************************************************************************
Control_1
PROGREG 0000000100000000b ;Control 1
;*************************************************************************
;* Control 2:
;*
;* D7 Flag Output value 0 Flag to 0
;* D6 Phone Mode 0 Phone Mode Disabled
;* D5 Decimator FIR overflow
;* D4 16 bit ADC Mode 0 No 16 bit ADC
;* D3 Analog Loop Back 0 No loopback
;* D2 RESERVED 0
;* D1 RESERVED 0
;* D0 RESERVED 0
;*
;*************************************************************************
Control_2
PROGREG 0000001000000000b ;Control 2
;*************************************************************************
;* Control 3: Slave Interfaces
;*
;* D7,D6 Number of Slaves ( 3 max ) 00
;* D5-D0 Number of SCLKS between FS- & FSD- 000000
;*
;*************************************************************************
Control_3
PROGREG 0000001100000000b ;
;*************************************************************************
;* Control 4: Gains and Frequency
;*
;* D7 External Sample Clock 1
;* D6-D4 Fs = MCLK/(128*n) 3 max ) 100
;* D2,D3 Input Gain 00
;* D1,D0 Output Gain 00
;*
;*************************************************************************
;* Fsclk divide
;*
;* MCLK = 16.384 Mhz
;* Fsclk = 8K
;* SCLK = MCLK/(2*Fsclk) = 1.024 Mhz = 128*sample frequency
;*
;* Note!!!
;* The DS5410 crystal runs at 16.384 MHz.
;* THe DSK5402 crystal runs at 8.192 MHz.
;*
;*************************************************************************
;*
;*************************************************************************
Control_4
.if ($isdefed("_DSK5402_"))
PROGREG 0000010010100000b ;Fk (8 kHertz)
.endif
.if ($isdefed("_SD5410_"))
; PROGREG 0000010010100000b ;Fk (16 kHertz)
PROGREG 0000010011000000b ;Fk (8 kHertz)
.endif
.if ($isdefed("_DSK5402_"))
ld DRR1_1, A
ld DRR1_1, A
stlm A,DXR1_1
stlm A,DXR1_1
.endif
; set CPL since _DSS_init is C function
ssbx CPL
nop ; cpl latency
nop ; cpl latency
nop ; cpl latency
.if __far_mode
fret
.else
ret
.endif
.end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?