📄 initc5402.asm
字号:
.global _InitC5402
.global _OpenMcBSP
.global _CloseMcBSP
.global _READAD50
.global _WRITEAD50
.include MMRegs.h
_InitC5402:
NOP
LD #0, DP ; reset data–page pointer
STM #0, CLKMD ; software setting of DSP clock
STM #0, CLKMD ; (to divider mode before setting)
statu:
LDM CLKMD, A
and #01b, A ;poll STATUS bit
bc statu, ANEQ
nop
STM #0x97ff, CLKMD ; set C5402 DSP clock to 100MHz
rpt #0ffh
nop
nop
ssbx intm ;set st1.intm=1 stop all interrupt
nop
******* Configure C5402 System Registers *******
STM 7FFFH, SWWSR ; 2 wait cycle for IO space &
; 0 wait cycle for data&prog spaces
STM #0x0000,BSCR ; set wait states for bank switch:
; 64k mem bank, extra 0 cycle between
; consecutive prog/data read
; STM #0x1800,ST0 ; ST0 at default setting
; STM #0x2900,ST1 ; ST1 at default setting(note:INTX=1)
; STM #0x00A0,PMST ; MC mode & OVLY=1, vectors at 0080h
******* Set up Timer Control Registers *******
STM #0x0010, TCR ; stop on–chip timer0
STM #0x0010, TCR1 ; stop on–chip timer1
; Timer0 is used as main loop timer
; STM #2499, PRD ; timer0 rate=CPUCLK/1/(PRD+1)
; =40M/2500=16KHz
* STM #6249, PRD ; if CPU at 100M/6250=16KHz
******* Initialize McBSP1 Registers *******
STM SPCR1, McBSP1_SPSA ; register subaddr of SPCR1
STM #0000h, McBSP1_SPSD ; McBSP1 recv = left–justify
; RINT generated by frame sync
STM SPCR2, McBSP1_SPSA ; register subaddr for SPCR2
; XINT generated by frame sync
STM #0000h, McBSP1_SPSD ; McBSP1 Tx = FREE(clock stops
; to run after SW breakpoint
STM RCR1, McBSP1_SPSA ; register subaddr of RCR1
STM #0040h, McBSP1_SPSD ; recv frame1 Dlength = 16 bits
STM RCR2, McBSP1_SPSA ; register subaddr of RCR2
STM #0040h, McBSP1_SPSD ; recv Phase = 1
; ret frame2 Dlength = 16bits
STM XCR1, McBSP1_SPSA ; register subaddr of XCR1
STM #0040h, McBSP1_SPSD ; set the same as recv
STM XCR2, McBSP1_SPSA ; register subaddr of XCR2
STM #0040h, McBSP1_SPSD ; set the same as recv
STM PCR, McBSP1_SPSA ; register subaddress of PCR
STM #000eh, McBSP1_SPSD ; clk and frame from external (slave)
; FS at pulse–mode(00)
******* Finish DSP Initialization *******
STM #0x0000, IMR ; disable peripheral interrupts
STM #0xFFFF, IFR ; clear the intrupts’ flags
RET ; return to main
NOP
NOP
******* Waiting for McBSP0 RX Finished *******
IfRxRDY1:
NOP
STM SPCR1, McBSP1_SPSA ; enable McBSP1 Rx
LDM McBSP1_SPSD, A
AND #0002h, A ; mask RRDY bit
BC IfRxRDY1, AEQ ; keep checking
NOP
NOP
RET ; return
NOP
NOP
******* Waiting for McBSP0 TX Finished *******
IfTxRDY1:
NOP
STM SPCR2, McBSP1_SPSA ; enable McBSP1 Tx
LDM McBSP1_SPSD, A
AND #0002h, A ; mask TRDY bit
BC IfTxRDY1, AEQ ; keep checking
NOP
NOP
RET ; return
NOP
NOP
******************************************
******************************************
_OpenMcBSP:
rsbx xf
call wait
NOP
STM SPCR1, McBSP1_SPSA ; enable McBSP0 RX for ADC data in
LDM McBSP1_SPSD,A
OR #0x0001, A
STLM A, McBSP1_SPSD
STM SPCR2, McBSP1_SPSA ; enable McBSP0 TX for DTMF out
LDM McBSP1_SPSD,A
OR #0x0001, A
STLM A, McBSP1_SPSD
LD #0h, DP ; load data page 0
rpt #23
NOP
ssbx xf
NOP
NOP
; CALL IfTxRDY1
; STM #0x0101, McBSP1_DXR1
; CALL IfTxRDY1
; STM #0x0208, McBSP1_DXR1
;; rsbx xf
;; NOP
;;NOP
CALL IfTxRDY1
STM #0x0001, McBSP1_DXR1;request secondary communication
NOP
CALL IfTxRDY1
STM #0100h, McBSP1_DXR1;write 00h to register 1
CALL IfTxRDY1
STM #0000h, McBSP1_DXR1
NOP
NOP
rpt #20h
nop
CALL IfTxRDY1
STM #0x0001, McBSP1_DXR1;request secondary communication
CALL IfTxRDY1
STM #0200h, McBSP1_DXR1;write 00h to register 2
CALL IfTxRDY1
STM #0000h, McBSP1_DXR1
CALL IfTxRDY1
STM #0x0001, McBSP1_DXR1;request secondary communication
CALL IfTxRDY1
STM #0300h, McBSP1_DXR1;write 00h to register 3
CALL IfTxRDY1
STM #0000h, McBSP1_DXR1
CALL IfTxRDY1
STM #0x0001, McBSP1_DXR1;request secondary communication
CALL IfTxRDY1
STM #0490h, McBSP1_DXR1;write 00h to register 4
;bypass internal DPLL
;and select the Sample Frequency
CALL IfTxRDY1
STM #0000h, McBSP1_DXR1
; CALL IfTxRDY1
; STM #0x0001, McBSP1_DXR1
; CALL IfTxRDY1
; STM #0102h, McBSP1_DXR1 ;enable digital loopback
; CALL IfTxRDY1
; STM #0x0001, McBSP1_DXR1
; CALL IfTxRDY1
; STM #0208h, McBSP1_DXR1 ;enable analog loopback
RET
NOP
NOP
*********************
_CloseMcBSP:
STM SPCR1, McBSP1_SPSA ; disable McBSP0 RX
LDM McBSP1_SPSD,A
AND #0xFFFE, A
STLM A, McBSP1_SPSD
STM SPCR2, McBSP1_SPSA ; disable McBSP0 TX
LDM McBSP1_SPSD,A
AND #0xFFFE, A
STLM A, McBSP1_SPSD
RPT #5
RET
NOP
NOP
_READAD50:
stm 0x007f,ar3
stm 0x3000,ar2
loopa:
CALL IfRxRDY1
ldm McBSP1_DRR1,b
stl b,*ar2+
banz loopa,*ar3-
nop
nop
ret
nop
nop
_WRITEAD50:
stm 0x007f,ar3
stm 0x3080,ar2
loopb:
CALL IfTxRDY1
ldu *ar2+,B
and #0fffeh,b ;mask the LSB
stlm B, McBSP1_DXR1
banz loopb,*ar3-
nop
nop
ret
nop
nop
wait:
stm 20h,ar3
loop1:
stm 020h,ar4
loop2:
banz loop2,*ar4-
banz loop1,*ar3-
ret
nop
nop
nop
nop
.end
************************************************************************
** End of File –– InitC5402.asm
************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -