initc5410.asm
来自「DSP5000实验箱上完整的实验程序,很有参考价值」· 汇编 代码 · 共 219 行
ASM
219 行
.global _InitC5410
.global _OpenMcBSP
.global _CloseMcBSP
.global _READAD50
.global _WRITEAD50
.include MMRegs.h
_InitC5410:
NOP
LD #0, DP ; reset data–page pointer
STM #0, CLKMD ; software setting of DSP clock
STM #0, CLKMD ; (to divider mode before setting)
TstStatu1:
LDM CLKMD, A
AND #01b, A ;poll STATUS bit
BC TstStatu1, ANEQ
STM #0x97ff, CLKMD ; set C5402 DSP clock to 10MHz
******* Configure C5402 System Registers *******
STM #0x2000, SWWSR ; 2 wait cycle for IO space &
STM #0x0000,BSCR ; set wait states for bank switch:
******* Set up Timer Control Registers *******
STM #0x0010, TCR ; stop on–chip timer0
******* Initialize McBSP2 Registers *******
STM SPCR1, McBSP2_SPSA ; register subaddr of SPCR1
STM #0000h, McBSP2_SPSD ; McBSP2 recv = left–justify
STM SPCR2, McBSP2_SPSA ; register subaddr for SPCR2
STM #0000h, McBSP2_SPSD ; McBSP2 Tx = FREE(clock stops
STM RCR1, McBSP2_SPSA ; register subaddr of RCR1
STM #0040h, McBSP2_SPSD ; recv frame1 Dlength = 16 bits
STM RCR2, McBSP2_SPSA ; register subaddr of RCR2
STM #0040h, McBSP2_SPSD ; recv Phase = 1
STM XCR1, McBSP2_SPSA ; register subaddr of XCR1
STM #0040h, McBSP2_SPSD ; set the same as recv
STM XCR2, McBSP2_SPSA ; register subaddr of XCR2
STM #0040h, McBSP2_SPSD ; set the same as recv
STM PCR, McBSP2_SPSA ; register subaddress of PCR
STM #000eh, McBSP2_SPSD ; clk and frame from external (slave)
******* 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, McBSP2_SPSA ; enable McBSP2 Rx
LDM McBSP2_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, McBSP2_SPSA ; enable McBSP2 Tx
LDM McBSP2_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, McBSP2_SPSA ; enable McBSP0 RX for ADC data in
LDM McBSP2_SPSD,A
OR #0x0001, A
STLM A, McBSP2_SPSD
STM SPCR2, McBSP2_SPSA ; enable McBSP0 TX for DTMF out
LDM McBSP2_SPSD,A
OR #0x0001, A
STLM A, McBSP2_SPSD
LD #0h, DP ; load data page 0
rpt #23
NOP
ssbx xf
NOP
NOP
CALL IfTxRDY1
STM #0x0001, McBSP2_DXR1;request secondary communication
NOP
CALL IfTxRDY1
STM #0100h, McBSP2_DXR1;write 00h to register 1
CALL IfTxRDY1
STM #0000h, McBSP2_DXR1
NOP
NOP
rpt #20h
nop
CALL IfTxRDY1
STM #0x0001, McBSP2_DXR1;request secondary communication
CALL IfTxRDY1
STM #0200h, McBSP2_DXR1;write 00h to register 2
CALL IfTxRDY1
STM #0000h, McBSP2_DXR1
CALL IfTxRDY1
STM #0x0001, McBSP2_DXR1;request secondary communication
CALL IfTxRDY1
STM #0300h, McBSP2_DXR1;write 00h to register 3
CALL IfTxRDY1
STM #0000h, McBSP2_DXR1
CALL IfTxRDY1
STM #0x0001, McBSP2_DXR1;request secondary communication
CALL IfTxRDY1
STM #0490h, McBSP2_DXR1;write 00h to register 4
;bypass internal DPLL
;and select the Sample Frequency
CALL IfTxRDY1
STM #0000h, McBSP2_DXR1
RET
NOP
NOP
*********************
_CloseMcBSP:
STM SPCR1, McBSP2_SPSA ; disable McBSP0 RX
LDM McBSP2_SPSD,A
AND #0xFFFE, A
STLM A, McBSP2_SPSD
STM SPCR2, McBSP2_SPSA ; disable McBSP0 TX
LDM McBSP2_SPSD,A
AND #0xFFFE, A
STLM A, McBSP2_SPSD
RPT #5
RET
NOP
NOP
_READAD50:
stm 0x00ff,ar3
stm 0x3000,ar2
loopa:
CALL IfRxRDY1
ldm McBSP2_DRR1,b
stl b,*ar2+
nop
nop
ret
nop
nop
_WRITEAD50:
stm 0x00ff,ar3
stm 0x3010,ar2
loopb:
CALL IfTxRDY1
ldu *ar2+,B
and #0fffeh,b ;mask the LSB
stlm B, McBSP2_DXR1
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 + =
减小字号Ctrl + -
显示快捷键?