📄 main.s54
字号:
;******************************************************************************
; SJTU DSP Tech. Center
; Copyright (c) 2002 SJTU DSP Tech. Center. All Rights Reserved.
; History:
; Date Authors Changes
; 2003/08/30 Fu Xuan Created.
;******************************************************************************
.mmregs
.include "codec_cnst.h54"
.include "dsp_cnst.h54"
.include "macro.h54"
;**************************constants*******************************************
DATA_STORE_SIZE .set 1024
STACK_ADDR .set 0x0500
;******************************************************************************
;************************memory allocation*************************************
.bss INPUT_PINGPONG_0, DATA_STORE_SIZE
.bss INPUT_PINGPONG_1, DATA_STORE_SIZE
.bss OUTPUT_PINGPONG_0, DATA_STORE_SIZE
.bss OUTPUT_PINGPONG_1, DATA_STORE_SIZE
.bss input_pingpong_flag, 1
.bss output_pingpong_flag, 1
.bss dmac0_int_flag, 1
.bss dmac4_int_flag, 1
;******************************************************************************
;**************************functions*******************************************
.def main
.ref DSPInit
;******************************************************************************
;**************************variables*******************************************
.def DATA_STORE_SIZE
.def INPUT_PINGPONG_0
.def INPUT_PINGPONG_1
.def OUTPUT_PINGPONG_0
;******************************************************************************
.text
;******************************************************************************
;** Function: main
;** Description: Main program
;******************************************************************************
main:
stm #STACK_ADDR, SP
;DSP initialization (inluding settings of CPLD, DMA and McBSP )
call DSPInit
;LED0 shines to show that all initializations have finished
LED0_ON CNTL1
sub A
;initialize INPUT_PINGPONG_0
stm #INPUT_PINGPONG_0, AR4
rpt #DATA_STORE_SIZE-1
stl A, *AR4+
;initialize INPUT_PINGPONG_1
stm #INPUT_PINGPONG_1, AR4
rpt #DATA_STORE_SIZE-1
stl A, *AR4+
;initialize OUTPUT_PINGPONG_0
stm #OUTPUT_PINGPONG_0, AR4
rpt #DATA_STORE_SIZE-1
stl A, *AR4+
;initialize OUTPUT_PINGPONG_1
stm #OUTPUT_PINGPONG_1, AR4
rpt #DATA_STORE_SIZE-1
stl A, *AR4+
;initialize dmac0_int_flag, dmac4_int_flag
st #0, *(dmac0_int_flag)
st #0, *(dmac4_int_flag)
;initialize input_pingpong_flag
st #0, *(input_pingpong_flag)
st #0, *(output_pingpong_flag)
;ready for data receive
stm #0x1040, IMR ;set IMR to enable DMA0, DMA4 Interrupt
stm #0xffff, IFR ;set IFR to clear pending interrupt
;enable interrupts
rsbx INTM
;enable channel 0 and 4 of DMA
CHANNEL_ENABLE #0x0011 ;set DE[0]=1, DE[4]=1 to enable channel 0, 4
;enable McBSP1 (set RRST=XRST=1)
McBSP1_ENABLE AR3
working_loop:
;clear int_flag after Interrupts occur
ld *(dmac0_int_flag), B
bc working_loop, BEQ ;if B=0, we don't need to reset dmac0_int_flag
st #0, *(dmac0_int_flag) ;reset dmac0_int_flag
;After DMA0 Interrupt, do some Information Processing here
call TO_DO_SOMETHING
b working_loop
dead_loop:
nop
nop
nop
b dead_loop
;******************************************************************************
;** Function: TO_DO_SOMETHING
;** Description:
;** Processing the data received from AD and send the result to DA
;******************************************************************************
TO_DO_SOMETHING:
bitf *(input_pingpong_flag), #1
bc IN_PINGPONG_1, TC
;if input_pingpong_flag=0, processing INPUT_PINGPONG_1
bd TEST_OUT_PINGPONG
stm #INPUT_PINGPONG_0, AR2
IN_PINGPONG_1:
stm #INPUT_PINGPONG_1, AR2
TEST_OUT_PINGPONG:
bitf *(output_pingpong_flag), #1
bc OUT_PINGPONG_1, TC
;if output_ping_flag=0, save result in OUTPUT_PINGPONG_1
bd PROCESSING
stm #OUTPUT_PINGPONG_0, AR3
OUT_PINGPONG_1:
stm #OUTPUT_PINGPONG_1, AR3
;put your information processing program here
;at this time, we just send the raw data back to DA without any processing
PROCESSING:
stm #512-1, BRC
rptb END_PROCESSING-1
mvdd *AR2+, *AR3+
mvdd *AR2+, *AR3+
END_PROCESSING:
ret
;**************************vectors*********************************************
.sect "vectors"
int_reset:
b main ;Main program
nop
nop
.space 84*16
int_damc0:
bd DMAC0_ISR ;read data from DRR11 to INPUT_PINGPONG0/1
pshm ST0
pshm ST1
.space 20*16
int_dmac4:
bd DMAC4_ISR ;send data from OUTPUT_PINGPONG0/1 to DXR11
pshm ST0
pshm ST1
.space 12*16
;*********************** Interrupt Service Routine ****************************
.text
;******************************************************************************
;** Function: DMAC0_ISR
;** Description:
;** DMAC0 ISR for McBSP1 receive
;******************************************************************************
DMAC0_ISR:
bitf *(input_pingpong_flag), #1
bcd IN_PINGPONG1_SET, TC
stm #DMGDA, DMSA ;选中目的地址重载寄存器DMGDA
;if input_pingpong_flag is 0, stroe #INPUT_PINGPONG_0 in DMSDN(不带地址自动增加得子区访问寄存器)
bd IN_PROCESS_EXIT
stm #INPUT_PINGPONG_0, DMSDN ;修改目的地址寄存器DMGDA到INPUT_PINGPONG_0
;if input_pingpong_flag is 1, stroe #INPUT_PINGPONG_1 in DMSDN(不带地址自动增加得子区访问寄存器)
IN_PINGPONG1_SET:
stm #INPUT_PINGPONG_1, DMSDN ;修改目的地址寄存器DMGDA到INPUT_PINGPONG_1
IN_PROCESS_EXIT:
xorm #1, *(input_pingpong_flag) ;alter input_pingpong_flag when each interrupt come
st #1, *(dmac0_int_flag) ;set dmac0_int_flag when each interrupt come
popm ST1
popm ST0
rete
;******************************************************************************
;** Function: DMAC4_ISR
;** Description:
;** DMAC4 ISR for McBSP1 send
;******************************************************************************
DMAC4_ISR:
pshm AL
pshm AH
pshm AG
bitf *(output_pingpong_flag), #1
bcd OUT_PINGPONG1_SET, TC
stm #DMSRC4, DMSA ;选中DMA4源地址寄存器DMSRC4
;if output_pingpong_flag is 0, store #OUTPUT_PINGPONG_0 in DMSDN(不带地址自动增加得子区访问寄存器)
bd OUT_PROCESS_EXIT
stm #OUTPUT_PINGPONG_0, DMSDN ;DMSDN->DMSRC4
;if output_pingpong_flag is 1, store #OUTPUT_PINGPONG_1 in DMSDN(不带地址自动增加得子区访问寄存器)
OUT_PINGPONG1_SET:
stm #OUTPUT_PINGPONG_1, DMSDN ;DMSDN->DMSRC4
OUT_PROCESS_EXIT:
xorm #1, *(output_pingpong_flag) ;alter output_pingpong_flag when each interrupt come
st #1, *(dmac4_int_flag) ;set dmac4_int_flag when each interrupt come
CHANNEL_ENABLE #0x0010 ;enable DMA4
popm AG
popm AH
popm AL
popm ST1
popm ST0
rete
.end
;end of main.s54
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -