📄 codec.asm
字号:
.title "Codec&McBSP2 Init"
.mmregs
.def codecinit
;CPLD registers
CPLD_CODEC_REG_L .set 2H
CPLD_CODEC_REG_H .set 3H
CPLD_MISC_REG .set 6H
CODEC_READY_Bit .set 8H
MCBSP2_SELECT .set 0H
CPLD_CODEC_CLK_REG .set 7H
SAMPLE_RATE_6K .set 0BH
SAMPLE_RATE_12K .set 09H
SAMPLE_RATE_24K .set 8H
;PCM3002 registers
; Reg 0 - Left Channel DAC attenuation = 0dB
CODEC_REG0_L .set 0FFH ; Reg 0 - Low
CODEC_REG0_H .set 01H ; Reg 0 - High
; Reg 1 - Right Channel DAC attenuation = 0dB
CODEC_REG1_L .set 0FFH
CODEC_REG1_H .set 03H
; Reg 2 - Various ctl e.g. power-down modes
CODEC_REG2_L .set 0H
CODEC_REG2_H .set 04H
;Set-Up Register 3 set-up codec for format 0
;i.e. DAC -> 16-bit, MSB first, left justified in 32-bit words.
; ADC -> 16-bit, MSB first, right justified in 32-bit words.
; This allows us to pack L, R samples into 1 codec 'packet'
; consisting of 2 32-bit words per phrame. */
CODEC_REG3_L .set 0H
CODEC_REG3_H .set 06H
;McBSP2 registers
SPSA2 .set 34H
SPSD2 .set 35H
.text
;function codecinit
codecinit:
;push registers to stack
PSHM ST1 ;ST1: CPL, INTM
PSHM AR1
SSBX INTM ;disable interrupts
FRAME #-1
MVMM SP,AR1 ;ar1 point to SP
; select McBSP2
ST #MCBSP2_SELECT, *AR1
PORTW *AR1, CPLD_MISC_REG
;set codec sample rate
ST #SAMPLE_RATE_12K,*AR1
PORTW *AR1,CPLD_CODEC_CLK_REG
;init Codec Registers
ST #CODEC_REG0_L,*AR1
PORTW *AR1,CPLD_CODEC_REG_L
ST #CODEC_REG0_H,*AR1
PORTW *AR1,CPLD_CODEC_REG_H
CALL POLLRDY
ST #CODEC_REG1_L,*AR1
PORTW *AR1,CPLD_CODEC_REG_L
ST #CODEC_REG1_H,*AR1
PORTW *AR1,CPLD_CODEC_REG_H
CALL POLLRDY
ST #CODEC_REG2_L,*AR1
PORTW *AR1,CPLD_CODEC_REG_L
ST #CODEC_REG2_H,*AR1
PORTW *AR1,CPLD_CODEC_REG_H
CALL POLLRDY
ST #CODEC_REG3_L,*AR1
PORTW *AR1,CPLD_CODEC_REG_L
ST #CODEC_REG3_H,*AR1
PORTW *AR1,CPLD_CODEC_REG_H
CALL POLLRDY
;init MCBSP2
STM #0,SPSA2
STM #0000H,SPSD2 ;SPCR1
STM #1,SPSA2
STM #0000H,SPSD2 ;SPCR2
STM #6,SPSA2
STM #1F00H,SPSD2 ;SRGR1
STM #7,SPSA2
STM #0H,SPSD2 ;SRGR2
nop
nop
STM #2,SPSA2
STM #01A0H,SPSD2 ;RCR1
STM #3,SPSA2
STM #0000H,SPSD2 ;RCR2
STM #4,SPSA2
STM #01A0H,SPSD2 ;XCR1
STM #5,SPSA2
STM #0000H,SPSD2 ;XCR2
STM #0EH,SPSA2
STM #0083H,SPSD2 ;PCR
nop
nop
nop
nop
STM #0,SPSA2
STM #0001H,SPSD2 ;允许接收
STM #1,SPSA2
STM #0001H,SPSD2 ;允许发送
FRAME #1
POPM AR1 ;pop registers from stack
POPM ST1 ;pop registers from stack
RET
;poll if codec command transfer ready
POLLRDY
PSHM AR2
FRAME #-1
MVMM SP,AR2
WAIT: PORTR CPLD_MISC_REG,*AR2
BIT *AR2,CODEC_READY_Bit
BC WAIT,TC
FRAME #1
POPM AR2
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -