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 + -
显示快捷键?