📄 initad50.asm
字号:
.include "reg.h"
.def _init_AD50
.mmregs
temp .usect "temp",1
NOP_REQ .set 0000h ; Pseudo reg0 val
;DSP16位数据线中前8位(04)用来选择AD50中的寄存器,后4位设定寄存器的值
REG1_VAL .set 0104h ; INP & INM for DAC, (15+1)bit mode DAC(D0用于二次通讯方式)
READ_REG1 .set 2100h ; read reg1 value
REG2_VAL .set 0210h ; 16-bit ADC mode, rest is default
REG3_VAL .set 0300h ; No delayed frame-sync
REG4_VAL .set 04B0h ; Fs = MCLK/(256*N) = 8.192E6/(256*4)
; Gain: Input=0dB, Output=0db
SEC_REQ .set 0001h
RST_REQ .set 0180h
.text
_init_AD50:
PORTW 15,#0 ;选通CODEC(复位,此时处于二次通讯方式)
NOP
NOP
;通过MCBSP1串口发送数据之前要判断是否发送准备好
;判断SPCR2中XRDY是否为1(发送是否准备好),为1(准备好)就继续执行,否则死循环。
STM SPCR2,MCBSP1_SPSA
LOOP1: BITF *(MCBSP1_SPSD), #0x0002 ;如果SPCR2中XRDY=1(发送准备好),TC=1
BC LOOP1, NTC ;如果ST0中的TC=0 就跳到LOOP1循环(死循环)
NOP
NOP
;发送数据到AD50
STM SEC_REQ, MCBSP1_DXR1 ;通过MCBSP1_DXR1的DX引脚传送数据到AD50中,对其初始化
; 但是此时是二次通讯,告诉AD50要设定寄存器的值
STM SPCR2,MCBSP1_SPSA
LOOP11: BITF *(MCBSP1_SPSD), #0x0002
BC LOOP11,NTC
NOP
NOP
STM #REG4_VAL, MCBSP1_DXR1 ;设定AD50中寄存器4的参数
;Fs = MCLK/(256*N) = 8.192E6/(256*4)
; Gain: Input=0dB, Output=0db
STM SPCR2,MCBSP1_SPSA
LOOP2: BITF *(MCBSP1_SPSD), #0x0002
BC LOOP2, NTC
NOP
NOP
STM SEC_REQ, MCBSP1_DXR1 ;二次通讯
STM SPCR2,MCBSP1_SPSA
LOOP22: BITF *(MCBSP1_SPSD), #0x0002
BC LOOP22, NTC
NOP
NOP
STM #REG1_VAL, MCBSP1_DXR1
STM SPCR2,MCBSP1_SPSA
LOOP3: BITF *(MCBSP1_SPSD), #0x0002
BC LOOP3, NTC
NOP
NOP
STM SEC_REQ, MCBSP1_DXR1 ;二次通讯
STM SPCR2,MCBSP1_SPSA
LOOP33: BITF *(MCBSP1_SPSD), #0x0002
BC LOOP33, NTC
NOP
NOP
STM #REG2_VAL, MCBSP1_DXR1
STM SPCR2,MCBSP1_SPSA
LOOP4: BITF *(MCBSP1_SPSD), #0x0002
BC LOOP4, NTC
NOP
NOP
STM SEC_REQ, MCBSP1_DXR1 ;二次通讯
STM SPCR2,MCBSP1_SPSA
LOOP44: BITF *(MCBSP1_SPSD), #0x0002
BC LOOP44, NTC
NOP
NOP
STM #REG3_VAL, MCBSP1_DXR1
RETD
NOP
NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -