📄 et83x432_codec.inc
字号:
CodecCCLKP EQU PortF ;C_CLK PORT
CodecCCLK EQU 3 ;C_CLK----PORTF,3
CodecADnP EQU PortA ;ADDRESS/DATA PORT
CodecADn EQU 3 ;ADDRESS/DATA====PORTA,3
CodecCSnP EQU PortA ;CHIP SELECT PORT
CodecCSn EQU 2 ;CHIP SELECT====PORTA,2
CodecRWnP EQU PortA ;READ/WRITE PORT
CodecRWn EQU 1 ;READ/WRITE====PORTA,1
CodecResetP EQU PortA ;432_RESET
CodecReset EQU 0 ;432_RESET====PORTA,0
CodecDataPortIO EQU IOCD ;I/O control PortD
CodecDataPort EQU PortD ;DATA PORT====PORTD
LINE_IN_SET_AND_START:
CALL CODEC_INITIAL_AND_RESET
CALL StopCodecEncode
CALL CodecSetToEncode
CALL StartCodecEncode
RET
;*****************************************************************************************
PLAY_SET_AND_START:
CALL CODEC_INITIAL_AND_RESET
CALL StopCodecDecode
CALL CodecSetToDecode
CALL StartCodecDecode
RET
;*****************************************************************************************
CODEC_INITIAL_AND_RESET:
BANK 0
BS CodecResetP,CodecReset ;RESET==1
BS CodecRWnP,CodecRWn ;READ/WRITE==1
BS CodecADnP,CodecADn ;ADDRESS/DATA==1
BS CodecCSnP,CodecCSn ;CHIP SETLECT==1
CALL ResetCodec ;RESTE ET83X432
RET
;*****************************************************************************************
;*****************************************************************************************
ResetCodec:
BC CodecResetP,CodecReset ;Reset ET83X432
Call DELAY_3ms
BS CodecResetP,CodecReset ;Reset ET83X432
Call DELAY_3ms
RET
RET
;*****************************************************************************************
;*****************************************************************************************
CodecSetToEncode: ;FOR RECORD MODE
Mov A,#0x08 ;AUDIO FORMAT 2(AF2) M2SXXX XXCH DIR
Mov CodecAddress,A ;432 REGISTER #0X08==AF2(XXXX XXCH DIR)
Mov A,#0x00//02 ;00-STEREO ENCODE 80-MONO DECODE WHEN CM=1 AND CH=1
Mov CodecData,A ;
Call Write_Codec_Data ;WRITE REGISTER AUDIO FORMAT 2
Mov A,#0x10 ;AUDIO CONTROL 2(AC2) XXIADLS IADRS XX IDALS IDARS
Mov CodecAddress,A ;XXIADLS IADRS XX IDALS IDARS
Mov A,#0x00//33 ;0==OFF 1==ON
Mov CodecData,A ;ALL OFF
Call Write_Codec_Data
Mov A,#0x50 ;Internal ADDA CONTROL 0(IADDAC0)
Mov CodecAddress,A ;PCIDA PCIAD XX RIM LIM RHM LHM
Mov A,#0xD0 ;POWER CONTROL OF IDA 0==OFF 1==ON
Mov CodecData,A ;RIGHT_CHANNEL LINE IN MUTE 0==ON 1==MUTE
Call Write_Codec_Data ;RIGHT_CHANNEL HEADPHONE MUTE
Mov A,#0x52 ;INTERNAL ADDA CONTROL 1(IADDAC1)
Mov CodecAddress,A ;DEMPH1 DEMPH0 INSEL BYP X MIXER MICM MICBG
Mov A,#0x10 ;DE_EMPHASIS FILTER
Mov CodecData,A ;INSEL==INPUT INTERFACE SELECTION 0=LINE IN 1=MIC
Call Write_Codec_Data ;BYPASS MIXER_D&A_AUDION MICPHONE BOOST GAIN
/*MOV A,#0X0D//44.1 48
NOP
Mov D_57,A ;VARIABLE 432 REGISTER 0X0057==MAIN CLOCK MODE(MCM)
BANK 0 */ ;XXXX MCKM[3:0] 1101==272x SAMPLING CLOCK.-->DEFAULT
CALL CodecSetSame ;CodecSetSame==THE SAMENESS BETWEEN ENCODE AND DECODE
RET
;*****************************************************************************************
;*****************************************************************************************
CodecSetToDecode:
Mov A,#0x08 ;AUDIO FORMAT 2(AF2) M2SXXX XXCH DIR
Mov CodecAddress,A ;M2S AVAILABLE ONLY WHEN PLAYING MONO. SOUND(CM=1,CH=1)
;BANK 1 ;CH 0:1== STEREO:MONO.(ONLY L CHANNEL)
;Mov A,D_08 ;DIR DIRECTION OF CODEC 0:1== HALF DUPLEX:FULL DUPLEX
;BANK 0
MOV A,#00
Mov CodecData,A
Call Write_Codec_Data
Mov A,#0x10 ;AUDIO CONTROL 2(AC2) XXIADRS IADLS;XXIDARS IDALS
Mov CodecAddress,A ;INTERNAL AD R CHANNEL SELECT 0:1==OFF:ON
Mov A,#0x00
Mov CodecData,A
Call Write_Codec_Data
Mov A,#0x50 ;INTERNAL ADDA CONTROL 0(IADDAC0)
Mov CodecAddress,A ;PCIDA PCIADXX LIM RIM LHM RHM
Mov A,#0x90 ;POWER CONTROL OF IDA 0==OFF 1==ON IDA ON
Mov CodecData,A ;LEFT_CHANNEL LINE IN MUTE 0==ON 1==MUTE
Call Write_Codec_Data ;LEFT_CHANNEL HEADPHONE MUTE0==ON 1==MUTE
Mov A,#0x52 ;INTERNAL ADDA CONTROL 1(IADDAC1)
Mov CodecAddress,A ;DEMPH1 DEMPH0 INSEL BYP X MIXER MICM MICBG
Mov A,#0x04 ;DE_EMPHASIS 10==00 NO FILTER
Mov CodecData,A ;INSEL 0==LINE IN 1==MICPHONE
Call Write_Codec_Data ;BYPASS MIXER MIC MUTE MIC BOOST GAIN
CALL CodecSetSame
RET
;*****************************************************************************************
;*****************************************************************************************
CodecSetSame:
;------------------------------------------------------------
;DISABLE ALL INTERRUPT 0x05
;32FS, EN-Left Justify, DE-Right Justify 0x07
;44.1KHz, Stereo, 16-BIT 0x08
;Normal Quality, Factor3 --> 0 0x09
;Factor1 --> 0, Factor2 --> 0 0x0A
;Factor0 --> 0 0x0B
;Left-CH GAIN --> 0dB 0x0C
;Right-CH GAIN --> 0dB 0x0D
;DOWN-SAMPLE -->0, LPF OFF 0x0E
;------------------------------------------------------------
LOW_PASS_FILTER: ;LOW PASS FILTER
MOV A,#0x0E ;AUDIO FORMAT 3(AF3)
MOV CodecAddress,A ;XLPF SR2[2:0] XXX
MOV A,#0b01000000 ;LOW PASS FILTER(CUT OFF THE HIGH FREQUENCY NOISE)
MOV CodecData,A ;
CALL Write_Codec_Data ;BIT6==1 LPF ON
Call Read_Codec_Data
Xor A,#0b01000000
JBS STATUS,Z,$+3 ;ONE Period INSTRUCTION
JMP LOW_PASS_FILTER
SET_MFS: ;SET IMFS(Interrupt Mask of FIFO Status) control 0x0004
Mov A,#0x05 ;MSYNCX MMUTE MAFCSA MAFEF MMCBS MMFCS MMFEF
Mov CodecAddress,A
Mov A,#0x02//#0x00 ;ENABLE MFCS__MAIN FIFO CAPACITY STATUS
Mov CodecData,A ;WHEN ENCODE BYTE COUNT-->48 DECODE BYTE COUNT-->16
Call Write_Codec_Data
CALL Read_Codec_Data
Xor A,#0x02//#0x00
JBS STATUS,Z,$+3
JMP SET_MFS
SET_AF1: ;SET AF1(AUDIO FORMAT 1)
Mov A,#0x07 ;DCLS DFS DLRPS DJMS ECLS EFS ELRPS EJMS
Mov CodecAddress,A ;Decode_Channel Length Select Encode_CLS 0==32B_CLK 1=64
Mov A,#0xAA//#0xBA ;Decode_FORMAT SELECT 0==NORMAL 1==DELAYS ONE B_CLK
Mov CodecData,A ;Decode_LR Polarity Select 0==Left Channel low 1==High
Call Write_Codec_Data ;Decode_Justified Mode Select 0==left justified 1==right
CALL Read_Codec_Data ;64B_CLK ;NORMAL ;Left channel High ;left justified
Xor A,#0XAA//#0xBA
JBS STATUS,Z,$+3
JMP SET_AF1
SET_QC1: ;SET QC1(Quality Control 1)
Mov A,#0x09 ;QF1 XX QC X
Mov CodecAddress,A ;QUALITY OF FREQUENCY SUB_BAND 1
;BANK 1 ;QUALITY CONTROL 0==STANDARD QUALITY H2 H3 H4 AND L4
;Mov A,D_09 ; 1==High quality H1 H2 H3 AND L3
;BANK 0 ;QF1:Highest frequency
Mov A,#0X00
Mov CodecData,A ;QF2:Middle high frequency
Call Write_Codec_Data ;QF3:Middle low frequency
CALL Read_Codec_Data ;QF4:Lowest frequency
Xor A,#0X00
JBS STATUS,Z,$+3
JMP SET_QC1
SET_QC2: ;SET QC2(QUALITY CONTROL 2)
Mov A,#0x0A ;QF3 QF2
Mov CodecAddress,A ;
Mov A,#0x00
Mov CodecData,A
Call Write_Codec_Data
CALL Read_Codec_Data
Xor A,#0x00
JBS STATUS,Z,$+3
JMP SET_QC2
SET_QC3: ;SET QC3(QUALITY CONTROL 3)
Mov A,#0x0B
Mov CodecAddress,A ;xxxx QF4
Mov A,#0x00
Mov CodecData,A
Call Write_Codec_Data
CALL Read_Codec_Data
Xor A,#0x00//D_0B
JBS STATUS,Z,$+3
JMP SET_QC3
SET_DGC1: ;DGC1(Digital Gain Control 1)
Mov A,#0x0C ;xx DGC1 1-63(-47dB~+15dB,1dB Step)
Mov CodecAddress,A ;0==digital mute
;BANK 1 ;1==-47dB,2==-46dB......
Mov A,#48//D_0C ;48=0dB
;BANK 0 ;49=1dB,50=2dB......
Mov CodecData,A
Call Write_Codec_Data
Mov A,#0x0D ;DGC2(Digital gain control 2)
Mov CodecAddress,A ;xx DGC2 1-63(-47dB~+15dB,1dB Step)
;BANK 1 ;0==digital mute
Mov A,#48//D_0D ;1==-47dB,2==-46dB......
;BANK 0 ;48=0dB
Mov CodecData,A ;49=1dB,50=2dB......
Call Write_Codec_Data
SET_AC1: ;AC1(AUDIO CONTROL 1) CONTROL PLAYBACK SPEED
Mov A,#0x0F ;XXXX XX PSC1 PSC0
Mov CodecAddress,A ;Playback speed control
;BANK 1 ;PSC=0:NORMAL SPEED
;NOP ;PSC=1:2 Times
MOV A,#00//D_0F ;PSC=2:0.5 Times
;BANK 0 ;PSC=3:NA
Mov CodecData,A ;#00==normal speed
Call Write_Codec_Data
CALL Read_Codec_Data
;BANK 1
;NOP
Xor A,#00//D_0F
;BANK 0
JBS STATUS,Z,$+3
JMP SET_AC1
SET_AC2: ;SET AC2
MOV A,#0x10 ;AUDIO CONTROL 2(AC2)
MOV CodecAddress,A ;XXIADLS IADRS XX IDALS IDARS
MOV A,#0b00000000 ;D_10 ;INTERNAL ADDA OFF AND USE External ADDA
MOV CodecData,A
CALL Write_Codec_Data
Call Read_Codec_Data
Xor A,#0b00000000
JBS STATUS,Z,$+3
JMP SET_AC2
SET_LIGCL:
Mov A,#0x53 ;LIGCL(LINE IN Gain Control Left-Channel)
Mov CodecAddress,A ;xxxLIG4 LIG3 LIG2 LIG1 LIG0
Mov A,#0x17 ;11111(12dB)~00000(-34.5dB) In 1.5dB STEPS
Mov CodecData,A ;0DB
Call Write_Codec_Data
CALL Read_Codec_Data
Xor A,#0x17
JBS STATUS,Z,$+3
JMP SET_LIGCL
SET_LIGCR:
Mov A,#0x54 ;LIGCR(LINE IN GAIN CONTROL RIGHT-CHANNEL)
Mov CodecAddress,A ;XXXRIG4 RIG3 RIG2 RIG1 RIG0
Mov A,#0x17 ;11111(12dB)~00000(-34.5dB) IN 1.5dB STEPS
Mov CodecData,A
Call Write_Codec_Data
CALL Read_Codec_Data
Xor A,#0x17
JBS STATUS,Z,$+3
JMP SET_LIGCR
SET_HPGCL:
Mov A,#0X55 ;HPGCL(HEADPHONE GAIN CONTROL LEFT-CHANNEL)
Mov CodecAddress,A ;XLHG6 LHG5 LHG4 LHG3 LHG2 LHG1 LHG0
;x111 1111(6dB)~x000 0000(-74)
Mov A,#0X74//D_55//#0x00 ;0DB
Mov CodecData,A
Call Write_Codec_Data
CALL Read_Codec_Data
Xor A,#0X74
JBS STATUS,Z,$+3
JMP SET_HPGCL
SET_HPGCR:
Mov A,#0X56 ;HPGCR(HEADPHONE GAIN CONTROL LEFT-CHANNEL)
Mov CodecAddress,A ;XLHG6 LHG5 LHG4 LHG3 LHG2 LHG1 LHG0
;x111 1111(6dB)~x000 0000(-74)
Mov A,#0X74//D_56//#0x00 ;0DB
Mov CodecData,A
Call Write_Codec_Data
CALL Read_Codec_Data
Xor A,#0X74
JBS STATUS,Z,$+3
JMP SET_HPGCR
SET_MCM: ;MAIN CLOCK MODE(MCM)
Mov A,#0x57 ;XXXX MCKM3 MCKM2 MCKM1 MCKM0
Mov CodecAddress,A ;#OX0D=1101 DEFAULT
Mov A,#0X0D//D_57//#0x0F ;256X
Mov CodecData,A
Call Write_Codec_Data
CALL Read_Codec_Data
Xor A,#0X0D
JBS STATUS,Z,$+3
JMP SET_MCM
LPF_Parameters_Table: ;LPF Parameters Table
Mov A,#0x20 ;
Mov CodecAddress,A
Mov A,#0x80 ;this parameter is not changed by user
Mov CodecData,A
Call Write_Codec_Data
Mov A,#0x21 ;LPF Parameters Table
Mov CodecAddress,A
Mov A,#0xFF
Mov CodecData,A
Call Write_Codec_Data
Mov A,#0x22 ;LPF Parameters Table
Mov CodecAddress,A
Mov A,#0x83
Mov CodecData,A
Call Write_Codec_Data
Mov A,#0x23 ;LPF Parameters Table
Mov CodecAddress,A
Mov A,#0x01
Mov CodecData,A
Call Write_Codec_Data
Mov A,#0x24 ;LPF Parameters Table
Mov CodecAddress,A
Mov A,#0x82
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -