dmaisr.src

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· SRC 代码 · 共 173 行

SRC
173
字号
;
;  Copyright(c) 1998,1999 SIC/Hitachi,Ltd.
;
;	Module Name:
;
;		dmaISR.src
;
;	Revision History:
;
;		26th April 1999		Released
;		30th June  1999		Modified audio in and out buffer address
;       14th Sept  2000     davli:Fix bug for 3.0 and above.

	.include "kxshx.h"
	.include "shx.inc"
	.include "cc.inc"
	.include "oalintr.inc"
	.include "platform.inc"
	.include "drv_glob.inc"

DEBUG:	.assigna	0							; DEBUG = 0: Normal Operation - no LED displays
										; DEBUG = 1: Display AudioOutInterrupt
										;		= 2: Display CHCR2
										;       = 3: Display AudOutIntr, DMA, CMT, D/A status

	.section .text,code

	.align 4

	LEAF_ENTRY _DMA_ISR

	mov.l	#h'44,r1
	mov.l	#LED_ALPHA,r2							; Strike On LED Display
	mov.l	r1, @r2

	mov.l	#CC_CODEC_ACR, r1						;adjust L and R data
	mov.l	#h'003Effff, r0
	mov.l	r0, @r1

Playback_ISR:

;Record? Playback?
	mov.l	#DMAC_SAR1, r1
	mov.l	@r1, r0
	mov.l	#CC_CODEC_PCML, r2							;CODEC_PCML
	cmp/eq	r0, r2
	bt		RecContinuing

	mov.l	#DMAC_CHCR1, r2
	mov.l	@r2, r1								;;TE read    and  Zero clear
	mov.l	#h'00001030, r1							;Clear IE,TE
	mov.l	r1, @r2

	mov.l	#CC_CODEC_ACR, r1
	mov.l	#h'00000000, r2
	mov.l	r2, @r1								;play stop

; Record Audio Playback as Generator of Interrupt
	mov	#AUDIO_OUTINT, r1						; r1 = addr of AudioOutInterrupt
	mov.w	@r1, r0							    ; Increment Interrupt Counter
	add.l   #1,r0
	mov.w	r0, @r1								

; Is there another buffer to play?

	mov.l	#AUDIO_PLAY_ADDRESS, r1						; r1 = addr of AudPlAddr
	mov.l	@r1, r0								; r0 = AudioPlayingAddr

	cmp/eq	#NULL, r0							; AudioPlayingAddr == 0 ?
	bf	PlaybackContinuing

	mov.l	#h'00000000, r1
	mov.l	#CC_CODEC_ATAGR, r2						;ATAGR
	mov.l	r1, @r2								;noise stop

        rts									; return no-processing
	mov	#SYSINTR_NOP, r0						; interrupt signal

;************************************************************************************
PlaybackContinuing:
;************************************************************************************

	mov	#DMAC_SAR1, r1							; r1 = addr of DMA-source reg
	mov.l	r0, @r1								; DMA-source reg = AudPlayingAddr
	mov	#DMAC_DMATCR1, r1						; r1 = addr of DMA xfr-cnt reg
	mov	#AUDIO_DMA_PAGE_QUARTER_SIZE, r0				; r0 = num samples to transfer  
	mov.l	r0, @r1								; DMA xfr-cnt reg = num samples

	mov.l	#CC_CODEC_ACR, r1						;adjust L and R data
	mov.l	#h'003fffff, r0
	mov.l	r0, @r1

	mov.l	#DMAC_CHCR1, r2
	mov.l	@r2, r1								;TE read    and  Zero clear
	mov.l	#h'00001035, r1							;Clear IE,TE
	mov.l	r1, @r2

	mov.l	#CC_CODEC_ACR, r1
	mov.l	#h'00200000, r2
	mov.l	r2, @r1								;play restart

	mov.l	#AUDIO_OUTINT,r1
	mov.w	#1,r2
	mov.w	r2,@r1

	rts
	mov	#SYSINTR_AUDIO, r0

	.align 4

;************************************************************************************
RecContinuing:
;************************************************************************************
	mov.l	#DMAC_CHCR1, r2
	mov.l	@r2, r1								;;TE read    and  Zero clear
	mov.l	#h'00004030, r1							;Clear IE,TE
	mov.l	r1, @r2

	mov.l	#CC_CODEC_ACR, r1
	mov.l	#h'00000000, r2
	mov.l	r2, @r1								;rec stop

	mov.l	#AUDIO_REC_ADDRESS,r1						; r1 = addr of AudRecPlAddr
	mov.l	@r1,r0								; r0 = AudioRecordingAddr
	cmp/eq	#NULL,r0							; AudioRecordingAddr == 0 ?
	bt	RecordingStop

	mov.l	#CC_CODEC_PCML, r1
	mov.l	#DMAC_SAR1,r0
	mov.l	r1, @r0

	mov.l	#AUDIO_REC_ADDRESS, r1						; r1 = addr of AudRecAddr
	mov.l	@r1, r0								; r0 = AudioRecordingAddr

	mov.l	#DMAC_DAR1, r1
	mov.l	r0, @r1

	mov	#DMAC_DMATCR1, r1						; r1 = addr of DMA xfr-cnt reg
	mov	#AUDIO_DMA_PAGE_REC_QUARTER_SIZE, r0				; r0 = num samples to transfer  
	mov.l	r0, @r1								; DMA xfr-cnt reg = num samples

	mov.l	#CC_CODEC_ACR, r1						;adjust L and R data
	mov.l	#h'003fffff, r0
	mov.l	r0, @r1

	mov.l	#DMAC_CHCR1, r2
	mov.l	@r2, r1								;TE read    and  Zero clear
	mov.l	#h'00004035, r1							;Clear IE,TE
	mov.l	r1, @r2

	mov.l	#CC_CODEC_ACR, r1
	mov.l	#h'00600000, r2
	mov.l	r2, @r1								;Rec Restart

	mov.l	#AUDIO_ININT,r1						; Increment In Interrupt counter.
	mov.w	@r1,r0
	add.l   #1,r0
	mov.w	r0,@r1

	rts
	mov	#SYSINTR_AUDIO, r0

;*****************************************************************************
RecordingStop:
;*****************************************************************************
	rts
	mov	#SYSINTR_NOP, r0

	.endf									; end of DMA_ISR

	.end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?